web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas un registre contenant les octets supérieurs d'EAX?

%AX = (%AH + %AL)

Alors pourquoi pas %EAX = (%SOME_REGISTER + %AX) pour certains registres %SOME_REGISTER?

65
Sargun Dhillon

Juste pour quelques éclaircissements. Au début des microprocesseurs des années 1970, les CPU n'avaient qu'un petit nombre de registres et un jeu d'instructions très limité. En règle générale, l'unité arithmétique ne peut fonctionner que sur un seul registre CPU, souvent appelé "accumulateur". L'accumulateur des processeurs 8 bits 8080 et Z80 était appelé "A". Il y avait 6 autres registres à 8 bits à usage général: B, C, D, E, H & L. Ces six registres pouvaient être couplés pour former 3 registres à 16 bits: BC, DE & HL. En interne, l'accumulateur a été combiné avec le registre Flags pour former le registre AF 16 bits.

Quand Intel a développé la famille 1686 8086, ils voulaient pouvoir porter le code 8080, ils ont donc gardé la même structure de registre de base:

8080/Z80  8086
A         AX
BC        BX
DE        CX
HL        DX
IX        SI    
IY        DI

En raison de la nécessité de porter du code 8 bits, ils devaient pouvoir se référer aux différentes parties 8 bits d'AX, BX, CX & DX. Ceux-ci sont appelés AL, AH pour les octets bas et hauts d'AX et ainsi de suite pour BL/BH, CL/CH & DL/DH. IX & IY sur le Z80 n'étaient utilisés que comme registres de pointeurs 16 bits, il n'était donc pas nécessaire d'accéder aux deux moitiés de SI & DI.

Lorsque le 80386 est sorti au milieu des années 80, ils ont créé des versions "étendues" de tous les registres. Ainsi, AX est devenu EAX, BX est devenu EBX, etc. Il n'était pas nécessaire d'accéder aux 16 premiers bits de ces nouveaux registres étendus, ils n'ont donc pas créé de pseudo-registre EAXH.

AMD a appliqué la même astuce lors de la production des premiers processeurs 64 bits. La version 64 bits du registre AX est appelée RAX. Donc, maintenant vous avez quelque chose qui ressemble à ceci:

|63..32|31..16|15-8|7-0|
               |AH.|AL.|
               |AX.....|
       |EAX............|
|RAX...................|
131
Mike Thompson

Dans les anciens jours 8 bits, il y avait le registre A.

Dans les jours 16 bits, il y avait le registre AX 16 bits, qui était divisé en deux parties 8 bits, AH et AL, pour les moments où vous vouliez toujours travailler avec des valeurs 8 bits.

Dans les jours 32 bits, le registre EAX 32 bits a été introduit, mais les registres AX, AH et AL ont tous été conservés. Les concepteurs n'ont pas jugé nécessaire d'introduire un nouveau registre 16 bits qui traitait les bits 16 à 31 de EAX.

25
Greg Hewgill