Comment AX, AH, AL map sur EAX?
D'après ce que j'ai compris des registres x86, chaque registre est accessible par l'ensemble du code 32 bits et il est divisé en plusieurs registres accessibles.
Dans cet exemple,EAX
avoir un 32 bits registre, si nous appelons AX
il doit retourner le premier 16 bits, et si nous appelons AH
ou AL
il doit retourner les 8 bits après le 16 bits et AL
devrait retourner les 8 derniers bits.
donc ma question, parce que je ne crois pas vraiment que c'est comment il fonctionne. Si nous stockons une valeur de 32 bits de sept... aka EAX
stockage
0000 0000 0000 0000 0000 0000 0000 0111
donc si nous accédons AX
il doit retourner
0000 0000 0000 0000
si nous lisons AH
il doit retourner
0000 0000
et quand nous avons lu AL
il doit retourner
0000 0111
Est-ce correct? et si c'est ce que la valeur n' AH
vraiment?
5 réponses
Non, ce n'est pas tout à fait droit.
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)
Edit:
pour être complet, 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 le 16 bits inférieur D'EAX. AH est le 8 high bits of AX (i.e. the bits 8-15 of EAX) et AL est le moins important byte (bits 0-7) de EAX ainsi que AX.
exemple (hexadécimal digits):
EAX: 12 34 56 78
AX: 56 78
AH: 56
AL: 78
pas de votre sna est Mauvais
Sélection de Al et Ah est de AX pas de EAX
e.g
EAX=0000 0000 0000 0000 0000 0000 0000 0111
donc si on appelle AX il devrait revenir
0000 0000 0000 0111
si nous appelons AH, il doit retourner
0000 0000
et lorsque nous appelons AL il doit retourner
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
Non -- AL est les 8 bits les moins significatifs de la hache. AX est le 16 bits d'EAX le moins significatif.
il est peut-être plus facile de traiter avec si nous commençons avec 04030201h en eax. Dans ce cas, AX contiendra 0201h, AH contiendra 02h et AL contiendra 01h.
l'extrait ci-dessous examine EAX en utilisant 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
- EAX - Pleine valeur 32 bits
- AX - bas 16 bits valeur
- Ah - Bits de 8 à 15
- AL - bas 8 bits de EAX/AX