Ultima modifica:
Scusate il titolo non è dei migliori, comunque stavo facendo un paio di prove con il debugger quando mi accordo di una cosa, per quale motivo se memorizzo in AX la word meno significativa di una double word contenente 65536, quindi la word meno significativa conterrà 65535 e quella più significativa 1, in AX viene memorizzato un valore diverso da 65535?
Come si può vedere in AX viene caricato il contenuto dell'indirizzo fisico DS : 0000 che corrisponde all'indirizzo fisico del primo byte della double word e quindi del primo byte della word meno significativa, in poche parole l'indirizzo della word meno significativa che però apposto di "contenere" 65535(10) FFFFF(16) contiene il valore 0, mentre la word più significativa contiene il valore che ovviamente non è stato possibile allocare nella word meno significativa che è quel 1 di troppo.
Ecco il codice:
Come si può vedere ho inizializzato la double word con il valore 65536, quindi la word meno significativa dovrebbe contenere 65536 e quella più significativa 1, allora perché il debugger mostra alto, inoltre i dati vengono gestiti il litle endian quindi credo sia ancora più probabile che nella word meno significativa ci sia 65535.
Perché Questo? Grazie
EDIT:
Mi sono reso conto che se nella word più significativa viene memorizzato 1 la word meno significativa si azzero, infatti seguendo la "sequenza" binaria:
Quindi l'intera double word conterrà:
tutti i bit vengono forzati a 0.
Era per caso questo il motivo, perché ciò non accade anche con i registri?
Come si può vedere in AX viene caricato il contenuto dell'indirizzo fisico DS : 0000 che corrisponde all'indirizzo fisico del primo byte della double word e quindi del primo byte della word meno significativa, in poche parole l'indirizzo della word meno significativa che però apposto di "contenere" 65535(10) FFFFF(16) contiene il valore 0, mentre la word più significativa contiene il valore che ovviamente non è stato possibile allocare nella word meno significativa che è quel 1 di troppo.
Ecco il codice:
Codice:
stack SEGMENT PARA STACK
db ?
stack ENDS
data SEGMENT PARA PUBLIC
var1 dd 65536
data ENDS
code SEGMENT PARA PUBLIC
ASSUME ss: stack, ds: data, cs: code
_start:
mov ax, data
mov ds, ax
;bx = word meno significativa ax = più significativa
mov ax, WORD PTR var1
mov bx, WORD PTR var1+2
code ENDS
END _start
Perché Questo? Grazie
EDIT:
Mi sono reso conto che se nella word più significativa viene memorizzato 1 la word meno significativa si azzero, infatti seguendo la "sequenza" binaria:
Codice:
65536 = 1111111111111111 => FFFFH
1 = 0000000000000001 = > 1H
Codice:
0000000000000001 | 0000000000000000
Era per caso questo il motivo, perché ciò non accade anche con i registri?