Newsgroup: it.comp.lang.c
Titolo: registri cpu

Scusatemi della domanda che potrebbe essere OT per gli esperti.
Di quanti bit e composto un registro di un processore pentium 133 (i primi
per intenderci)?
Grazie!


8 , 16 , 32  dipende dal registro ( e dalla modalita' di funzionamento
del processore) ,  i pentium sono ancora compatibili col capostipite
della famiglia (8088 / 8086 ).
Marco

per intenderci)?
I registri EAX, EBX, ecc, hanno 32 bit ciascuno; si puo`
anche accedere ai loro 16 bit piu` bassi, con istruzioni
a 16 bit, che l'assembler dovrebbe generare se si usano
i vecchi nomi dei registri, senza la E (AX, BX, ecc).  In
questo, il Pentium (a qualsiasi velocita` di clock), il
Pentium II, il Celeron, ecc, non differiscono dai buoni
vecchi 386 e 486, nonche` dai vari cloni/imitatori.
Alex


I registri di un pentium dunque si compongono di 32 bit, pertanto il valore
massimo che essi possono esprimere č quello del long, cioč 4294967295
(esadecimale FFFFFFFF): il max offset gestibile dalla CPU permette dunque
di indirizzare una sequenza di 4294967295, corrispondenti a 4096 Kb (non č
poi poco), comunque.
Configurazioni di RAM superiori (praticamente tutte) devono essere
indirizzate con uno stratagemma: in pratica si utilizzano due registri,
rispettivamente detti registro di segmento (segment register) e registro di
offset (offset register);
Domanda:
I due registri seg:off sono due registri fisicamente separati a livello di
hardware, oppure con i famosi 32 bit di un registro esiste il sistema per
rappresentare entrambi?
Se con i 32 bit si rappresentano seg:off in che modo avviene tale
rappresentazione?
Fatemi sapere se sto fuori con il raggionamento e se conoscete un libro
(anche universitario) che tratti dell'argomento, che se non sbaglio
dovrebbe essere "aritmetica binaria".
 

 
I registri di un pentium dunque si compongono di 32 bit, pertanto il valore
massimo che essi possono esprimere è quello del long, cioè 4294967295
(esadecimale FFFFFFFF): il max offset gestibile dalla CPU permette dunque
di indirizzare una sequenza di 4294967295, corrispondenti a 4096 Kb (non è


 di indirizzare una sequenza di 4294967295, corrispondenti a 4096 Kb (non è
errore 4096 MB o 4GB
sui pc ancora non ci simao arrivati!
Marco

OK daccordo hai raggione (anche se è relativo l'errore), ma dimmi
qualcos'altro, per favore :-(
Grazie!

 
Allora in origine 8080/86 avevano i seg. registri generali a 16 bit
oguno composto da 2 registri ad 8 bit ( AX -> AH AL )
AX
BX
CX
DX
2 registri puntatori ( generici ) a 16 bit
DI SI
2 registri puntatori per lo stack ( stack pointer e frame pointer ) a 16
bit
SP e BP
e il Program counter a 16 bit
PC
pero' potevano indirizzare in tutti 1 MegaByte di Memoria
per poter estendere gli'indirizzi tutti gli accessi alla memoria
venivano eseguiti tramite i registri di segmento ( 4 registri a seconda
del tipo d'accesso)
CS   code segment reg.
DS   data segment reg.	
SS   stack segment reg.
ES   extended segment reg.
era pero' possibilie usare durante gli accessi un registro di  segmento
diverso dal default prefissando l'istruzione con un opportuno byte di
'segment ovverride'.
La composizione dell'indirizzo fisico veniva ottenuta 'shiftando' di 4
bit il registro di segmento e sommando l'indirizzo interno al segmento
esempio ( in esadecimale )
CS = 5678   ---------->    5678
PC = 1234   ---------->   12340
l'indirizzo completo-->   179b8 ( indirizzo a 20 bit)
questa modalita' di funzionamento e tuttora presente quando il
processore 80xxx funziona in modalita' protetta (? ho sempre fatto
confusione con la nomeclatura Intel) ovvero quando funzionano i vecchi
programmi DOS.
dall' 80286 in poi del cose si sono complicate in quanto sono stati
espansi di dimensione i registri, sono nati EAX,EBX e compagni a 32 bit 
inoltre e' cambiata la modalita' di mappatura degli indirizzi dei
segmenti.
se ti interessa c'e' un manuale on line sul 386 al seguente URL:
http://ftp.unina.it/pub/docs/386htm/toc.htm
non penso che dopo il 386 siano intervenute sostanziali modifiche al
sistema.
Marco