Zum Inhalt springen

Maschinensprache i8086/ Befehlsliste

Aus Wikibooks

Theorie:  EinleitungMaschinenspracheAssemblerZahlensystemeRAM-AdressenBWSDebugCPU-RegisterEinfache BefehleStringbefehleInterruptsI/O-Ports
Versuch:  BWS1BWS2Hallo WeltBootsektorMBR
Nützlich: BefehlslistePAUSEFilter
Analyse:  Bootloader


Befehlsliste i8086
Code Bezeichnung Flags Beschreibung
AAA ASCII adjust for addition AC  
AAD ASCII adjust for division PSZ
AAM ASCII adjust for multiply PSZ
AAS ASCII adjust for subtraktion AC
ADC Add with carry ACOPSZ Addiere zwei Operanden und CY
ADD Addition ACOPSZ Addition ohne Übertrag
AND And: logical conjunction COPSZ Logische Operation "UND"
CALL     Unterprogramm aufrufen
CBW Convert byte to word   AH wird mit Bit 7 von AL gefüllt. Code 98H - 10011000
CLC Clear carry flag C Lösche CF. Code F8H = 11111000
CLD Clear direction flag   Lösche DF. Code FCH = 11111100
CLI Clear interrupt enable flag   Sperrt maskierbare Interrupts. Code FAH = 11111010
CMC Complement carry flag C Komplementiere CF. Code F5H = 11110101
CMP Compare two operands ACOPSZ Logischer Vergleich: Die Operanden werden subtrahiert, die Flags gesetzt, das Ergebnis verworfen.
CMPSB Compare byte string ACOPSZ Das durch ES:[DI] adressierte Byte wird vom Operanden DS:[SI] subtrahiert, Flags gesetzt, das Ergebnis verworfen. SI und DI werden geändert: +1, wenn (DF)=0, sonst -1. Code 1010011w
CMPSW Compare word string ACOPSZ Das durch ES:[DI] adressierte Wort wird vom Operanden DS:[SI] subtrahiert, Flags gesetzt, das Ergebnis verworfen. SI und DI werden geändert: +2, wenn (DF)=0, sonst -2. Code 1010011w
CWD Convert word to doubleword   Vorzeichengerechte Erweiterung: DX wird mit Bit 15 von AX gefüllt. Code 99H = 10011001
DAA Decimal adjust for addition ACPSZ Korrigiere AL nach BCD-Addition
DAS Decimal adjust for subtraction ACPSZ Korrigiere AL nach BCD-Subtraktion
DEC Decrement destination by 1 AOPSZ Operand wird um 1 verringert. Operand ist Register oder Speicher, Byte oder Wort.
DIV     Vorzeichenlose Division
ESC Speicherzugriff für Coprozessoren
HLT Die CPU hält an bis Reset oder einem erlaubten externen Interrupt. Code: F4H = 11110100
IDIV Integer division, signed ACOPSF Vorzeichengerechte Integer-Division
IMUL Integer multiply accumulator by register-or-memory; signed CO Integer-Multiplikation mit Vorzeichen
IN Input byte / word   Überträgt Byte/Wort vom Eingabeport (Adr. im DX oder als Direktoperand < 255) nach AL/AX.
INC Increment destination by 1 AOPSZ Operand wird um 1 vergrößert.
INT Interrupt   Software-Interrupt: Indirekter FAR-Sprung über Interruptvektor 0 ... 255 mit Speichern der Rückkehradresse.
INTO Interrupt if overflow   Wenn OF wird INT 4 ausgeführt.
IRET Interrupt return   Rücksprung aus INT- bzw. INTO- Routine.
JA Jump if above   Sprung wenn Ergebnis größer ist
JAE Jump if above or equal   Sprung wenn größer oder gleich
JB Jump if below   Sprung wenn Ergebnis kleiner ist
JBE Jump if below or equal   Sprung wenn Ergebnis kleiner/gleich
JC Jump if Carry   Sprung wenn CF gesetzt ist
JCXZ Jump if CX = 0   Sprung wenn Register CX = 0 ist
JE Jump if equal   Sprung wenn log. Ergebnis gleich ist
JG     Sprung wenn Ergebnis einer log. Operation arithmetisch größer ist
JGE     Sprung wenn Ergebnis arithmetisch größer oder gleich ist
JL     Sprung wenn Ergebnis einer log. Operation arithmetisch kleiner ist
JMP Jump   Springe zu angegebener Adresse
JNA Jump if not above   Sprung wenn Ergebnis nicht größer ist
JNAE Jump if not above or equal   Sprung wenn nicht größer oder gleich
JNB Jump if not below   Sprung wenn Ergebnis nicht kleiner ist
JNBE Jump if not below or equal   Sprung wenn Ergebnis nicht kleiner/gleich
JNC Jump if not Carry   Sprung wenn CF gelöscht ist
JNE Jump if not equal   Sprung wenn log. Ergebnis nicht gleich ist
JNG Jump if not greater   Sprung wenn Ergebnis einer log. Operation nicht arith. größer ist
JNGE Jump if not greater or equal   Sprung wenn Ergebnis nicht arithmetisch größer oder gleich ist
JNL     Sprung wenn Ergebnis einer log. Operation nicht arith. klein ist
JNLE     Sprung wenn Ergebnis einer log. Op. nicht arith. kleiner oder gleich ist
JNO     Sprung, wenn Flag OF nicht gesetzt ist
JNP     Sprung bei ungerader Parität (Flag PF gelöscht)
JNS Jump if not signed   Sprung wenn Ergebnis einer log. Operation positiv ist
JNZ Jump if non zero   Sprung, wenn log. Ergebnis ungleich ist.
JO     Sprung, wenn Flag OF gesetzt ist
JP     Sprung bei gerader Parität (Flag PF gesetzt)
JPO     Sprung bei ungerader Parität (Flag PF gelöscht)
JS Jump if signed   Sprung wenn Ergebnis einer log. Operation negativ ist
JZ Jump if zero   Sprung, wenn log. Ergebnis gleich ist.
LAHF Load AH from flags SZAPC Bits von AH werden mit Flags gefüllt: Bit 7->S, 6->Z, 4->A, 2->P, 0->C. Code: 9FH = 10011111
LDS Load data segment register)   Von einem DWORT (Pointer, Vektor) wird LOW in ein 16 Bit Register (außer SS-Reg) und HIGH ins DS- Register geladen
LEA Load effective adress   Die Offset- Adr. eines Speicheroperanden wird in ein Register geladen. Nur verwenden, wenn die EA zur Laufzeit berechnet werden muss, sonst MOV ..., OFFSET ... verwenden!
LES Load extra-segment register   Lade Physikalische Adr. nach ES:
LOCK     Sperre den Bus
LODSB Load byte string   Überträgt Byte DS:[SI] nach AL. SI + bzw. - um 1 je nach DF. Code 10101l0w
LODSW Load word string   Überträgt Word DS:[SI] nach AX. SI + bzw. - um 2 je nach DF. Code 10101l0w
LOOP Iterate instruktion sequence
until count complete
  Das Count Register (CX) wird um 1 dekrementiert. Wenn CX #0, wird relativ gesprungen: IF (CX) #0 THEN (IP) := (IP) + disp(sign-extended to 16 bits. Code 11100010
