View Single Post
Old 09-07-2007, 17:23   #3
goldorak
Senior Member
 
Iscritto dal: Apr 2003
Messaggi: 16462
Beh il fatto che utilizzi solo registri a 32 bit non implica automaticamente che l'indirizzamento della memoria sia a 32 bit. Un esempio classico si ha con i processori 386/486 e antecedenti conteneva registria 8/16 bit ma l'indirizzamento sulla memoria fisica avveniva con 20bit.
Si combinavano 2 registri di 16 bit (uno per determinare il segmento e l'altro per determinare l'offest) per ottenere alla fine un indirizzo fisico di 20bit.
Il che spiega perche' i programmi dos non potevano gestire piu' di 1 MB di ram.

Ora con i processori che usano un indirizzamento della memoria lineare ce' in linea di principio una corrispondenza tra indirizzamento logico a n bit e l'indirizzamento fisico a n bit.

Pertanto con i processori moderni che usano 32 bit per la memoria logica, useranno 32 bit per l'indirizzamento della memoria fisica.

Detto questo, se devi estendere un indirizzo di 16 bit a 32 bit tenendo conto del MSB occorre vedere se il MSB e' 1 o 0.
Se l'indirizzo a 16 bit e' cosi : 1xxx xxxx xxxx xxxx dove x=0 o 1
l'estensione a 32 bit sara' 1111 1111 1111 1111 1xxx xxxx xxxx xxxx

mentre se l'indirizzo a 16 bit e' cosi' 0xxx xxxx xxxx xxxx con x=0 o 1
la sua estensione a 32 bit sara' 0000 0000 0000 0000 0xxx xxxx xxxx xxxx quindi in pratica l'estensione dell'indirizzo a 32 bit coincide con quello a 16 bit. Ma solo in questo caso.
__________________
MICROSOFT : Violating your privacy is our priority
goldorak è offline   Rispondi citando il messaggio o parte di esso