Ein Register ist eine Gruppe von Flipflops (1 Bit-Speicher) mit gemeinsamer Steuerung. Register umfassen meist 8, 16, 32 oder 64 Bit.
Die Bits der Register sind numeriert, vom LSB (LeastSignificantBit) zum MSB (MostSignificantBit).
1985 kommt Intels 8086-Prozessor auf den Markt, der ersten 16-Bit-Prozessor. (Das Hauptrechenregister hatte 16 Bit, daher die Einheit "Wort" s.o.)
Auf dem Weg zu den heutigen x86 Prozessoren wurde diese Architektur stets erweitert – bis auf heute 64 Bit.
Das folgende Bild zeigt die Register für die 32Bit Prozessoren:
Registernamen beginnen mit einem E für "extended", weil diese Register von 16 auf 32 Bit erweitert wurden.
Für diese acht Register gilt, dass jeweils die unteren 16 Bit unter dem Namen des früheren 16-Bit-Registers angesprochen werden können.
Damit haben die neueren Prozessoren stets alle Register ihrer Vorgänger, nutzen deren Fähigkeiten aber nicht aus.
Bei den vier Allzweckregistern EAX, EBX, ECX und EDX lassen sich die unteren 16 Bit als AX, BX, CX und DX ansprechen, und diese zusätzlich auch noch byteweise als AL und AH, BL und BH, CL und CH, DL und DH (L für „Low“, H für „High“).
Bei den aktuellen 64Bit Prozessoren gibt es die Register rax, rbx … die wiederum die eax, ebx Register „beinhalten“.
Das EFlag-Register unterscheidet sich von an den anderen Registern. Die Flipflops in diesen Registern werden einzeln gesteuert, jedes Flipflop hat eine bestimmte Bedeutung – es ist ein Flag (Flagge, Fähnchen).
Sprechweise:
Es gibt zwei Gruppen von Flags: Statusflags und Steuerflags.
Statusflags sind Flags, die der Prozessor nach arithmetischen oder bitweise logischen Operationen setzt, um etwas über das Resultat dieser Operation auszusagen.
Der Programmierer kann diese Flags dann in bedingten Sprungbefehlen abfragen und Programmverzweigungen vom Zustand der Flags abhängig machen.
Im Abschnitt .data werden Speicherbereiche mit Vorbelegung definiert, im Abschnitt .bss solche, die nicht initialisiert werden.
Bei der Deklaration muss angegeben werden, wie groß die Bereiche sein sollen.
.data | .bss | Size |
---|---|---|
db | resdb | 1 Byte |
dw | resdw | 2 Byte |
dd | resdd | 4 Byte |
dq | resdq | 8 Byte |
Beispiele:
Mit einer Anweisung können auch gleich mehrere Speicherplätze gleichen Typs, also Felder , definiert werden:
Das haben wir beim Hallo-Welt Programm gemacht.
In der .bss-Sektion sieht dass folgendermaßen aus:
antwort resb 5 ; 5 beschreibbare Bytes ohne spezielle Vorbelegung.
Filename | Filesize | Last modified |
---|---|---|
assembler03.odp | 336.2 KiB | 13.09.2021 17:55 |
assembler03.pdf | 287.4 KiB | 13.09.2021 17:55 |
auswahl_400.png | 23.6 KiB | 13.09.2021 16:26 |
auswahl_401.png | 98.0 KiB | 13.09.2021 16:29 |