LOOPZ Loop on zero   identisch mit LOOPE
LOOPE Loop on equal   CX := CX-1 . Solange CX #0 und wenn ZF =1 : Relativer Sprung. Code 11100001 disp
LOOPNZ Loop on non zero   identisch mit LOOPNE
LOOPNE Loop on not equal   CX := CX-1 . Solange CX #0 und wenn kein ZF: Relativer Sprung. Code 11100000 disp
MOV MOVE   Lade Wert
MOVSB Move byte string   Speichert DS:[SI] nach ES:[DI], dann SI und DI + bzw. - um 1. Ist eine Kombination der Befehle LODSB und STOSB. Code 10100l0w
MOVSW Move word string   Speichert DS:[SI] nach ES:[DI], dann SI und DI + bzw. - um 2. Ist eine Kombination der Befehle LODSW und STOSW. Code 10100l0w
MUL Multiply accumulator by register-or-memory; unsigned CO AL bzw. AX werden mit dem Operanden multipliziert. Obere Hälfte des Resultats in AH bzw. DX. Wenn High #0 ist, werden CF und OF gesetzt. Code 111101lw
NEG Form 2's complement   Negation (Zweier-Komplement)
NOP No operation   Code 90H = 10010000
NOT Form 1's complement   invertiert Operand und speichert zurück.
OR Or, inclusive COPSZ Zwei Operanden werden bitweise verknüpft, CF und OF gelöscht.
OUT Output byte / word   siehe IN
POP Pop word off stack into destination   Holt Wort aus Stack, speichert es nach Register oder Memory und erhöht SP um zwei.
POPF Pop flags off stack Alle Hole Wort vom Stack ins Statusregister, Siehe PUSHF. Code 9DH = 10011101
PUSH Push word onto stack   Wort in Stack speichern. Verringert SP um 2 und speichert Register bzw. Memory-Wort.
PUSHF Push flags onto stack)   Rettet Flags in den Stack (siehe POPF) und verringert SP um 2.
RCL Rotate left through carry CO Rotiere links durch das CF Flag
RCR Rotate right through carry CO Rotiere rechts durch das Flag CF
REP Repeat string operation   FLAGS: Siehe konkrete String-Operation. Die nachfolgende primitive String- Operation (MOVS, SCAS, CMPS) wird wiederholt, wenn (CX) # 0 ist. CX wird um 1 verringert.
REPZ     identisch mit REPE
REPE Repeat string operation   FLAGS: Siehe konkrete String-Operation. Die nachfolgende primitive String- Operation (MOVS, SCAS, CMPS) wird wiederholt, wenn (CX) # 0 ist. CX wird um 1 verringert. Der Zyklus wird auch abgebrochen, wenn die Bedingung nicht erfüllt ist.
REPNE     identisch mit REPNZ
REPNZ Repeat string operation   FLAGS: Siehe konkrete String-Operation. Die nachfolgende primitive String- Operation (MOVS, SCAS, CMPS) wird wiederholt, wenn (CX) # 0 ist. CX wird um 1 verringert. Der Zyklus wird auch abgebrochen, wenn die Bedingung nicht erfüllt ist.
RET Return from procedure   Lädt IP und evt. noch CS aus dem Stack und erhöht SP um 2 bzw. 4 (je nachdem ob Inter-Segment- bzw. Intra-Segment-Rücksprung. Wenn Konstant-Operand angegeben ist, wird er zum Stack addiert.
ROL Rotate left CO Rotiere nach links. Verschiebeanzahl im CL oder =1 ist möglich. Wenn Verschiebung nur einmalig, wird OF gesetzt, falls vor Verschiebung die 2 obersten Bits ungleich waren.
ROR Rotate right CO Rotiere nach rechts. Siehe ROL
SAHF Store AH to flags   Flags werden mit den Bits von AH geladen:
Bit  7  6  5  4  3  2  1  0
Flag SF ZF xx AF xx PF xx CF
(xx = undefin. Wert). Code: 9EH = 10011110
SAL=
SHL
Shift arithmetic left and shift logical left COPSZ In untere Bits werden Nullen eingeschoben. Das oberste Bit wird nach CF geschoben. Verschiebeanzahl im CL oder =1. Wenn Verschiebung einmalig, wird OF gesetzt, falls vor Verschiebung die 2 obersten Bits ungleich waren.
SAR Shift arithmetic right COPSZ Das oberste Bit wird gleich nach dem alten obersten Bit eingeschoben. Das unterste Bit wird nach CF geschoben. Verschiebeanzahl im CL oder =1. Wenn Verschiebeanzahl=1, wird OF gesetzt, falls vor Verschiebung die beiden obersten Bits ungleich waren.
SBB Subtrakt with borrow ACOPSZ Vorzeichenlose Subtraktion inclusive CF
SCASB Scan byte string ACOPSZ Das Byte ES[DI] wird mit AL verglichen. Dann wird DI um 1 erhöht (wenn DF=0) bzw. erniedrigt.
SCASW Scan word string ACOPSZ Das Wort ES[DI] wird mit AX verglichen. Dann wird DI um 2 erhöht (wenn DF=0) bzw. erniedrigt.
SHL Shift logical left   siehe bei SAL
SHR Shift logical right COPSZ Schiebe nach rechts. In obere Bits werden Nullen eingeschoben. Das unterste Bit wird nach CF geschoben. Verschiebeanzahl im CL oder =1. Wenn Verschiebeanzahl =1, wird OF gesetzt, falls vor Verschiebung die beiden obersten Bits ungleich waren.
STC Set carry flag C Setze das Carry Flag. Code: F9H = 11111001
STD Set direction flag D Setze das Zählrichtungs-Flag DF. Code: FDH = 11111101
STI Set interrupt enable flag   Erlaubt maskierbare externe Interrupts nach Ausführung des nächsten Befehls. Code: FBH = 11111011
STOSB Store byte string   AL wird nach ES:[DI] gespeichert. DI wird um 1 erhöht, wenn DF =0 ist, sonst dekrementiert. Code: 101010lw
STOSW Store word string   AX wird nach ES:[DI] gespeichert. DI wird um 2 erhöht, wenn DF =0 ist, sonst dekrementiert. Code: 101010lw
SUB Subtrakt ACOPSZ Vorzeichenlose Subtraktion
TEST Test, or logical compare COPSZ Operanden werden verglichen (AND). CF und OF werden gelöscht.
WAIT     Warten, bis der BUSY-Eingang nicht aktiv ist
XCHG Exchange   Byte oder Wort wird zwischen Registern oder Reg. und Speicher ausgetauscht. Für Sreg nicht anwendbar.
XLAT Translate   Übersetzen: AL := <DS:BX+AL> Lädt ein Byte aus einer Tabelle (im DS) nach AL. Das AL- Reg. wird als Index einer durch das BX- Register adressierten Tabelle verwendet. Der so adressierte Operand wird nach AL geladen. Code: D7H = 11010111. z.B. MOV BX, OFFSET TAB_NAME,   XLAT BYTE PTR [BX]
XOR Exclusive or COPSZ Operanden werden verglichen und Bits gesetzt, wo ungleich. CF und OF werden gelöscht.

Beachte auch Assembler-Programmierung für x86-Prozessoren/ Befehlsreferenz, wo einige Befehle sehr detailliert beschrieben sind.


Theorie:  EinleitungMaschinenspracheAssemblerZahlensystemeRAM-AdressenBWSDebugCPU-RegisterEinfache BefehleStringbefehleInterruptsI/O-Ports
Versuch:  BWS1BWS2Hallo WeltBootsektorMBR
Nützlich: BefehlslistePAUSEFilter
Analyse:  Bootloader