2017-02-24 4 views
1

"AH-DH"
Les registres AH, BH, CH et DH de bits élevés.
"AL-DL"
Les registres de bits bas AL, BL, CL et DL.Différence entre les registres de bits faible et élevé

Il est cité de AMD64 volume 1, aussi j'ai vu cela dans le manuel du programmeur Intels.
Je ne comprends pas clairement ce que cela signifie. Cela a-t-il quelque chose à voir avec l'ordre endian? Puisque les deux microprocesseurs AMD et Intel sont d'ordre little-endian.

Peut-il être expliqué comme:
AH: 0 0 0 0 0 0 1 0
est lu à partir du premier bit il retourne: 2 (en décimal)
Mais la même valeur dans
AL: 0 0 0 0 0 0 1 0
est lu à partir de l'extrémité et il retourne: 64 (en décimal)

+0

@dhke ouais vous avez raison édité. –

Répondre

3

AH est la plus grande moitié de AX, AL est le moins élevé de la moitié, et de même pour le B, C, et D enregistre. Parce que nous spécifions directement les bits de poids fort, ou les bits de poids faible, plutôt que de simplement demander ce qui vient en premier, l'endianisme ne joue pas vraiment.

  AX = 0x288 
________|________ 
/    \ 
0000 0010 1000 1000 
\_______/ \_______/ 
AH=0x2 AL=0x88 
+0

Je pense que c'était la réponse que je cherchais ... joli diagramme. –

2

La citation provient de (preface, page xxvii). Les registres remontent à to the 8086 et leur comportement est toujours le même qu'à l'époque.

Le contenu des registres de 16 bits AX, BX, DX, CX sont également accessibles à l'aide de sélecteurs de 8 bits. En particulier, si

AX = 0x1234 

puis

AH = 0x12 
AL = 0x34 

Par conséquent "haut" et les registres de bits "faible". La principale raison de l'existence de ces accesseurs est la réduction de la longueur des instructions. Si vous avez seulement besoin de stocker une valeur de 8 bits, avoir à encoder en 16 bits complet dans une instruction est inutile.

Pour les registres 32 bits et 64 bits, seules les parties inférieures sont accessibles par des noms de registre explicites.

Par exemple, AX est la partie inférieure de EAX et EAX est la partie inférieure (64 bits) RAX.