modes - not instruction assembly
¿Cómo se mapean AX, AH, AL en EAX? (6)
AX es los 16 bits más bajos de EAX. AH es los 8 bits altos de AX (es decir, los bits 8-15 de EAX) y AL es el byte menos significativo (bits 0-7) de EAX, así como AX.
Ejemplo (dígitos hexadecimales):
EAX: 12 34 56 78
AX: 56 78
AH: 56
AL: 78
Mi comprensión de los registros x86 dice que se puede acceder a cada registro con el código completo de 32 bits y se divide en múltiples registros accesibles.
En este ejemplo, EAX
es un registro de 32 bits, si llamamos AX
debería devolver los primeros 16 bits, y si llamamos AH
o AL
, debería devolver los siguientes 8 bits después de los 16 bits y AL
debería devolver los últimos 8 bits.
Así que mi pregunta, porque realmente no creo que sea así, es cómo funciona. Si almacenamos un valor de 32 bits de siete ... también conocido como almacenamiento EAX
0000 0000 0000 0000 0000 0000 0000 0111
Así que si accedemos a AX
debería volver.
0000 0000 0000 0000
si leemos AH
debería volver
0000 0000
y cuando leemos AL
debería volver
0000 0111
¿Es esto correcto? ¿Y si es qué valor tiene realmente AH
?
El siguiente fragmento de código examina EAX utilizando 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 - Valor completo de 32 bits
- AX - menor valor de 16 bits
- AH - Bits de 8 a 15
- AL - 8 bits más bajos de EAX / AX
No - AL son los 8 bits menos significativos de AX. AX es los 16 bits menos significativos de EAX.
Tal vez sea más fácil de tratar si comenzamos con 04030201h en eax. En este caso, AX contendrá 0201h, AH contendrá 02h y AL contendrá 01h.
No, eso no es del todo correcto.
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)
Editar:
Para completar, además de lo anterior, que se basó en una CPU de 32 bits, las CPU Intel / AMD de 64 bits tienen
RAX, which hold a 64-bit value, and where EAX is mapped to the lower 32 bits.
no, tu respuesta es incorrecta
La selección de Al y Ah es de AX no de EAX
p.ej
EAX=0000 0000 0000 0000 0000 0000 0000 0111
Así que si llamamos a AX debería volver.
0000 0000 0000 0111
Si llamamos a AH debería volver.
0000 0000
y cuando llamamos a AL debería volver
0000 0111
Ejemplo número 2
EAX: 22 33 55 77
AX: 55 77
AH: 55
AL: 77
ejemplo 3
EAX: 1111 0000 0000 0000 0000 0000 0000 0111
AX= 0000 0000 0000 0111
AH= 0000 0000
AL= 0000 0111
| 0000 0001 0010 0011 0100 0101 0110 0111 | ------> EAX
| 0100 0101 0110 0111 | ------> AX
| 0110 0111 | ------> AL
| 0100 0101 | ------> AH