Befehlssatz
Ein Rechner verfügt über einen bestimmten Befehlssatz, welcher sich in verschiedene
Befehlsarten unterteilt:
- arithmetische Befehle (Addition, Subtraktion, Multiplikation, Division)
- logische Befehle (Und - / Oder - Verknüfungen)
- Transportbefehle (Werte kopieren in Register oder Hauptspeicher, Ein- / Ausgabeoperationen, Speichern)
- Steuerbefehle (Sprungbefehle, Vergleichsbefehle, Testbefehle, Unterbrechungen / Interrupt)
Der am weitesten verbreitete Befehlssatz ist der IA-32 von der Firma Intel.
Der
Registersatz der IA-32 Architektur besteht aus folgenden Registern:
- EAX (AH, AL) AX
- EBX (BH, BL) BX
- ECX (CH, CL) CX
- EDX (DH, DL) DX
- ESI (SI)
- EDI (DI)
(alle Register sind universalregister)
weitere Register mit festgelegter Bedeutung:
- EFLAGS (CF, ZF, OF = Carry Flag, Zero Flag, Sign Flag, Overflow Flag)
- IP (Instruction Pointer / Befehlszähler - Register)
- CS, DS, SS, ES (...)
Adressierungsarten
- unmittelbare Adressierung
- (mov eax,17 ; schreibt die Dezimalzahl 17 in Register eax)
- Register-Adressierung
- (mov eax,ebx ; kopiere den Inhalt von Register ebx in Register eax)
- direkte Speicher-Adressierung
- (zeichen db '123abc',0 ; festlegen einer Zeichenkette)
- (mov al,[zeichen] ; schreibt das erste Byte, welches am Anfang von "zeichen" steht)
- indirekte Speicher-Adressierung
- (mov eax,[ebx] ; Speicheradresse des Operanden befindet sich im Register ebx)
- indizierte Adressierung
- (mov eax,vektor[si] ; Adresse des Operanden wird durch Addition des Inhalts eines Indexregisters zur angegebenen Basisadresse gewonnen)
- (mov eax,[ebx+esi] ; Adresse des Operanden wird durch Addition des Inhalts eines Indexregisters zum Inhalt eines Basisregisters gewonnen)
- implizite Adressierung
- (mul ebx ; Befehl "mul" nutzt festgelegte Register für Operanden, diese Register müssen nicht angegeben werden)
- relative Adressierung
- (jmp offset ; Diese Adressierungsart bezieht sich speziell auf Register das den nächsten auszuführenden Befehl steuert, den Befehlszähler / Instruction Pointer, offset + aktueller Befehlszähler ist nächster auszufürender Befehl)
- (jmp addr ; Es wird zur angegebenen Adresse gesprungen; addr ist Adresse des nächsten Befehl)
Aufbau eines Maschinenbefehls
Ein Maschinenbefehl besteht aus einem Operationscode und einem Operandenteil. Der Operationscode codiert die auszuführenden Operationen binär. Der Operandenteil enthält die zu bearbeitenden Operanden direkt oder in Form ihrer Adresse.