2016-08-05 14 views
1

Ich habe Probleme, die unter Baugruppe in C++ übersetzenMontageanleitung c Übersetzen ++

MOVZX EAX, DX 

Wo EDX ein 32-Bit-Register ist. Ich muss die niedrigsten 16 Bits (DX) bekommen.

Ich habe versucht, die folgenden:

unsigned edx = 0x123ABCDE; 
unsigned dx = (edx>>16) & 0xff; 

erwarte ich einen Wert von BCDE in dx gespeichert zu bekommen, aber es ist ein bisschen schief gegangen.

Jede Hilfe würde sehr geschätzt werden.

+1

Big Endian oder Little Endian? Macht einen großen Unterschied. –

+0

Ist der falsche Wert 0x123A? –

+0

"etwas falsch gegangen" Was bedeutet das? Erhalten Sie EDCB oder 123A prochance? –

Antwort

2

Lassen Sie uns Ihren Code Schritt für Schritt analysieren.

Nichts Ungewöhnliches.

Lassen Sie uns die nächste Anweisung entsprechend der Reihenfolge der Auswertung auflösen.
(edx >> 16) - Rechtsverschiebung um 16 Bit.
Dies ist die richtige Verschiebung um 2 Byte oder 4 Hexadezimalziffern.
Antwort sollte 0x123A sein. Jetzt

, lassen Sie uns das Recht halten höchstens 8 Bits (AND-Verknüpfung mit 0xFF):
0x123A & 0xFF == 0x3A

Das Ergebnis 0x3A in der Variablen dx sein sollte.

+0

Danke für Ihre Erklärung. Diese Erklärung zusammen mit Michaels Kommentar hat mir geholfen, herauszufinden, wo ich falsch gelaufen bin und die Lösung zu verstehen. eax = edx & 0xffff gibt mir 0xBCDE wo edx = 0x123bcde – 1ntgr

+1

Wenn die Antwort hilfreich ist, klicken Sie bitte auf das Häkchen. –