Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [risolto] [ASM] memorizzazione word in array char
Forum - Altri Linguaggi - [risolto] [ASM] memorizzazione word in array char

Avatar
Metal (Normal User)
Newbie


Messaggi: 16
Iscritto: 04/04/2011

Segnala al moderatore
Postato alle 19:00
Venerdì, 15/07/2011
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:

Codice sorgente - presumibilmente C++

  1. unsigned short int mat = 1721, ris1;
  2. unsigned char vet[100];
  3.  
  4. __asm
  5. {
  6.         mov dx, mat
  7.         xchg dl, dh
  8.         mov word ptr vet[98], dx
  9.         ror byte ptr vet[99], 4
  10.         push word ptr vet[98]
  11.         pop ris1
  12. }



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 il 15/07/2011 alle 20:24
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 19:47
Venerdì, 15/07/2011

questo chiarirà ogni tuo dubbio: http://en.wikipedia.org/wiki/Endianness

PM Quote
Avatar
Metal (Normal User)
Newbie


Messaggi: 16
Iscritto: 04/04/2011

Segnala al moderatore
Postato alle 20:23
Venerdì, 15/07/2011
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:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 22:28
Venerdì, 15/07/2011
Testo quotato

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

PM Quote