Oppure

Loading
15/07/11 17:00
Metal
Salve, mi sto preparando per l'esame di architettura (dove ci sono degli esercizi di asm) e sono incappato in un problema.

Il codice è questo, l'esercizio prevede che faccia tutto con carta e penna:

unsigned short int mat = 1721, ris1;
unsigned char vet[100];

__asm
{
	mov dx, mat
	xchg dl, dh
	mov word ptr vet[98], dx
	ror byte ptr vet[99], 4
	push word ptr vet[98]
	pop ris1
}


il problema è che mi aspettavo che in ris1 ci fosse "B960h", mentre invece c'è "9B06h".
Ho capito che il mio errore è nell'istruzione "ror byte ptr vet[99], 4". Praticamente io mi aspettavo che in vet[99] fosse memorizzato il byte "06h", mentre invece c'è il byte "B9h", che io pensavo fosse in vet[98].

Dopo l'istruzione "xchg dl, dh", DX ha questo valore: B906h (e di questo sono sicuro, perché ho guardato col debugger di Visual Studio).
Praticamente io pensavo che l'istruzione "mov word ptr vet[98], dx" mettesse in vet[98] il byte in DH (cioè "B9h";) e in vet[99] il byte in DL (cioè "06h";), mentre invece apparentemente fa il contrario.

E' come se il numero venisse memorizzato nell'array con l'ordine dei byte inverso rispetto all'ordine in cui normalmente leggiamo, quindi da destra verso sinistra.
In memoria quindi mi trovo (dopo il ROR):

+--------+--------+
| 06 | 9B |
+--------+--------+
| vet(98) | vet(99) |
+--------+--------+

mentre io me li aspettavo invertiti.
Ma se printo "ris1" in hex, mi viene: 9B06


Qualcuno sa dirmi se tutto questo ha senso?
Qualcuno sa spiegarmi meglio come funziona la cosa?

Qualcuno ha capito qualcosa?
Ultima modifica effettuata da Metal 15/07/11 18:24
aaa
15/07/11 17:47
HeDo

questo chiarirà ogni tuo dubbio: en.wikipedia.org/wiki/…
aaa
15/07/11 18:23
Metal
Ah. Non so perché ma ero totalmente convinto che fosse il contrario ._.
così convinto che non ho neanche controllato :_doubt:

bon, grazie mille
mi sento un idiota :asd:
aaa
15/07/11 20:28
HeDo
Postato originariamente da Metal:

Ah. Non so perché ma ero totalmente convinto che fosse il contrario ._.
così convinto che non ho neanche controllato :_doubt:

bon, grazie mille
mi sento un idiota :asd:


nessuno nasce imparato :)
aaa