Unvollständig in der Befehlsbeschreibung sind die mit späteren Prozessoren neu hinzugekommene Befehlserweiterungen und Befehle.Zu den Beschreibungen der Flags:Das betreffende Feld ist bei den Befehlsbeschreibungen leer, wenn das betreffende Flagbit durch den Befehl nicht verändert wird. Die sonstigen Zeichen haben die folgende Bedeutung:Nach Ausführung des Befehls ist das Flagbit
Zu den Abkürzungen:imm = Direktwertimm8 = Byte-Direktwert imm16 = Wort-Direktwert imm32 = Doppelwort-Direktwert m = Speichervariable (memory) m8 = Bytevariable m16 = Wortvariable m32 = Doppelwortvariable r = Register r8 = Byteregister (AL, Ah, ...) r16 = Wortregister (AX, BX, ...) r32 = Doppelwortregister (EAX, EBX, ...) segr = Segmentregister 80286 im Protected Mode:I/O PL I/O Privilege Level Maximale Zugriffsrechte für E/A OperationenNT Nested Task Kennzeichen für verschachtelte Tasks AAA ASCII (bzw. BCD-ungepackt)- Korrektur nach einer Additionwandelt den Inhalt im Al-Register in eine ungepackte BCD-Zahl. Das Ergebnis steht in AH und AL.AAA überprüft das niederwertige Halbbyte von AL darauf, ob es eine gültige Dezimalziffer darstellt. Ist dies der Fall werden die Flags AF und CF zurückgesetzt. Enthält das Halbbyte einen Wert größer als 9 oder steht AF auf 1, muss die Zahl justiert werden. Dazu wird auf das AL-Register 6 addiert, das AH-Register erhöht und es wird CF gesetzt, um den Überlauf anzuzeigen. Nach Ausführung des AAA-Befehls enthält das höherwertige Halbbyte von AL immer Nullen. Vorgehensweise des Befehls:
AAD ASCII (bzw. BCD-ungepackt)- Justierung vor einer Divisionwandelt eine ungepackte zweistellige BCD-Zahl in einen Binärwert um. Dazu wird die Zehnerstelle der BCD-Zahl in AH und die Einerstelle in AL übergeben. AAD multipliziert AH mit 10, addiert AH auf AL und löscht abschließend AH. Vorgehensweise des Befehls:
AAM ASCII (bzw. BCD-ungepackt)- Korrektur nach einer Multiplikationwandelt das Ergebnis einer Multiplikation in zwei gültige ungepackte BCD-Zahlen. AAM geht davon aus, dass sich das Produkt aus der Multiplikation in AL befindet. Nach der Ausführung des AAM-Befehls enthalten die höherwertigen Halbbytes von AL und AH Nullen. In AH steht die Zehnerstelle, in AL steht die Einerstelle. Die Halbbytes von AH und AL enthalten Werte im Bereich 0 bis 9 einschließlich. Vorgehensweise des Befehls:
AAS ASCII (bzw. BCD-ungepackt)- Korrektur nach einer Subtraktionwandelt des Inhalt des AL-Registers in eine ungepackte Dezimalzahl.AAS justiert das Ergebnis einer dezimalen Subtraktion, wobei sich das Ergebnis der Subtraktion im AL-Register befinden muss. Dazu untersucht AAS das niederwertige Halbbyte von AL. Wenn es eine gültige BCD-Zahl darstellt, werden die Flags AF und CF zurückgesetzt. Enthalten die niederwertigen Bits jedoch einen Wert größer als 9 oder steht AF auf 1, muss die Zahl justiert werden. In diesem Fall wird das AH-Register um 1 erniedrigt und CF sowie AF gesetzt, um den Überlauf anzuzeigen. Nach Ausführung des AAS-Befehls enthält das höherwertige Halbbyte von AL immer Nullen. Vorgehensweise des Befehls:
ADC ziel,quelle Addition mit Carryaddiert den Quelloperanden zum Zieloperanden und legt das Ergebnis im Zieloperanden ab. Das Carry wird mitaddiert.ADD ziel,quelle Addition ohne Carryaddiert den Quelloperanden zum Zieloperanden und legt das Ergebnis im Zieloperanden ab. Das Carry wird - im Gegensatz zu ADC - nie mitaddiert.
AND ziel,quelle Undverknüpfungverknüpft den Quelloperanden zum Zieloperanden bitweise mit logisch UND und legt das Ergebnis im Zieloperanden ab.
BT quelle, bitposition Bit abfragen / Bit Test (ab 80386)Überträgt das auf der Bitposition (0 bis 15 bzw. 31) stehende Bit der Quelle ins Carryflag.
CALL zieladresse UnterprogrammaufrufAufruf eines Unterprogramms, Die Rückkehradresse wird auf dem Stack gespeichert, so dass eine Rückkehr mit dem Befehl RET möglich ist.
CBW Convert Byte to WordErweitert das AL-Register vorzeichengerecht auf 16 Bit. Vorzeichengerecht bedeutet, dass Bit 7 des AL-Registers in alle Bitpositionen von AH geschrieben wird.
CLC Clear Carry FlagSetzt das Carry Flag auf 0.
CLD Clear Direction FlagSetzt das Richtungsflag auf 0. Dadurch werden Stringoperationen in Richtung nach größeren Adressen ablaufen.
CLI Clear Interrupt FlagSetzt das Unterbrechungsflag 0. Die CPU bearbeitet dadurch keine sperrbaren Interrupts mehr.
CMC Complement Carry FlagWechselt den Zustand des Carry-Flags.
CMP ziel,quelle CompareVergleicht Quelloperanden mit dem Zieloperanden. Das Vergleichsergebnis Ziel minus Quelle wird in den Flags gemeldet.
CMPS ziel,quelle Compare Strings vergleicht einen Zielstring (adressiert durch ES:DI bzw. ES:EDI, bei CMPSD ES:EDI) mit einem Quellstring (adressiert durch DS:SI bzw. DS:ESI, bei CMPSD durch DS:ESI). Das Vergleichsergebnis entsteht aus Ziel minus Quelle. Um mehr als 1 Wort oder als 1 Byte zu vergleichen, muss dem CMPS-Befehl ein REPE,REPZ,
REPNE oder REPNZ vorangehen und die Anzahl maximal auszuführender Vergleiche muss in CX bzw. ECX mitgegeben worden sein.
|
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
m,m | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± | ± |
Operanden | Flags |
---|---|
keine | unverändert Bei Bedarf bitte nachprüfen! |
Operanden | Flags |
---|---|
keine | unverändert |
DAA Dezimalkorrektur von AL nach AdditionWandelt nach einer Addition den Inhalt des AL- Registers in eine zweistellige gepackte BCD-Zahl in AL.Funktion ähnlich wie AAA, allerdings für 2 Ziffern. Eine interessante Anwendung gibt es bei der Hexadezimalwandlung beider Halbbytes eines Bytes zur ASCII-Ausgabe. Vergleiche dazu in der Routinensammlung für COM bei der Sprungmarke „hex_out:”.
DAS Dezimalkorrektur von AL nach SubtraktionWandelt nach einer Subtraktion den Inhalt des AL- Registers in eine zweistellige gepackte BCD-Zahl in AL.Funktion ähnlich wie AAS, allerdings für 2 Ziffern.
DEC DecrementReduziert den Zieloperanden um 1. Das Carrybit wird nicht beeinflusst. DEC kann nicht auf Segmentregister angewendet werden.
DIV quelle Vorzeichenlose DivisionDividiert den Inhalt von DX:AX (oder nur von AX) durch den Quelloperanden. Ist der Quelloperand ein Wort, wird eine 32-Bit-Zahl durch eine 16-Bit-Zahl dividiert. Das ganzzahlige Ergebnis steht in AX, der Rest in DX.Ist der Quelloperand ein Byte, wird eine 16-Bit-Zahl durch eine 8-Bit-Zahl dividiert. Das ganzzahlige Ergebnis steht in AL, der Rest in AH. Ab 80386: Ist der Quelloperand ein Doppelwort, wird der Inhalt von EDX:EAX durch das Doppelwort dividiert. Das ganzzahlige Ergebnis steht in EAX, der Rest in EDX. Alle Ergebnisse sind ohne Vorzeichen. Entsteht ein Überlauf beim Ergebnis oder wird durch 0 geteilt, so wird ein Interrupt 0 ausgeführt. In diesem Fall sind Ergebnis und Rest undefiniert.
ESC external_opcode,source Escapebewirkt, dass ein Befehl durch die CPU gelesen und auf dem Bus platziert wird. Der Befehl 'external_opcode' wird nicht durch die CPU verarbeitet, sondern z.B. durch einen Coprozessor.
HLT Halte die CPU andie CPU wird in den Wartezustand versetzt. Weiter geht es durch eine externe Unterbrechung oder CPU-Reset.
IDIV quelle Vorzeichenbehaftete DivisionDividiert den Inhalt von DX:AX (oder nur von AX) unter Berücksichtigung des Vorzeichens durch den Quelloperanden. Ist der Quelloperand ein Wort, wird eine 32-Bit-Zahl durch eine 16-Bit-Zahl dividiert. Das ganzzahlige Ergebnis steht in AX, der Rest in DX.Ist der Quelloperand ein Byte, wird eine 16-Bit-Zahl durch eine 8-Bit-Zahl dividiert. Das ganzzahlige Ergebnis steht in AL, der Rest in AH. Ab 80386: Ist der Quelloperand ein Doppelwort, wird der Inhalt von EDX:EAX durch das Doppelwort dividiert. Das ganzzahlige Ergebnis steht in EAX, der Rest in EDX. Entsteht ein Überlauf (Der zugelassene Wertebereich ist -128 ... +127 bzw. -32768..+32767 bzw. -2147483648..+2147483647) beim Ergebnis oder wird durch 0 geteilt, wird ein Interrupt 0 ausgeführt. In diesem Fall sind Ergebnis und Rest undefiniert.
IMUL quelle Vorzeichenbehaftete Multiplikation Quelle und - falls angegeben - Ziel müssen gleich große Register sein.
|
Operanden | Flags | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
r/m | r16,imm | r16,r16/m16 | r32,imm (ab 80386) | r32,r32/m32 (ab 80386) | r16,r16/m16,imm | r32,r32/m32,imm (ab 80386) | O | D | I | T | S | Z | A | P | C |
± | ? | ? | ? | ? | ± |
Operanden | Flags | |||
---|---|---|---|---|
AL oder AX,imm8 | EAX,imm8 (ab 80386) | AL oder AX,DX | EAX,DX (ab 80386) | unverändert |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
r/m | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± |
Bei Aufruf passiert folgendes:
INT 3 (breakpoint Interrupt) erzeugt einen anderen Maschinencode als die übrigen Interrupts.
Operanden | Flags |
---|---|
imm8 | unverändertw |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
0 | 0 |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± | ± | ± | ± | ± |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
8 Bit Displacement | O | D | I | T | S | Z | A | P | C |
0 |
Operanden | Flags | |||||
---|---|---|---|---|---|---|
SHORT Sprung | NEAR Sprung | FAR Sprung | m16-Adresse | r16 | m32-Adresse | unverändert |
LAHF Lade Flagregister in AHDie untere Hälfte des Flagregisters (Process Status Word PSW) wird nach AH kopiert.
LDS ziel, quelle Load Data Segment RegisterLDS lädt ein 32 Bit Doppelwort (adressiert mit Quelle) und lädt die oberen 16 Bits in das als Ziel spezifizierte Register (allgemeines, Zeiger- oder Indexregister), die unteren 16 Bits nach DS.LDS wird häufig verwendet, um Segment- und Offsetadresse gleichzeitig zu laden, z.B. vor Stringoperationen mit der Angabe SI als Zielregister.
LEA zielregister, quelle Load Effective AddressLEA lädt die Offsetadresse der Quelle in das als Ziel spezifizierte Register (allgemeines, Zeiger- oder Indexregister). Im Gegensatz zu MOV darf bei LEA der Quelloperand über das SI-Register indiziert werden. Beispiel:MOV BX,offset tabelle [si] ist ungültig LEA BX,tabelle [si] ist gültig
LES zielregister, quelle Load Pointer to ES and RegisterLES lädt ein 32 bit Doppelwort (adressiert mit Quelle) und lädt die oberen 16 Bits in das als Ziel spezifizierte Register (allgemeines, Zeiger- oder Indexregister), die unteren 16 Bits nach ES.LES wird häufig verwendet, Segment- und Offsetadresse gleichzeitig zu laden, z.B. vor Stringoperationen mit der Angabe ES als Zielregister.
LFS zielregister, quelle Load Pointer to FS and Register (ab 80386)Wie LES, aber bezogen auf das Segmentregister FS.LGS zielregister, quelle Load Pointer to GS and Register (ab 80386)Wie LES, aber bezogen auf das Segmentregister GS.LOCK Bus sperrenDer Präfixbefehl LOCK bewirkt die Sperre des Busses, die solange anhält, bis der nachfolgende Befehl abgearbeitet ist. Der Befehl erfordert Hardwareunterstützung (Leitung LOCK der CPU). Sinnvolles Beispiel kann ein LOCK-Präfix vor einem XCHG-Befehl sein, der auf eine Speicherstelle zugreift, die auch den Coprozessor interessiert.
LODS quelle Load Byte of Word String
Lädt ein Element eines Strings, das durch DS:SI bzw. DS:ESI adressiert wird, in das AL-, AX- bzw. EAX-Register. Danach wird SI bzw. ESI in Abhängigkeit vom Richtungsflag um 1 (wenn Byteoperanden), 2 (wenn Wortoperanden) oder 4 (wenn Doppelwortoperanden) angepasst:
|
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
quellstring | O | D | I | T | S | Z | A | P | C |
Wiederholung durch REPE, REPNE | ± | ± | ± | ± | ± | ± |
CC und weitere Funktionale Beschreibung: siehe Ablaufsteuerung
LOOP-Befehl und Operand | Flags |
---|---|
LOOP displ8 | unverändert |
LOOPcc displ8 |
Operanden | Hinweise |
---|---|
m/r,r |
|
r,m/r | |
m/r,imm | |
segr,r/m | |
r/m,segr | |
Flags bleiben unverändert |
Anstelle von MOVS kann MOVSB (byteweise), MOVW (wortweise) oder ab dem 80386 MOVSD (doppelwortweise) eingesetzt werden. MOVSB, MOVSW und MOVSD benötigen keine Operanden.
Die Arbeitsrichtung wird durch das Richtungsflag bestimmt. SI bzw. ESI und DI bzw. EDI werden entsprechend um 1 (wenn Byteoperanden), 2 (wenn Wortoperanden) oder 4 (wenn Doppelwortoperanden) angepasst:
DF=0 -> SI, DI erhöht um 1, 2 oder 4
DF=1 -> SI, DI erniedrigt um 1, 2 oder 4
Nur bei Verwendung des Befehls MOVS benötigt der Assembler mindestens einen Operanden, um den Stringtyp zuordnen zu können. Davon abgesehen, sind die Operanden nach MOVS ohne Auswirkungen. Beispiel für die Kopie nur eines Elementes:
lea si,quellstring
lea di, es:zielstring
movs quellstring,zielstring
Flags werden auch bei Anwendung eines Wiederholpräfixes (z.B. REPE oder REPNE) nicht verändert.
Operanden | Flags | |
---|---|---|
r16,r8/m8 | r32,r8/m8 | unverändert |
Operanden | Flags | |
---|---|---|
r16,r8/m8 | r32,r8/m8 | unverändert |
Falls das höherwertige Byte, Wort oder Doppelwort des Ergebnisses 0 ist, werden Carryflag und das Überlaufflag (CF und OF) auf 0 gesetzt. Andernfalls erhalten sie eine 1.
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
m/r | O | D | I | T | S | Z | A | P | C |
± | U | U | U | U | ± |
Operanden | Flags | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
r8/r16 | m8/m16 | r32/m32 | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± | ± |
Operanden | Flags |
---|---|
keine | unverändert |
Operanden | Flags | |
---|---|---|
r | m | unverändert |
Operanden | Flags | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
m/r,r | r,m | AX/AL,imm | m/r,imm | O | D | I | T | S | Z | A | P | C |
0 | ± | ± | U | ± | 0 |
Operanden | Flags | |||
---|---|---|---|---|
imm8,AL oder AX | imm8,EAX | DX,AL oder AX | DX,EAX (ab 80386) | unverändert |
POP ziel POP from StackLiest das obersten Wort bzw. Doppelwort (möglich ab 80386) vom Stack. Danach wird SP um 2 bzw. 4 (möglich ab 80386) erhöht. Gegenbefehl: PUSHDas Codesegmentregister CS kann bei POP nicht als Operand angegeben werden. Bei PUSH dagegen kann CS als Operand angegeben werden.
POPA POP all General Registers from StackLiest die obersten 8 Worte vom Stack. Die Lesefolge ist:DI, SI, BP, SP, BX, DX, CX, AX Danach wird SP um 16 erhöht. Verfügbar ab 80186, Gegenbefehl: PUSHA
POPAD POP all General Doublewordregisters from Stack (ab 80186)Liest die obersten 8 Doppelworte vom Stack. Die Lesefolge ist:EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX Danach wird SP um 32 erhöht. Verfügbar ab 80186, Gegenbefehl: PUSHAD
POPF POP Flagregister from StackLiest das obersten Wort vom Stack zum Flagregister. Danach wird SP um 2 erhöht. Gegenbefehl: PUSHF
PUSH quelle PUSH to StackSchreibt 1 Wort zum Stack. Vorher wird SP um 2 reduziert. Ab dem 80386 kann der Befehl auch auf Doppelworte angewendet werden. Der SP wird dann um 4 reduziert.Gegenbefehl: POP Bei imm8 wird 00 vor dem Direktwert abgespeichert, so dass bei POP ein Wort zurückgeholt wird.
PUSHA PUSH all General Registers to StackSchreibt die Register AX, CX, DX, BX, SP, BP, SI, DI zum Stack.SP wird um 16 reduziert. Verfügbar ab 80186, Gegenbefehl: POPA
PZSHAD PUSH all General Doublewordregisters to Stack (ab 80186)Schreibt die Register EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI zum Stack.SP wird um 16 reduziert. Verfügbar ab 80186, Gegenbefehl: POPAD
PUSHF PUSH Flagregister to StackSchreibt das Flagregister zum Stack. Vorher wird SP um 2 reduziert.Gegenbefehl: POPF
RCL ziel,zähler Rotiere nach links durchs Carryflag Rotiert die Bits des Zieloperanden um die Anzahl Bits laut Zähler nach
|
C | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|---|
RCL | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
C | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|---|
RCR | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
C | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|---|
ROL | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | C | ||
---|---|---|---|---|---|---|---|---|---|---|
ROR | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Der Zähler wird entweder durch CL durch einen Direktwert festgelegt. Das Überlaufflag wird gesetzt, wenn sich bei der Rotation um 1 das Vorzeichen des Operanden ändert.
Beim 8088/8086 ist der Zähler (wenn als Direktwert angegeben) immer 1. Ab dem 80186 kann der als Direktwert angegebene Zähler größer sein. Allerdings werden nur die 5 wertniedrigsten Bits des Zählers verwendet (egal ob als Direktwert oder im Register übergeben).
Operanden | Flags | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
r,1 | r,imm ab 80186: außerdem begrenzt auf 31 | r,CL | m,1 | m,CL | O | D | I | T | S | Z | A | P | C |
± | ± |
REP wiederholt diese Befehle, solange CX nicht Null ist.
REPE und REPZ wiederholen diese Befehle, solange CX nicht Null ist und das Nullflag gesetzt ist.
REPNE und REPNZ wiederholen diese Befehle, solange CX nicht Null ist und das Nullflag nicht gesetzt ist.
Operanden | Flags |
---|---|
keine | unverändert |
Operanden | Flags | |||
---|---|---|---|---|
NEAR | NEAR mit Stackwert | FAR | FAR mit Stackwert | unverändert |
SAHF Flagregister mit AL ladenLädt das unterste Byte des Flagregisters mit dem Inhalt von AL.
SAL ziel,zähler Arithmetisch nach links schieben Verschiebt die Bits des Zieloperanden um die Anzahl Bits laut Zähler nach
|
Operanden | Flags | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
r,1 | r,imm ab 80186: außerdem begrenzt auf 31 | r,CL | m,1 | m,CL | O | D | I | T | S | Z | A | P | C |
bei SAL und SHL | ± | ± | |||||||||||
bei SAR und SHR | ± | ± | ± | ? | ± | ± |
C | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
SAL SHL | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | C | ||
---|---|---|---|---|---|---|---|---|---|---|
SAR | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | C | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
SHR | 0 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Operanden | Flags | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
m/r,r | AX/AL,imm | r/m,imm | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± | ± |
DF=0 -> DI erhöht um 1, 2 oder EDI um 4
DF=1 -> DI erniedrigt um 1, 2 oder EDI um 4
Anstelle von SCAS kann auch SCASB (byteweise), oder SCASW (wortweise) oder (ab 80386) SCASD (doppelwortweise)eingesetzt werden. SCASB, SCASW und SCASD benötigen keine Operanden. Der Vergleich erfolgt durch Subtraktion AL/AX/EAX minus Stringelement ohne Ergebnisabspeicherung.
REPE bzw. REPZ bewirkt: Suche, bis ein nicht übereinstimmendes Element gefunden wird, oder bis CX = 0 ist.
REPNE bzw. REPNZ bewirkt: Suche, bis ein übereinstimmendes Element gefunden wird, oder bis CX = 0 ist.
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± | ± |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
1 |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
1 |
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
1 |
DF=0 -> DI erhöht um 1 oder 2 bzw. EDI um 4
DF=1 -> DSI erniedrigt um 1 oder 2 bzw. EDI um 4
Anstelle von STOS kann auch STOSB (byteweise), STOSW (wortweise) oder (ab 80386) STOSD (doppewortweise) eingesetzt werden. STOSB, STOSW und STOSD benötigen keine Operanden. Wird STOS zusammen mit REP eingesetzt, lässt sich ein Speicherbereich mit einem konstanten Wert
füllen:
Vergleiche das MACRO FILL in der Routinensammlung für COM
feld db 200 dup(0) ;feld anzahl equ $-feld ;feldgroesse ... lea di,feld ;offsetadresse nach di mov al,80h ;fuellwert mov cx,anzahl ;feldgroesse in bytes cld ;damit es ganz sicher aufwaerts geht rep stosb
Operanden | Flags | ||||||||
---|---|---|---|---|---|---|---|---|---|
keine | O | D | I | T | S | Z | A | P | C |
± | ± | ± | ± | ± | ± |
Operanden | Flags | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
m/r,r | r,m | AX/AL,imm | m/r,imm | O | D | I | T | S | Z | A | P | C |
0 | ± | ± | ? | ± | 0 |
Operanden | Flags |
---|---|
keine | unverändert |
Operanden | Flags | |||
---|---|---|---|---|
m/r,r | r,m/r | r16,AX | r32,EAX ab 80386 | unverändert |
Operanden | Flags |
---|---|
keine | unverändert |
Operanden | Flags | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
m/r,r | r,m | AX/AL,imm | m/r,imm | O | D | I | T | S | Z | A | P | C |
0 | ± | ± | ? | ± | 0 |
Das Besondere: es wird der exklusiv Oder-Befehl verwendet. Das Bild zeigt die Vorgehensweise:
11001111 alter Zustand 10101001 neuer Zustand ---------------------- 01100110 geänderte Bits auf 1
01100110 geänderte Bits auf 1 10101001 neuer Zustand ---------------------- 00010000 Signalübergang von 0 auf 1