|
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
|