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?
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
| 0000 0001 0010 0011 0100 0101 0110 0111 | ------> EAX
| 0100 0101 0110 0111 | ------> AX
| 0110 0111 | ------> AL
| 0100 0101 | ------> AH
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
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
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.