wake-up-neo.com

Wie ordnen AX, AH, AL EAX zu?

Mein Verständnis von x86-Registern besagt, dass auf jedes Register mit dem gesamten 32-Bit-Code zugegriffen werden kann und dass es in mehrere zugreifbare Register unterteilt ist.

In diesem Beispiel ist EAX ein 32-Bit-Register, wenn wir AX aufrufen, sollte es die ersten 16 Bits zurückgeben, und wenn wir AH oder AL aufrufen sollte die nächsten 8 Bits nach den 16 Bits zurückgeben und AL sollte die letzten 8 Bits zurückgeben.

Meine Frage ist also, weil ich nicht wirklich glaube, dass es so funktioniert. Wenn wir den 32-Bit-Wert aka EAX saving speichern:

0000 0100 0000 1000 0110 0000 0000 0111

Wenn wir also auf AX zugreifen, sollte es zurückkehren

0000 0100 0000 1000

wenn wir AH lesen, sollte es zurückkehren

0000 0100

und wenn wir AL lesen, sollte es zurückkehren

0000 0111

Ist das richtig? und wenn ja, welchen Wert hat AH wirklich?

34
Randy

Nein, das stimmt nicht ganz.

EAX is the full 32-bit value
AX is the lower 16-bits
AL is the lower 8 bits
AH is the bits 8 through 15 (zero-based)

Bearbeiten:

Der Vollständigkeit halber haben zusätzlich zu den oben genannten, auf einer 32-Bit-CPU basierenden, 64-Bit-Intel/AMD-CPUs

RAX, which hold a 64-bit value, and where EAX is mapped to the lower 32 bits.

AX sind die 16 unteren Bits von EAX. AH sind die 8 hohen Bits von AX (d. H. Die Bits 8-15 von EAX) und AL ist das niederwertigste Byte (Bits 0-7) von EAX sowie AX.

Beispiel (hexadezimale Ziffern):

EAX: 12 34 56 78
AX: 56 78
AH: 56
AL: 78
32
pascalhein
| 0000 0001 0010 0011 0100 0101 0110 0111 | ------> EAX

|                     0100 0101 0110 0111 | ------> AX

|                               0110 0111 | ------> AL

|                     0100 0101           | ------> AH
12
Miku Ghoul

nein dein ans ist falsch

Die Auswahl von Al und Ah stammt von AX und nicht von EAX

z.B

EAX=0000 0000 0000 0000 0000 0000 0000 0111

Wenn wir AX aufrufen, sollte es zurückkehren

0000 0000 0000 0111

wenn wir AH anrufen, sollte es zurückkehren

0000 0000

und wenn wir AL anrufen, sollte es zurückkehren

0000 0111

Beispiel Nummer 2

EAX: 22 33 55 77
AX: 55 77
AH: 55    
AL: 77

beispiel 3

EAX: 1111 0000 0000 0000 0000 0000 0000 0111    
AX= 0000 0000 0000 0111
AH= 0000 0000
AL= 0000 0111  
7

Das folgende Snippet untersucht EAX mit GDB.

    (gdb) info register eax
    eax            0xaa55   43605
    (gdb) info register ax
    ax             0xaa55   -21931
    (gdb) info register ah
    ah             0xaa -86
    (gdb) info register al
    al             0x55 85
  1. EAX - Voller 32-Bit-Wert
  2. AX - unterer 16 Bit Wert
  3. AH - Bits von 8 bis 15
  4. AL - 8 Bits von EAX/AX senken
4
scanjee

Nein - AL sind die 8 niedrigstwertigen Bits von AX. AX sind die 16 niedrigstwertigen Bits von EAX.

Vielleicht ist es am einfachsten, mit 04030201h in eax zu beginnen. In diesem Fall enthält AX 0201h, AH 02h und AL 01h.

4
Jerry Coffin