not modes language instruction inc asm assembly x86 cpu-registers

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

  1. EAX - Valor completo de 32 bits
  2. AX - menor valor de 16 bits
  3. AH - Bits de 8 a 15
  4. 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