Register der IA-32 Architektur?

3 Antworten

Du mußt verstehen, daß bei x86 nach und nach immer mehr drangeklöppelt wurde.

AX, BX, CX und DX sind Accumulator, Counter, Base, Data in 16-Bit, dabei werden die Registerhälften mit H(igh) und L(ow) bezeichnet, wodurch sich AH, AL, BH ... usw ergeben.

Mit 32-Bit wurde den Registernamen ein E(xtended) vorangestellt.

https://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture

Ich glaube die Darstellung hier (Tabelle) macht das ganz gut verständlich, kannst auch den Rest lesen.

Diese drangeflicke schlägt sich auch anderweitig nieder:

https://c9x.me/x86/html/file_module_x86_id_5.html

Beachte die diversen Opcodes, insbesondere siehst Du hier noch, daß AX der Akkumulator war.

Der Prozessor ist ja offensichtlich ein 386er (oder Nachfolger).

Ob EAX (32 Bit) oder AX (16 Bit) verwendet wird, ist eine Eigenschaft des Code-Segments. Wenn dort 32 Bit steht, gilt EAX, wenn dort 16 Bit steht, gilt AX. Es gibt im Opcode traditionell nur 1 Bit, was zwischen 8 Bit und 16/32 Bit umschaltet.

Es ist natürlich doof, wenn man mit einem Bit aus drei Möglichkeiten auswählen will. Deshalb gilt die Regel: Entweder 8 Bit oder 16/32 Bit. Ob 16 oder 32 Bit, entscheidet das Code-Segment. Wenn man es anders haben möchte, stellt man dem Opcode ein Präfix-Byte voran: "Ich will jetzt die dritte Möglichkeit." Die Präfix-Bytes sind übrigens identisch. Im 32-Bit-Mode schaltet es auf 16 Bit, im 16-Bit-Mode schaltet es auf 32 Bit.


RedDevil1982 
Fragesteller
 18.04.2023, 21:52

Ok und wie ist es jetzt wenn ich im 8-Bit Fall bin. Dort habe ich z. B. die zwei Register AH und AL zu je 8-Bit.

=> Kann ich jetzt hier 2 Zahlen speichern, jeweils eine Zahl in AH und eine in AL

oder kann ich wieder nur 1 Zahl speichern die dann in AH und AL aufgeteilt wird?

0
tunik123  18.04.2023, 21:56
@RedDevil1982

Ja. Soweit ich weiß, kann man AL und AH wie zwei getrennte 8-Bit-Register benutzen.

(Es besteht ein Restrisiko, dass ich mich irre.)

0
RedDevil1982 
Fragesteller
 18.04.2023, 22:06
@tunik123

Ich denke du kennst dich gut aus. Ich vertraue auf dein Kenntnisse!

0

Du hast grundsätzlich nur die 32-Bit-Register, z. B. EAX. Aber bei jedem Befehl, der mit Registern arbeitet, kannst Du auch nur ein Teilregister (AX, AH, AL) angeben. Der Rest des ganzen Registers wird dann einfach ignoriert:

LD EAX, 112233FFh
LD AH, 55h  ; 33h wird überschrieben
INC AL      ; FFh wird (ohne Übertrag) erhöht

Jetzt ist EAX = 11225500h