web-dev-qa-db-fra.com

Comment AX, AH, AL mappe-t-il sur EAX?

D'après ma compréhension des registres x86, chaque code peut être accédé par l'intégralité du code 32 bits et est divisé en plusieurs registres accessibles.

Dans cet exemple, EAX étant un registre de 32 bits, si nous appelons AX, les 16 premiers bits devraient être renvoyés, et si nous appelons AH ou AL, devrait renvoyer les 8 bits suivants après les 16 bits et AL devrait renvoyer les 8 derniers bits.

Alors ma question, parce que je ne crois pas vraiment, c’est comme ça que ça fonctionne. Si nous stockons la valeur 32 bits aka EAX stockant:

0000 0100 0000 1000 0110 0000 0000 0111

Donc, si on accède à AX, il devrait retourner

0000 0100 0000 1000

si on lit AH il devrait retourner

0000 0100

et quand on lit AL il devrait retourner

0000 0111

Est-ce correct? et si c’est quelle valeur AH a-t-il vraiment?

34
Randy

Non, ce n'est pas tout à fait vrai.

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)

Modifier:

Pour compléter, en plus de ce qui précède, qui était basé sur un processeur 32 bits, les processeurs Intel/AMD 64 bits ont

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

AX est les 16 bits inférieurs de EAX. AH est les 8 bits de poids fort de AX (c'est-à-dire les bits 8-15 de EAX) et AL est l'octet le moins significatif (bits 0 à 7) de EAX ainsi que de AX.

Exemple (chiffres hexadécimaux):

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

non vous avez tort

La sélection de Al et Ah provient de AX pas de EAX

par exemple

EAX=0000 0000 0000 0000 0000 0000 0000 0111

Donc, si nous appelons AX, cela devrait revenir

0000 0000 0000 0111

si nous appelons AH il devrait revenir

0000 0000

et quand on appelle AL il devrait revenir

0000 0111

Exemple numéro 2

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

exemple 3

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

L'extrait ci-dessous examine EAX à l'aide de 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 - Valeur 32 bits complète
  2. AX - valeur inférieure de 16 bits
  3. AH - Bits de 8 à 15
  4. AL - 8 bits inférieurs d'EAX/AX
4
scanjee

Non - AL correspond aux 8 bits les moins significatifs de AX. AX est les 16 bits les moins significatifs de EAX.

C’est peut-être plus facile à gérer si nous commençons par 04030201h en eax. Dans ce cas, AX contiendra 0201h, AH contiendra 02h et AL contiendra 01h.

4
Jerry Coffin