da Rael » 25/09/2005, 09:04
Ciao, tuttora programmo in assembler 8086 (IA-32), però quello del motorola credo sia un po' differente.
Ora iniziando dalla fine, i tuoi due indirizzi sono scritti in esadecimale, ed utilizzato il complemento a 2 per memorizzare l'informazione sul segno. (-x = !(x)+1).
ora, dato che sono codificati in esadecimale, per iniziare dovresti tradurli in binario per capirci davveroqualcosa
(2011)hex=(0010000000010001)bin
(c044)hex=(1100000001000100)bin
vediamo subito che il bit di segno dei due numeri (il bit più significativo, alias bit più sulla sinistra) è opposto, 0 nel primo caso, 1 nel secondo (quindi il secondo numero è negativo)
ora il gioco è fatto, per l'estensione, l'indirizzo in sè occuperà i 16 bit meno significativi, mentre gli altri 16 verranno riempiti tutti con il bit di segno dell'indirizzo che si vuole estendere
da cui
ext((2011)hex)=(00000000000000000010000000010001)bin
ext((c044)hex)=(11111111111111111100000001000100)bin
ricodificando indietro in esadecimale ottieni proprio i due numeri che ti vengono forniti come risultato.
per la codifica della move dovresti invece vedere proprio la documentazione per l'assembly del processore con cui lavori, altrimenti non hai modo di saperlo, ogni processore, codifica i comandi secondo una propria logica, il MIPS è diverso dall 8086, che è diverso dal motorola 68000
P.s. non capisco perchè nelle università italiane si ostinino a studiare il mips, che poi effettivamente non viene usato se non in alcune macchine dedicate esclusivamente per fare della grafica ... mah ...