Como é que o AX, ah, Al mapeia o EAX?

O meu entendimento dos registos x86 diz que cada registo pode ser acedido por todo o código de 32 bits e é dividido em vários registos acessíveis.

Neste exemplo EAX sendo um registo de 32 bits, se chamarmos AX deve devolver os primeiros 16 bits, e se chamarmos AH ou {[7] } deve devolver os próximos 8 bits após os 16 bits e AL deve devolver os últimos 8 bits.

Então a minha pergunta, porque não acredito que seja assim que funciona. Se nós armazenar um valor de 32 bits de sete... também conhecido por EAX conservação

0000 0000 0000 0000 0000 0000 0000 0111
Por isso, se acedermos, deve voltar.
0000 0000 0000 0000

se lermos AH deve voltar

0000 0000
E quando lermos, deve voltar.
0000 0111
Isto está correcto? e se for qual o valor que AH realmente tem?

Author: Peter Cordes, 2013-03-04

5 answers

Não, isso não está certo.
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, além do acima, que foi baseado em uma CPU de 32 bits, 64 bits Intel / AMD CPUs têm

RAX, which hold a 64-bit value, and where EAX is mapped to the lower 32 bits.
 42
Author: 500 - Internal Server Error, 2017-04-07 22:21:44

O machado são os 16 bits inferiores do EAX. AH é os 8 bits altos de AX (ou seja, os bits 8-15 de EAX) e AL é o byte menos significativo (bits 0-7) de EAX, bem como AX.

Exemplo (algarismos hexadecimais):

EAX: 12 34 56 78
AX: 56 78
AH: 56
AL: 78
 24
Author: pascalhein, 2018-07-12 10:53:01
Não, o teu ans está errado.

A selecção de Al E Ah é de AX não de EAX

E. g

EAX=0000 0000 0000 0000 0000 0000 0000 0111
Por isso, se ligarmos ao AX, deve voltar.
0000 0000 0000 0111
Se chamarmos AH, deve voltar.
0000 0000
E quando chamarmos o AL, deve voltar.
0000 0111

Exemplo número 2

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

Exemplo 3

EAX: 1111 0000 0000 0000 0000 0000 0000 0111    
AX= 0000 0000 0000 0111
AH= 0000 0000
AL= 0000 0111  
 5
Author: Electronic Engineer, 2014-04-26 11:40:46

Não ... o AL é os 8 pedaços de Machado menos significativos. O AX é o 16 bits menos significativos de EAX.

Talvez seja mais fácil lidar com isso se começarmos com 04030201h em eax. Neste caso, o AX conterá 0201h, AH conterá 02h e AL conterá 01h.
 4
Author: Jerry Coffin, 2013-03-03 21:37:31

O excerto abaixo examina o EAX usando o 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 total de 32 bits
  2. AX-valor inferior de 16 bits
  3. Ah - Bits de 8 a 15
  4. AL - menor 8 bits de EAX / AX
 4
Author: scanjee, 2015-11-28 03:40:59