Newsgroup: it.comp.lang.c
Titolo: offset segment

ciao
da poco studio il C
Ho acquistato Linguaggio C seconda edizione
ma accortomi di alcune lacune di base, ho stampato la guida Tricky C
p.s com'e' ?? Un parere di voi esperti.... :)
veniamo al dunque
sulla guida tricky C si parla (sono ancora alle prime pagine) vine
riportato questo testo:
"I registri del processore Intel 8086 si compongono di 16 bit ciascuno,
pertanto il valore massimo che essi possono esprimere è quello
dell'integer, cioè 65535 (esadecimale FFFF): il massimo offset gestibile
dalla CPU permette dunque di indirizzare una sequenza di 65536 byte
(compreso il primo, che ha offset pari a 0), corrispondenti a 64Kb.
Configurazioni di RAM superiori (praticamente tutte) devono perciò
essere indirizzate con uno stratagemma: in pratica si utilizzano due
registri, rispettivamente detti registro di segmento (segment register)
e registro di offset (offset register). Segmento e offset vengono
solitamente indicati in notazione esadecimale, utilizzando i due punti
(":") come separatore, ad esempio 045A:10BF. Ma non è tutto.
Se segmento e offset venissero semplicemente affiancati, si potrebbero
indirizzare al massimo 128Kb di RAM: infatti si potrebbe avere un offset
massimo di 65535 byte a partire dal byte numero 65535. Quello che
occorre è invece un valore in grado di numerare, o meglio di
indirizzare, almeno 1Mb: i fatidici 640Kb, ormai presenti su tutte le
macchine in circolazione, più gli indirizzi riservati al BIOS e alle
schede adattatrici[5]. Occorre, in altre parole, un indirizzamento a20
bit[6].
Questo si ottiene sommando al segmento i 12 bit più significativi
dell'offset, ed accodando i 4 bit rimanenti dell'offset stesso: tale
tecnica consente di trasformare un indirizzo segmento:offset in un
indirizzo lineare[7]. L'indirizzo seg:off di poco fa (045A:10BF)
corrisponde all'indirizzo lineare 0565F, infatti 045A+10B = 565 (le
prime 3 cifre di un valore esadecimale di 4 cifre, cioè a 16 bit,
corrispondono ai 12 bit più significativi).  "
1) i registri del processore intel quanti sono? Visto che ognuno di essi
ha una capacita' di 16 bit, quanti registri deve avere per poter
trattare offset di 65535 byte?
2) Si puo' dire o e' errato che 2 Byte possono esprimere 65353
combinazioni di bit?
3)vorrei capire in parole molto semplici perche' per la ram si usa lo
"stratagemma " di offset e segment...scusate ma essendo algi inizi sono
"terra terra"....quando pazziavo con il visual basic....tutte queste
cose non le tenevo in considerazione :(
grazie a tutti!!!!!!!!!
buona lavoro 
Stefano
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

"stratagemma " di offset e segment...
il motivo direi che e' "storico" visto che i primi processori 8086
avevano registri a 16 bit. Poi, in nome della compatibilita', si e'
continuato fino a pochi giorni fa quando i nuovi sistemi operativi a
32 bit hanno introdotto l'indirizzamento "flat"
Andrea

cose non le tenevo in considerazione :(
Premesso che la tendenza e' quella di abbandonare questo sistema e
molti sistemi operativi gia' lo hanno fatto.  Tale indirizzamento era
comodo nei processori 8086, perche' permetteva di gestire la memoria
utilizzando un'aritmetica a 16 bit sugli indirizzi (o meglio sugli
offset).
Spesso (ma non sempre) i registri segmento vengono impostati alla
partenza del programma, poi non si toccano piu'.  In questo modo si
puo' indirizzare soltanto tramite l'offset, che essendo a 16 bit e'
facile da gestire per un processore basato su quell'architettura.
Oggi quel sistema non ha piu' senso di esistere, un 386 esegue un
calcolo a 32 bit esattamente come se fosse a 16 bit.
L'8086 e l'8088 hanno registri interni a 16 bit, l'indirizzamento
avviene a 20 bit (1 MB), l'80286 ha un bus indirizzi a 24 bit (16 MB)
mentre l'80386 ha un'architettura a 32 bit completa sia il bus dati
che quello degli indirizzi sono a 32 bit, come pure tutti i registri
interni del processore
ciao, acc.   
a...@libero.it

 combinazioni di bit?
No.
2 byte = 2^16 = 65536 combinazioni di bit.