2016-05-15 83 views
0

Ich habe Probleme, Register in x86 Assembly zu verstehen, ich weiß, dass EAX die vollen 32 Bits ist, AX ist die unteren 16 Bits, und dann AH und AL die höheren und unteren 8 Bits von AX, aber ich mache a Frage.x86 Berechnung AX gegeben AH und AL?

Wenn AL = 10 und AH = 10 was ist der Wert in AX?

Mein Denken über dies ist 10 in binäre konvertieren (1010) und dann nehmen Sie das als die höheren und unteren Bits von AX (0000 1010 0000 1010) und dann in Dezimal (2570) umwandeln bin ich irgendwo in der Nähe der richtige Antwort hier oder weg?

+3

Ja, das ist richtig. Sie können auch einfach "AX = 256 * AH + AL = 2560 + 10 = 2570" wählen. PS: Im Zweifelsfall können Sie Code in einem Debugger ausführen. – Jester

+0

Danke @Jester, dass Verknüpfung wird sich als nützlich erweisen :) – Dfarrelly

+3

Konvertieren in Hex ist mental einfacher. Jedes Byte besteht aus 2 Hexadezimalziffern. Es ist nur 0x0a0a, mit AH zuerst. –

Antwort

3

Wie von Peter Cordes vorgeschlagen, würde ich die Daten als Hexadezimal-Werte vorstellen:

RR RR RR RR EE EE HH LL 
|   |  || || 
|   |  || AL 
|   |  AH | 
|   |  |___| 
|   |  AX | 
|   |_________| 
|   EAX  | 
|_____________________| 
RAX 

... wo RAX sind die 64-Bit-Register, das in x86-64 existiert.

Also, wenn Sie AH = 0x12 und AL = 0x34 hatte, wie folgt aus:

00 00 00 00 00 00 12 34 
|   |  || || 
|   |  || AL 
|   |  AH | 
|   |  |___| 
|   |  AX | 
|   |_________| 
|   EAX  | 
|_____________________| 
RAX 

... dann musste man AX = 0x1234 und EAX = 0x000 usw.

zu beachten, dass, wie in diesem Diagramm gezeigt, AH ist die einzige "komisch" register hier, das nicht mit den unteren Bits ausgerichtet ist. Die anderen (AL, AX, EAX, RAX für 64-Bit) sind nur verschiedene Größen, aber alle auf der rechten Seite ausgerichtet. (Zum Beispiel haben die zwei Bytes EE EE im Diagramm keinen eigenen Registernamen.)