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?

20
demandé sur Peter Cordes 2013-03-04 01:33:38

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.
42
répondu 500 - Internal Server Error 2017-04-07 22:21:44

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
24
répondu pascalhein 2018-07-12 10:53:01

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  
5
répondu Electronic Engineer 2014-04-26 11:40:46

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.

4
répondu Jerry Coffin 2013-03-03 21:37:31

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
  1. EAX - Pleine valeur 32 bits
  2. AX - bas 16 bits valeur
  3. Ah - Bits de 8 à 15
  4. AL - bas 8 bits de EAX/AX
4
répondu scanjee 2015-11-28 03:40:59