Problemi Semplice esercizio assembly

di il
5 risposte

Problemi Semplice esercizio assembly

Salve a tutti. Ho riscontrato un problema nel seguente esercizio:

short int Mat = 1104;

__asm {
MOV AX,Mat
XOR AH,AL
MOV BYTE PTR Vet[2],AH
MOV BYTE PTR Vet[3],AL
SHL WORD PTR Vet[2],3
MOV AX,WORD PTR Vet[2]
}
Facendo i calcoli a mano, il mio risultato viene 80A2 (AX), mentre il compilatore indica 82A0... Non riesco a capire quale passaggio sbaglio.
Grazie per la disponibilità, Andrea.

5 Risposte

  • Re: Problemi Semplice esercizio assembly

    Quell'1104 è in base 10 immagino (lo chiedo dato che per 80A2 e 82A0 hai omesso la H).
  • Re: Problemi Semplice esercizio assembly

    Mostraci i tuoi calcoli "a mano", altrimenti come si fa a vedere dove sbagli, se sbagli ?
  • Re: Problemi Semplice esercizio assembly

    Si il numero Mat è espresso in base 10.

    1) AX = 0000 - 0100 - 0101 - 0000
    2) AX = 0101 - 0100 - 0101 - 0000
    3) Vet[2] = 0101 - 0100
    4) Vet[3] = 0101 - 0000
    5) (Faccio lo shift logico a Sx di vet[2]; siccome è indicato WORD PTR vengono "shiftati" anche quelli di Vet[3])
    Vet[2/3] = 1010 - 0010 - 1000 - 0000 == A-2-8-0 (b=16)
    6) AX = 8 - 0 - A - 2
  • Re: Problemi Semplice esercizio assembly

    L'errore che fai è al punto 5. Tu considerti vet[2] vet[3] ma devi prendere in esame vet[3] vet[2] (parte alta e parte bassa) per lo shift.

    Quindi parti da

    0101 - 0000 - 0101 - 0100

    e arrivi a

    1000 - 0010 - 1010 - 0000

    ovvero 8 2 A 0
  • Re: Problemi Semplice esercizio assembly

    oregon ha scritto:


    L'errore che fai è al punto 5. Tu considerti vet[2] vet[3] ma devi prendere in esame vet[3] vet[2] (parte alta e parte bassa) per lo shift.

    Quindi parti da

    0101 - 0000 - 0101 - 0100

    e arrivi a

    1000 - 0010 - 1010 - 0000

    ovvero 8 2 A 0
    Ho capito! Grazie mille per la disponibilità. Buona serata
Devi accedere o registrarti per scrivere nel forum
5 risposte