i386-Befehle

Befehlsreferenz: i386 · x64 · ARM32 (Thumb-2) · ARM64 (AArch64)

Alle 614 Befehle in 1.184 Formen, die Asmonite für .arch i386 assembliert und Dismonite zerlegt: Name, Operanden, die Kodierung in Bytes und eine kurze Beschreibung. Mit dem Suchfeld findest du einen Befehl, eine Bytefolge (0F B6) oder ein Wort der Beschreibung. Nicht dabei sind die AVX-Befehle (VEX, EVEX), die Asmonite und Dismonite noch nicht kennen.

So liest du die Tabelle

Die Operanden stehen in der Reihenfolge wie im Quelltext: zuerst das Ziel, dann die Quelle (Intel-Schreibweise). r8 bis r64 ist ein Register dieser Breite, m eine Speicheradresse, r/m32 ein Register oder 32 Bit Speicher, imm8 eine Zahl im Befehl, rel8 und rel32 eine Sprungweite, xmm und mm Vektor-Register.

Unter der Beschreibung steht die Wirkung in Pseudocode: dst ist der erste Operand (das Ziel), src der zweite (die Quelle), [x] der Speicher an der Adresse x; sext und zext erweitern mit Vorzeichen und mit Nullen, >>s schiebt mit Vorzeichen, hi:lo ist ein Registerpaar. Darunter stehen die Flags, die der Befehl ändert, und die, die danach undefiniert sind.

Die Kodierung sind die Bytes des Befehls, farbig nach ihrer Rolle:

66 F3 F2Präfix: wählt die 16-Bit-Form (66) oder bei SSE die Art des Befehls (66 = Doubles, F3 = ein Single, F2 = ein Double)
0F 38 3AErweiterung des Opcodes (Zwei- und Drei-Byte-Tabellen)
8B B8+rdder Opcode; +rb, +rw, +rd, +rq: die Nummer des Registers kommt in die unteren drei Bits des Opcodes
/r /0…/7ein ModRM-Byte folgt (mit Register, Speicher und Adressteilen). /r: das Feld reg ist ein Register; /0 bis /7: das Feld reg ist ein Teil des Opcodes
ib iw id iq cb cddanach: eine Zahl von 1, 2, 4 oder 8 Bytes (i…) oder eine Sprungweite (c…); moffs ist eine absolute Adresse

Die Tabelle gilt für den 32-Bit-Modus (Windows und Linux, 32 Bit); die 64-Bit-Befehle stehen auf der Seite x64-Befehle. Sie ist aus dem Zerleger von Dismonite hergeleitet und wird neu erzeugt, wenn sich der Zerleger ändert; die Beschreibungen sind kurz gehalten, ausführliche Erklärungen stehen in der Hilfe (F1) von Asmonite und Dismonite.

Der Pseudocode ist wie Quelltext englisch geschrieben (if, then, for every element), auch auf der deutschen Seite.

BefehlOperandenKodierungBeschreibung
aaa37ASCII-Korrektur nach einer Addition (BCD)if (al & 15) > 9 or AF = 1 then { al = al + 6; ah = ah + 1; AF = CF = 1 } else { AF = CF = 0 }; al = al & 15Flags: AF CF · undefiniert: OF SF ZF PFArithmetik
aadimm8D5 ibASCII-Korrektur vor einer Division (BCD)al = ah * imm8 + al; ah = 0 (imm8 is 10 for BCD)Flags: SF ZF PF · undefiniert: OF AF CFArithmetik
aamimm8D4 ibASCII-Korrektur nach einer Multiplikation (BCD)ah = al / imm8; al = al % imm8 (imm8 is 10 for BCD)Flags: SF ZF PF · undefiniert: OF AF CFArithmetik
aas3FASCII-Korrektur nach einer Subtraktion (BCD)if (al & 15) > 9 or AF = 1 then { al = al - 6; ah = ah - 1; AF = CF = 1 } else { AF = CF = 0 }; al = al & 15Flags: AF CF · undefiniert: OF SF ZF PFArithmetik
adcr/m8, r810 /rAddition mit Übertrag (CF)dst = dst + src + CFFlags: OF SF ZF AF CF PFArithmetik
r/m32, r3211 /r
r/m16, r1666 11 /r
r8, r/m812 /r
r32, r/m3213 /r
r16, r/m1666 13 /r
al, imm814 ib
eax, imm3215 id
ax, imm1666 15 iw
r/m8, imm880 /2 ib
r/m32, imm3281 /2 id
r/m16, imm1666 81 /2 iw
r/m8, imm882 /2 ib
r/m32, imm883 /2 ib
r/m16, imm866 83 /2 ib
adcxr32, r/m3266 0F 38 F6 /rAddition mit Übertrag, ändert nur CFdst = dst + src + CFFlags: CFArithmetik
addr/m8, r800 /rAddition der Quelle zum Zieldst = dst + srcFlags: OF SF ZF AF CF PFArithmetik
r/m32, r3201 /r
r/m16, r1666 01 /r
r8, r/m802 /r
r32, r/m3203 /r
r16, r/m1666 03 /r
al, imm804 ib
eax, imm3205 id
ax, imm1666 05 iw
r/m8, imm880 /0 ib
r/m32, imm3281 /0 id
r/m16, imm1666 81 /0 iw
r/m8, imm882 /0 ib
r/m32, imm883 /0 ib
r/m16, imm866 83 /0 ib
addpdxmm, xmm/m12866 0F 58 /rAddition von 2 Doublesfor every element: dst[i] = dst[i] + src[i] (double)SSE Gleitkomma
addpsxmm, xmm/m1280F 58 /rAddition von 4 Singlesfor every element: dst[i] = dst[i] + src[i] (single)SSE Gleitkomma
addsdxmm, xmm/m64F2 0F 58 /rAddition von einem Doubledst[0] = dst[0] + src[0] (double); the other elements staySSE Gleitkomma
addssxmm, xmm/m32F3 0F 58 /rAddition von einem Singledst[0] = dst[0] + src[0] (single); the other elements staySSE Gleitkomma
addsubpdxmm, xmm/m12866 0F D0 /rAbwechselnde Subtraktion und Addition (Doubles)even elements: dst[i] = dst[i] - src[i]; odd elements: dst[i] = dst[i] + src[i]SSE Gleitkomma
addsubpsxmm, xmm/m128F2 0F D0 /rAbwechselnde Subtraktion und Addition (Singles)even elements: dst[i] = dst[i] - src[i]; odd elements: dst[i] = dst[i] + src[i]SSE Gleitkomma
adoxr32, r/m32F3 0F 38 F6 /rAddition mit Überlauf-Flag, ändert nur OFdst = dst + src + OFFlags: OFArithmetik
aesdecxmm, xmm/m12866 0F 38 DE /rEine Entschlüsselungsrunde von AESdst = inverse AES round of dst with the round key srcKryptografie
aesdeclastxmm, xmm/m12866 0F 38 DF /rDie letzte Entschlüsselungsrunde von AESdst = last inverse AES round of dst with the round key srcKryptografie
aesencxmm, xmm/m12866 0F 38 DC /rEine Verschlüsselungsrunde von AESdst = AES round of dst with the round key srcKryptografie
aesenclastxmm, xmm/m12866 0F 38 DD /rDie letzte Verschlüsselungsrunde von AESdst = last AES round of dst with the round key srcKryptografie
aesimcxmm, xmm/m12866 0F 38 DB /rUmwandlung eines AES-Rundenschlüssels für die Entschlüsselungdst = InvMixColumns(src)Kryptografie
aeskeygenassistxmm, xmm/m128, imm866 0F 3A DF /r ibHilfsbefehl für die AES-Schlüsselerzeugungdst = helper values for the AES key schedule from src (round constant imm8)Kryptografie
andr/m8, r820 /rBitweise UND-Verknüpfungdst = dst & src; CF = OF = 0Flags: OF SF ZF CF PF · undefiniert: AFLogik und Bits
r/m32, r3221 /r
r/m16, r1666 21 /r
r8, r/m822 /r
r32, r/m3223 /r
r16, r/m1666 23 /r
al, imm824 ib
eax, imm3225 id
ax, imm1666 25 iw
r/m8, imm880 /4 ib
r/m32, imm3281 /4 id
r/m16, imm1666 81 /4 iw
r/m8, imm882 /4 ib
r/m32, imm883 /4 ib
r/m16, imm866 83 /4 ib
andnpdxmm, xmm/m12866 0F 55 /rBitweise Verknüpfung: NICHT Ziel UND Quelledst = ~dst & srcSSE Gleitkomma
andnpsxmm, xmm/m1280F 55 /rBitweise Verknüpfung: NICHT Ziel UND Quelledst = ~dst & srcSSE Gleitkomma
andpdxmm, xmm/m12866 0F 54 /rBitweise UND-Verknüpfungdst = dst & srcSSE Gleitkomma
andpsxmm, xmm/m1280F 54 /rBitweise UND-Verknüpfungdst = dst & srcSSE Gleitkomma
arplr/m16, r1663 /rAnpassen des Anforderungs-Privilegs (RPL) eines Segmentselektorsif dst.RPL < src.RPL then { dst.RPL = src.RPL; ZF = 1 } else ZF = 0Flags: ZFSystem und Privilegien
blendpdxmm, xmm/m128, imm866 0F 3A 0D /r ibAuswahl von Doubles aus zwei Registern nach einer Maskefor every element: dst[i] = bit i of imm8 ? src[i] : dst[i]SSE Gleitkomma
blendpsxmm, xmm/m128, imm866 0F 3A 0C /r ibAuswahl von Singles aus zwei Registern nach einer Maskefor every element: dst[i] = bit i of imm8 ? src[i] : dst[i]SSE Gleitkomma
blendvpdxmm, xmm/m128, xmm066 0F 38 15 /rAuswahl von Doubles nach den Vorzeichenbits von xmm0for every element: dst[i] = (sign bit of xmm0[i]) ? src[i] : dst[i]SSE Gleitkomma
blendvpsxmm, xmm/m128, xmm066 0F 38 14 /rAuswahl von Singles nach den Vorzeichenbits von xmm0for every element: dst[i] = (sign bit of xmm0[i]) ? src[i] : dst[i]SSE Gleitkomma
boundr32, m62 /rPrüfung eines Array-Index gegen Grenzen im Speicherraise #BR if index dst < [m] or dst > [m + size]System und Privilegien
r16, m66 62 /r
bsfr32, r/m320F BC /rSuche des niedrigsten gesetzten Bitsdst = index of the lowest 1 bit of src; ZF = (src = 0), dst undefined thenFlags: ZFLogik und Bits
r16, r/m1666 0F BC /r
bsrr32, r/m320F BD /rSuche des höchsten gesetzten Bitsdst = index of the highest 1 bit of src; ZF = (src = 0), dst undefined thenFlags: ZFLogik und Bits
r16, r/m1666 0F BD /r
bswapr320F C8+rdUmkehren der Reihenfolge der Bytes (Little/Big Endian)dst = reverse_bytes(dst)Daten kopieren
btr/m32, r320F A3 /rKopie eines Bits nach CFCF = bit src of dstFlags: CFLogik und Bits
r/m16, r1666 0F A3 /r
r/m32, imm80F BA /4 ib
r/m16, imm866 0F BA /4 ib
btcr/m32, imm80F BA /7 ibKopie eines Bits nach CF und Umkehren des BitsCF = bit src of dst; bit src of dst = not bitFlags: CFLogik und Bits
r/m16, imm866 0F BA /7 ib
r/m32, r320F BB /r
r/m16, r1666 0F BB /r
btrr/m32, r320F B3 /rKopie eines Bits nach CF und Löschen des BitsCF = bit src of dst; bit src of dst = 0Flags: CFLogik und Bits
r/m16, r1666 0F B3 /r
r/m32, imm80F BA /6 ib
r/m16, imm866 0F BA /6 ib
btsr/m32, r320F AB /rKopie eines Bits nach CF und Setzen des BitsCF = bit src of dst; bit src of dst = 1Flags: CFLogik und Bits
r/m16, r1666 0F AB /r
r/m32, imm80F BA /5 ib
r/m16, imm866 0F BA /5 ib
callrel32E8 cdAufruf einer Funktion (die Rücksprungadresse kommt auf den Stack)push(eip of the next instruction); eip = targetSprünge, Aufrufe und Interrupts
rel1666 E8 cw
r/m32FF /2
mFF /3
r/m1666 FF /2
cbw66 98Vorzeichenerweiterung von al nach axax = sext(al)Daten kopieren
cdq99Vorzeichenerweiterung von eax nach edx:eaxedx:eax = sext(eax)Daten kopieren
clac0F 01 CALöschen des AC-Flags (Zugriffsschutz)EFLAGS.AC = 0Flags: ACFlags
clcF8Löschen des Carry-FlagsCF = 0Flags: CFFlags
cldFCLöschen des Richtungs-Flags (String-Befehle zählen aufwärts)DF = 0Flags: DFFlags
clflushm0F AE /7Leeren einer Cache-Zeilewrite back and remove the cache line of [m] from all cachesSystem und Privilegien
clflushoptm66 0F AE /7Leeren einer Cache-Zeile (schneller, lose geordnet)write back and remove the cache line of [m] from all cachesSystem und Privilegien
cliFASperren der Interrupts (IF=0)IF = 0Flags: IFFlags
clts0F 06Löschen des Task-Switched-Flags in cr0CR0.TS = 0 (privileged)System und Privilegien
clwbm66 0F AE /6Zurückschreiben einer Cache-Zeile, ohne sie zu leerenwrite back the cache line of [m], it may stay in the cacheSystem und Privilegien
cmcF5Umkehren des Carry-FlagsCF = not CFFlags: CFFlags
cmovar32, r/m320F 47 /rKopieren nur, wenn ohne Vorzeichen größer (CF=0 und ZF=0)if CF = 0 and ZF = 0 then dst = srcDaten kopieren
r16, r/m1666 0F 47 /r
cmovber32, r/m320F 46 /rKopieren nur, wenn ohne Vorzeichen kleiner oder gleich (CF=1 oder ZF=1)if CF = 1 or ZF = 1 then dst = srcDaten kopieren
r16, r/m1666 0F 46 /r
cmovcr32, r/m320F 42 /rKopieren nur, wenn Übertrag, ohne Vorzeichen kleiner (CF=1)if CF = 1 then dst = srcDaten kopieren
r16, r/m1666 0F 42 /r
cmovgr32, r/m320F 4F /rKopieren nur, wenn mit Vorzeichen größer (ZF=0 und SF=OF)if ZF = 0 and SF = OF then dst = srcDaten kopieren
r16, r/m1666 0F 4F /r
cmovger32, r/m320F 4D /rKopieren nur, wenn mit Vorzeichen größer oder gleich (SF=OF)if SF = OF then dst = srcDaten kopieren
r16, r/m1666 0F 4D /r
cmovlr32, r/m320F 4C /rKopieren nur, wenn mit Vorzeichen kleiner (SF≠OF)if SF != OF then dst = srcDaten kopieren
r16, r/m1666 0F 4C /r
cmovler32, r/m320F 4E /rKopieren nur, wenn mit Vorzeichen kleiner oder gleich (ZF=1 oder SF≠OF)if ZF = 1 or SF != OF then dst = srcDaten kopieren
r16, r/m1666 0F 4E /r
cmovncr32, r/m320F 43 /rKopieren nur, wenn kein Übertrag, ohne Vorzeichen größer oder gleich (CF=0)if CF = 0 then dst = srcDaten kopieren
r16, r/m1666 0F 43 /r
cmovnor32, r/m320F 41 /rKopieren nur, wenn kein Überlauf (OF=0)if OF = 0 then dst = srcDaten kopieren
r16, r/m1666 0F 41 /r
cmovnpr32, r/m320F 4B /rKopieren nur, wenn Parität ungerade (PF=0)if PF = 0 then dst = srcDaten kopieren
r16, r/m1666 0F 4B /r
cmovnsr32, r/m320F 49 /rKopieren nur, wenn nicht negativ (SF=0)if SF = 0 then dst = srcDaten kopieren
r16, r/m1666 0F 49 /r
cmovnzr32, r/m320F 45 /rKopieren nur, wenn ungleich, Ergebnis nicht null (ZF=0)if ZF = 0 then dst = srcDaten kopieren
r16, r/m1666 0F 45 /r
cmovor32, r/m320F 40 /rKopieren nur, wenn Überlauf (OF=1)if OF = 1 then dst = srcDaten kopieren
r16, r/m1666 0F 40 /r
cmovpr32, r/m320F 4A /rKopieren nur, wenn Parität gerade (PF=1)if PF = 1 then dst = srcDaten kopieren
r16, r/m1666 0F 4A /r
cmovsr32, r/m320F 48 /rKopieren nur, wenn negativ (SF=1)if SF = 1 then dst = srcDaten kopieren
r16, r/m1666 0F 48 /r
cmovzr32, r/m320F 44 /rKopieren nur, wenn gleich, Ergebnis null (ZF=1)if ZF = 1 then dst = srcDaten kopieren
r16, r/m1666 0F 44 /r
cmpr/m8, r838 /rVergleich (Ziel minus Quelle), nur die Flags ändern sichflags = dst - src (the result is thrown away)Flags: OF SF ZF AF CF PFVergleichen und Tauschen
r/m32, r3239 /r
r/m16, r1666 39 /r
r8, r/m83A /r
r32, r/m323B /r
r16, r/m1666 3B /r
al, imm83C ib
eax, imm323D id
ax, imm1666 3D iw
r/m8, imm880 /7 ib
r/m32, imm3281 /7 id
r/m16, imm1666 81 /7 iw
r/m8, imm882 /7 ib
r/m32, imm883 /7 ib
r/m16, imm866 83 /7 ib
cmpeqpdxmm, xmm/m12866 0F C2 /r 00Vergleich von 2 Doubles auf gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] eq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpeqpsxmm, xmm/m1280F C2 /r 00Vergleich von 4 Singles auf gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] eq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpeqsdxmm, xmm/m64F2 0F C2 /r 00Vergleich von einem Double auf gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] eq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpeqssxmm, xmm/m32F3 0F C2 /r 00Vergleich von einem Single auf gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] eq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmplepdxmm, xmm/m12866 0F C2 /r 02Vergleich von 2 Doubles auf kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] le src[i]) ? all 1 bits : 0SSE Gleitkomma
cmplepsxmm, xmm/m1280F C2 /r 02Vergleich von 4 Singles auf kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] le src[i]) ? all 1 bits : 0SSE Gleitkomma
cmplesdxmm, xmm/m64F2 0F C2 /r 02Vergleich von einem Double auf kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] le src[i]) ? all 1 bits : 0SSE Gleitkomma
cmplessxmm, xmm/m32F3 0F C2 /r 02Vergleich von einem Single auf kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] le src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpltpdxmm, xmm/m12866 0F C2 /r 01Vergleich von 2 Doubles auf kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] lt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpltpsxmm, xmm/m1280F C2 /r 01Vergleich von 4 Singles auf kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] lt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpltsdxmm, xmm/m64F2 0F C2 /r 01Vergleich von einem Double auf kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] lt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpltssxmm, xmm/m32F3 0F C2 /r 01Vergleich von einem Single auf kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] lt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpneqpdxmm, xmm/m12866 0F C2 /r 04Vergleich von 2 Doubles auf ungleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] neq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpneqpsxmm, xmm/m1280F C2 /r 04Vergleich von 4 Singles auf ungleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] neq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpneqsdxmm, xmm/m64F2 0F C2 /r 04Vergleich von einem Double auf ungleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] neq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpneqssxmm, xmm/m32F3 0F C2 /r 04Vergleich von einem Single auf ungleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] neq src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnlepdxmm, xmm/m12866 0F C2 /r 06Vergleich von 2 Doubles auf nicht kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nle src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnlepsxmm, xmm/m1280F C2 /r 06Vergleich von 4 Singles auf nicht kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nle src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnlesdxmm, xmm/m64F2 0F C2 /r 06Vergleich von einem Double auf nicht kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nle src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnlessxmm, xmm/m32F3 0F C2 /r 06Vergleich von einem Single auf nicht kleiner oder gleich, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nle src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnltpdxmm, xmm/m12866 0F C2 /r 05Vergleich von 2 Doubles auf nicht kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nlt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnltpsxmm, xmm/m1280F C2 /r 05Vergleich von 4 Singles auf nicht kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nlt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnltsdxmm, xmm/m64F2 0F C2 /r 05Vergleich von einem Double auf nicht kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nlt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpnltssxmm, xmm/m32F3 0F C2 /r 05Vergleich von einem Single auf nicht kleiner, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] nlt src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpordpdxmm, xmm/m12866 0F C2 /r 07Vergleich von 2 Doubles auf geordnet (kein NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] ord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpordpsxmm, xmm/m1280F C2 /r 07Vergleich von 4 Singles auf geordnet (kein NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] ord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpordsdxmm, xmm/m64F2 0F C2 /r 07Vergleich von einem Double auf geordnet (kein NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] ord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpordssxmm, xmm/m32F3 0F C2 /r 07Vergleich von einem Single auf geordnet (kein NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] ord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmppdxmm, xmm/m128, imm866 0F C2 /r ibVergleich von 2 Doubles mit einer Bedingung, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] predicate src[i]) ? all 1 bits : 0; the predicate is imm8SSE Gleitkomma
cmppsxmm, xmm/m128, imm80F C2 /r ibVergleich von 4 Singles mit einer Bedingung, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] predicate src[i]) ? all 1 bits : 0; the predicate is imm8SSE Gleitkomma
cmpsbA6Vergleich von [esi] mit [edi], esi und edi laufen weiterflags = [esi] - [edi]; esi, edi = +/- size; with repe / repne: repeat while equal / not equal, at most ecx timesFlags: OF SF ZF AF CF PFZeichenketten
cmpsdA7Vergleich eines Doubles (xmm) mit einer Bedingung; ohne Operanden: String-Vergleichfor every element: dst[i] = (dst[i] predicate src[i]) ? all 1 bits : 0; the predicate is imm8SSE Gleitkomma
xmm, xmm/m64, imm8F2 0F C2 /r ib
cmpssxmm, xmm/m32, imm8F3 0F C2 /r ibVergleich eines Singles mit einer Bedingung, Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] predicate src[i]) ? all 1 bits : 0; the predicate is imm8SSE Gleitkomma
cmpsw66 A7Vergleich von [esi] mit [edi], esi und edi laufen weiterflags = [esi] - [edi]; esi, edi = +/- size; with repe / repne: repeat while equal / not equal, at most ecx timesFlags: OF SF ZF AF CF PFZeichenketten
cmpunordpdxmm, xmm/m12866 0F C2 /r 03Vergleich von 2 Doubles auf ungeordnet (NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] unord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpunordpsxmm, xmm/m1280F C2 /r 03Vergleich von 4 Singles auf ungeordnet (NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] unord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpunordsdxmm, xmm/m64F2 0F C2 /r 03Vergleich von einem Double auf ungeordnet (NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] unord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpunordssxmm, xmm/m32F3 0F C2 /r 03Vergleich von einem Single auf ungeordnet (NaN), Ergebnis ist eine Maskefor every element: dst[i] = (dst[i] unord src[i]) ? all 1 bits : 0SSE Gleitkomma
cmpxchgr/m8, r80F B0 /rVergleichen und Tauschen bei Gleichheit (atomar mit lock)if eax == dst then { ZF = 1; dst = src } else { ZF = 0; eax = dst }Flags: OF SF ZF AF CF PFVergleichen und Tauschen
r/m32, r320F B1 /r
r/m16, r1666 0F B1 /r
cmpxchg8bm0F C7 /1Vergleichen und Tauschen von 4 Bytes (edx:eax, ecx:ebx)if edx:eax == [m] then { ZF = 1; [m] = ecx:ebx } else { ZF = 0; edx:eax = [m] }Flags: ZFVergleichen und Tauschen
comisdxmm, xmm/m6466 0F 2F /rVergleich zweier Doubles, setzt ZF, PF, CFZF PF CF = compare(dst, src): greater 0 0 0, less 0 0 1, equal 1 0 0, unordered 1 1 1; OF SF AF = 0Flags: OF SF ZF AF CF PFSSE Gleitkomma
comissxmm, xmm/m320F 2F /rVergleich zweier Singles, setzt ZF, PF, CFZF PF CF = compare(dst, src): greater 0 0 0, less 0 0 1, equal 1 0 0, unordered 1 1 1; OF SF AF = 0Flags: OF SF ZF AF CF PFSSE Gleitkomma
cpuid0F A2Auskunft über den Prozessoreax, ebx, ecx, edx = information about the processor for the function in eax (and ecx)System und Privilegien
crc32r32, r/m8F2 0F 38 F0 /rBerechnung einer CRC-32C-Prüfsumme (Castagnoli)dst = crc32c(dst, src)Arithmetik
r32, r/m32F2 0F 38 F1 /r
cvtdq2pdxmm, xmm/m64F3 0F E6 /rUmwandlung von 2 Ganzzahlen (32 Bit) in Doublesfor every element: dst[i] = convert(src[i]) from int32 to doubleUmwandlungen
cvtdq2psxmm, xmm/m1280F 5B /rUmwandlung von 4 Ganzzahlen (32 Bit) in Singlesfor every element: dst[i] = convert(src[i]) from int32 to singleUmwandlungen
cvtpd2dqxmm, xmm/m128F2 0F E6 /rUmwandlung von 2 Doubles in Ganzzahlen (gerundet)for every element: dst[i] = convert(src[i]) from double to int32Umwandlungen
cvtpd2pimm, xmm/m6466 0F 2D /rUmwandlung von 2 Doubles in Ganzzahlen (mm, gerundet)for every element: dst[i] = convert(src[i]) from double to int32Umwandlungen
cvtpd2psxmm, xmm/m12866 0F 5A /rUmwandlung von 2 Doubles in Singlesfor every element: dst[i] = convert(src[i]) from double to singleUmwandlungen
cvtpi2pdxmm, mm/m6466 0F 2A /rUmwandlung von 2 Ganzzahlen (mm) in Doublesfor every element: dst[i] = convert(src[i]) from int32 to doubleUmwandlungen
cvtpi2psxmm, mm/m640F 2A /rUmwandlung von 2 Ganzzahlen (mm) in Singlesfor every element: dst[i] = convert(src[i]) from int32 to singleUmwandlungen
cvtps2dqxmm, xmm/m12866 0F 5B /rUmwandlung von 4 Singles in Ganzzahlen (gerundet)for every element: dst[i] = convert(src[i]) from single to int32Umwandlungen
cvtps2pdxmm, xmm/m640F 5A /rUmwandlung von 2 Singles in Doublesfor every element: dst[i] = convert(src[i]) from single to doubleUmwandlungen
cvtps2pimm, xmm/m640F 2D /rUmwandlung von 2 Singles in Ganzzahlen (mm, gerundet)for every element: dst[i] = convert(src[i]) from single to int32Umwandlungen
cvtsd2sir32, xmm/m128F2 0F 2D /rUmwandlung eines Doubles in eine Ganzzahl (gerundet)for every element: dst[i] = convert(src[i]) from double to integerUmwandlungen
cvtsd2ssxmm, xmm/m128F2 0F 5A /rUmwandlung eines Doubles in einen Singlefor every element: dst[i] = convert(src[i]) from double to singleUmwandlungen
cvtsi2sdxmm, r/m32F2 0F 2A /rUmwandlung einer Ganzzahl in einen Doublefor every element: dst[i] = convert(src[i]) from integer to doubleUmwandlungen
cvtsi2ssxmm, r/m32F3 0F 2A /rUmwandlung einer Ganzzahl in einen Singlefor every element: dst[i] = convert(src[i]) from integer to singleUmwandlungen
cvtss2sdxmm, xmm/m32F3 0F 5A /rUmwandlung eines Singles in einen Doublefor every element: dst[i] = convert(src[i]) from single to doubleUmwandlungen
cvtss2sir32, xmm/m32F3 0F 2D /rUmwandlung eines Singles in eine Ganzzahl (gerundet)for every element: dst[i] = convert(src[i]) from single to integerUmwandlungen
cvttpd2dqxmm, xmm/m12866 0F E6 /rUmwandlung von 2 Doubles in Ganzzahlen (abgeschnitten)for every element: dst[i] = truncate(src[i]) from double to int32Umwandlungen
cvttpd2pimm, xmm/m6466 0F 2C /rUmwandlung von 2 Doubles in Ganzzahlen (mm, abgeschnitten)for every element: dst[i] = truncate(src[i]) from double to int32Umwandlungen
cvttps2dqxmm, xmm/m128F3 0F 5B /rUmwandlung von 4 Singles in Ganzzahlen (abgeschnitten)for every element: dst[i] = truncate(src[i]) from single to int32Umwandlungen
cvttps2pimm, xmm/m640F 2C /rUmwandlung von 2 Singles in Ganzzahlen (mm, abgeschnitten)for every element: dst[i] = truncate(src[i]) from single to int32Umwandlungen
cvttsd2sir32, xmm/m128F2 0F 2C /rUmwandlung eines Doubles in eine Ganzzahl (abgeschnitten)for every element: dst[i] = truncate(src[i]) from double to integerUmwandlungen
cvttss2sir32, xmm/m32F3 0F 2C /rUmwandlung eines Singles in eine Ganzzahl (abgeschnitten)for every element: dst[i] = truncate(src[i]) from single to integerUmwandlungen
cwd66 99Vorzeichenerweiterung von ax nach dx:axdx:ax = sext(ax)Daten kopieren
cwde98Vorzeichenerweiterung von ax nach eaxeax = sext(ax)Daten kopieren
daa27Dezimalkorrektur nach einer Addition (gepackte BCD-Zahlen)if (al & 15) > 9 or AF = 1 then al = al + 6; if al > 99h or CF = 1 then al = al + 60hFlags: SF ZF AF CF PF · undefiniert: OFArithmetik
das2FDezimalkorrektur nach einer Subtraktion (gepackte BCD-Zahlen)if (al & 15) > 9 or AF = 1 then al = al - 6; if al > 99h or CF = 1 then al = al - 60hFlags: SF ZF AF CF PF · undefiniert: OFArithmetik
decr/m8FE /1Verringerung um 1 (CF bleibt)dst = dst - 1Flags: OF SF ZF AF PFArithmetik
r/m32FF /1
r/m1666 FF /1
divax, r/m8F6 /6Division ohne Vorzeichen: edx:eax durch den Operanden, Quotient nach eax, Rest nach edxeax = edx:eax / src; edx = edx:eax % src (8 bit: al = ax / src; ah = ax % src); #DE if src = 0 or quotient too big (unsigned)Flags: – · undefiniert: OF SF ZF AF CF PFArithmetik
eax, r/m32F7 /6
ax, r/m1666 F7 /6
divpdxmm, xmm/m12866 0F 5E /rDivision von 2 Doublesfor every element: dst[i] = dst[i] / src[i] (double)SSE Gleitkomma
divpsxmm, xmm/m1280F 5E /rDivision von 4 Singlesfor every element: dst[i] = dst[i] / src[i] (single)SSE Gleitkomma
divsdxmm, xmm/m64F2 0F 5E /rDivision von einem Doubledst[0] = dst[0] / src[0] (double); the other elements staySSE Gleitkomma
divssxmm, xmm/m32F3 0F 5E /rDivision von einem Singledst[0] = dst[0] / src[0] (single); the other elements staySSE Gleitkomma
dppdxmm, xmm/m128, imm866 0F 3A 41 /r ibSkalarprodukt von Doublesdst[i] = sum of dst[j] * src[j] for the elements chosen by imm8 (high bits), written to the elements chosen by imm8 (low bits)SSE Gleitkomma
dppsxmm, xmm/m128, imm866 0F 3A 40 /r ibSkalarprodukt von Singlesdst[i] = sum of dst[j] * src[j] for the elements chosen by imm8 (high bits), written to the elements chosen by imm8 (low bits)SSE Gleitkomma
emms0F 77Beenden von MMX und Freigabe der x87-Registermark all x87 registers as empty (after MMX)System und Privilegien
endbr32F3 0F 1E FBMarkierung eines gültigen Sprungziels (Kontrollfluss-Schutz)marks a valid target of an indirect jump (no change)Schranken und Sonstiges
endbr64F3 0F 1E FAMarkierung eines gültigen Sprungziels (Kontrollfluss-Schutz)marks a valid target of an indirect jump (no change)Schranken und Sonstiges
enterimm16, imm8C8 iw ibAufbau eines Stackrahmens (selten, meist push/mov)push(ebp); ebp = esp; esp = esp - size (nesting level 0)Stack
extractpsr/m32, xmm, imm866 0F 3A 17 /r ibHerausholen eines Singles aus xmm in ein Register oder Speicherdst = one single of src, chosen by imm8SSE und MMX Datenbewegung
f2xm1D9 F02 hoch st0 minus 1st0 = 2 ^ st0 - 1Gleitkomma (x87)
fabsD9 E1Betrag von st0st0 = abs(st0)Gleitkomma (x87)
faddm32D8 /0Addition (st0 = st0 + Operand)st0 = st0 + src (or st(i) = st(i) + st0)Gleitkomma (x87)
st0, st(i)D8 /0
m64DC /0
st(i), st0DC /0
faddpst(i), st0DE /0Addition mit Entfernen vom Stackst(i) = st(i) + st0; popGleitkomma (x87)
fbldm80DF /4Laden einer gepackten Dezimalzahl (BCD)push: st0 = packed decimal srcGleitkomma (x87)
fbstpm80DF /6Speichern von st0 als gepackte Dezimalzahl und Entfernendst = st0 as packed decimal; popGleitkomma (x87)
fchsD9 E0Vorzeichenwechsel von st0st0 = -st0Gleitkomma (x87)
fcmovbst0, st(i)DA /0Kopieren von st(i) nach st0, wenn CF=1if CF = 1 then st0 = st(i)Gleitkomma (x87)
fcmovbest0, st(i)DA /2Kopieren von st(i) nach st0, wenn CF=1 oder ZF=1if CF = 1 or ZF = 1 then st0 = st(i)Gleitkomma (x87)
fcmovest0, st(i)DA /1Kopieren von st(i) nach st0, wenn ZF=1if ZF = 1 then st0 = st(i)Gleitkomma (x87)
fcmovnbst0, st(i)DB /0Kopieren von st(i) nach st0, wenn CF=0if CF = 0 then st0 = st(i)Gleitkomma (x87)
fcmovnbest0, st(i)DB /2Kopieren von st(i) nach st0, wenn CF=0 und ZF=0if CF = 0 and ZF = 0 then st0 = st(i)Gleitkomma (x87)
fcmovnest0, st(i)DB /1Kopieren von st(i) nach st0, wenn ZF=0if ZF = 0 then st0 = st(i)Gleitkomma (x87)
fcmovnust0, st(i)DB /3Kopieren von st(i) nach st0, wenn PF=0if PF = 0 then st0 = st(i)Gleitkomma (x87)
fcmovust0, st(i)DA /3Kopieren von st(i) nach st0, wenn PF=1if PF = 1 then st0 = st(i)Gleitkomma (x87)
fcomst(i)/m32D8 /2Vergleich von st0 mit einem Operanden (Statuswort)status word C3 C2 C0 = compare(st0, src)Flags: C0 C2 C3Gleitkomma (x87)
m64DC /2
fcomist0, st(i)DB /6Vergleich mit direkter Wirkung auf ZF, PF, CFZF PF CF = compare(st0, st(i))Flags: ZF CF PFGleitkomma (x87)
fcomipst0, st(i)DF /6Vergleich mit ZF, PF, CF und Entfernen von st0ZF PF CF = compare(st0, st(i)); popFlags: ZF CF PFGleitkomma (x87)
fcompst(i)/m32D8 /3Vergleich mit Entfernen von st0 vom Stackstatus word C3 C2 C0 = compare(st0, src); popFlags: C0 C2 C3Gleitkomma (x87)
m64DC /3
fcomppDE D9Vergleich von st0 mit st1 und Entfernen beiderstatus word C3 C2 C0 = compare(st0, st1); pop twiceFlags: C0 C2 C3Gleitkomma (x87)
fcosD9 FFKosinus von st0st0 = cos(st0)Gleitkomma (x87)
fdecstpD9 F6Verringerung des x87-Stackzeigerstop of the x87 stack = top - 1Gleitkomma (x87)
fdivm32D8 /6Divisionst0 = st0 / src (or st(i) = st(i) / st0)Gleitkomma (x87)
st0, st(i)D8 /6
m64DC /6
st(i), st0DC /7
fdivpst(i), st0DE /7Division mit Entfernen vom Stackst(i) = st(i) / st0; popGleitkomma (x87)
fdivrm32D8 /7Division in umgekehrter Reihenfolgest0 = src / st0 (or st(i) = st0 / st(i))Gleitkomma (x87)
st0, st(i)D8 /7
st(i), st0DC /6
m64DC /7
fdivrpst(i), st0DE /6Umgekehrte Division mit Entfernen vom Stackst(i) = st0 / st(i); popGleitkomma (x87)
ffreest(i)DD /0Freigabe eines x87-Registersmark st(i) as emptyGleitkomma (x87)
fiaddm32DA /0Addition einer Ganzzahl aus dem Speicherst0 = st0 + (float) integer srcGleitkomma (x87)
m16DE /0
ficomm32DA /2Vergleich von st0 mit einer Ganzzahlstatus word C3 C2 C0 = compare(st0, integer src)Flags: C0 C2 C3Gleitkomma (x87)
m16DE /2
ficompm32DA /3Vergleich mit einer Ganzzahl und Entfernen von st0status word C3 C2 C0 = compare(st0, integer src); popFlags: C0 C2 C3Gleitkomma (x87)
m16DE /3
fidivm32DA /6Division durch eine Ganzzahl aus dem Speicherst0 = st0 / (float) integer srcGleitkomma (x87)
m16DE /6
fidivrm32DA /7Division einer Ganzzahl durch st0 (umgekehrt)st0 = (float) integer src / st0Gleitkomma (x87)
m16DE /7
fildm32DB /0Laden einer Ganzzahl auf den x87-Stackpush: st0 = (float) integer srcGleitkomma (x87)
m16DF /0
m64DF /5
fimulm32DA /1Multiplikation mit einer Ganzzahl aus dem Speicherst0 = st0 * (float) integer srcGleitkomma (x87)
m16DE /1
fincstpD9 F7Erhöhung des x87-Stackzeigerstop of the x87 stack = top + 1Gleitkomma (x87)
fistm32DB /2Speichern von st0 als Ganzzahl (gerundet)dst = (integer) st0, roundedGleitkomma (x87)
m16DF /2
fistpm32DB /3Speichern von st0 als Ganzzahl und Entfernendst = (integer) st0, rounded; popGleitkomma (x87)
m16DF /3
m64DF /7
fisttpm32DB /1Speichern von st0 als Ganzzahl (abgeschnitten) und Entfernendst = (integer) st0, truncated; popGleitkomma (x87)
m64DD /1
m16DF /1
fisubm32DA /4Subtraktion einer Ganzzahl aus dem Speicherst0 = st0 - (float) integer srcGleitkomma (x87)
m16DE /4
fisubrm32DA /5Umgekehrte Subtraktion einer Ganzzahl aus dem Speicherst0 = (float) integer src - st0Gleitkomma (x87)
m16DE /5
fldst(i)/m32D9 /0Laden eines Wertes auf den x87-Stackpush: st0 = srcGleitkomma (x87)
m80DB /5
m64DD /0
fld1D9 E8Laden der Konstante 1.0push: st0 = 1.0Gleitkomma (x87)
fldcwm16D9 /5Laden des x87-Steuerwortsx87 control word = [m16]Gleitkomma (x87)
fldenvmD9 /4Laden der x87-Umgebungx87 environment = [m]Gleitkomma (x87)
fldl2eD9 EALaden von log2(e)push: st0 = log2(e)Gleitkomma (x87)
fldl2tD9 E9Laden von log2(10)push: st0 = log2(10)Gleitkomma (x87)
fldlg2D9 ECLaden von log10(2)push: st0 = log10(2)Gleitkomma (x87)
fldln2D9 EDLaden von ln(2)push: st0 = ln(2)Gleitkomma (x87)
fldpiD9 EBLaden der Konstante πpush: st0 = piGleitkomma (x87)
fldzD9 EELaden der Konstante 0.0push: st0 = 0.0Gleitkomma (x87)
fmulm32D8 /1Multiplikationst0 = st0 * src (or st(i) = st(i) * st0)Gleitkomma (x87)
st0, st(i)D8 /1
m64DC /1
st(i), st0DC /1
fmulpst(i), st0DE /1Multiplikation mit Entfernen vom Stackst(i) = st(i) * st0; popGleitkomma (x87)
fnclexDB E2Löschen der x87-Ausnahmenclear the x87 exception flagsGleitkomma (x87)
fninitDB E3Zurücksetzen der x87-Einheitreset the x87 unitGleitkomma (x87)
fnopD9 D0Keine Operation (x87)no operationGleitkomma (x87)
fnsavemDD /6Speichern des ganzen x87-Zustands[m] = whole x87 state; then reset the unitGleitkomma (x87)
fnstcwm16D9 /7Speichern des x87-Steuerworts[m16] = x87 control wordGleitkomma (x87)
fnstenvmD9 /6Speichern der x87-Umgebung[m] = x87 environmentGleitkomma (x87)
fnstswm16DD /7Speichern des x87-Statuswortsdst = x87 status wordGleitkomma (x87)
axDF E0
fpatanD9 F3Arkustangens von st1/st0st1 = atan(st1 / st0); popGleitkomma (x87)
fpremD9 F8Rest einer Division (teilweise)st0 = st0 mod st1 (truncating quotient, partial)Gleitkomma (x87)
fprem1D9 F5IEEE-Rest einer Divisionst0 = IEEE remainder of st0 / st1 (partial)Gleitkomma (x87)
fptanD9 F2Tangens von st0st0 = tan(st0); push: st0 = 1.0Gleitkomma (x87)
frndintD9 FCRunden von st0 auf eine ganze Zahlst0 = round(st0) to an integer valueGleitkomma (x87)
frstormDD /4Wiederherstellen des ganzen x87-Zustandswhole x87 state = [m]Gleitkomma (x87)
fscaleD9 FDMultiplikation von st0 mit 2 hoch st1st0 = st0 * 2 ^ trunc(st1)Gleitkomma (x87)
fsinD9 FESinus von st0st0 = sin(st0)Gleitkomma (x87)
fsincosD9 FBSinus und Kosinus von st0st0 = sin(st0); push: st0 = cosGleitkomma (x87)
fsqrtD9 FAQuadratwurzel von st0st0 = sqrt(st0)Gleitkomma (x87)
fstm32D9 /2Speichern von st0 (ohne Entfernen)dst = st0Gleitkomma (x87)
st(i)/m64DD /2
fstpm32D9 /3Speichern von st0 und Entfernen vom Stackdst = st0; popGleitkomma (x87)
m80DB /7
st(i)/m64DD /3
fsubm32D8 /4Subtraktionst0 = st0 - src (or st(i) = st(i) - st0)Gleitkomma (x87)
st0, st(i)D8 /4
m64DC /4
st(i), st0DC /5
fsubpst(i), st0DE /5Subtraktion mit Entfernen vom Stackst(i) = st(i) - st0; popGleitkomma (x87)
fsubrm32D8 /5Subtraktion in umgekehrter Reihenfolgest0 = src - st0 (or st(i) = st0 - st(i))Gleitkomma (x87)
st0, st(i)D8 /5
st(i), st0DC /4
m64DC /5
fsubrpst(i), st0DE /4Umgekehrte Subtraktion mit Entfernen vom Stackst(i) = st0 - st(i); popGleitkomma (x87)
ftstD9 E4Vergleich von st0 mit 0.0status word C3 C2 C0 = compare(st0, 0.0)Flags: C0 C2 C3Gleitkomma (x87)
fucomst(i)DD /4Ungeordneter Vergleich (kein Fehler bei NaN)status word C3 C2 C0 = compare(st0, src)Flags: C0 C2 C3Gleitkomma (x87)
fucomist0, st(i)DB /5Ungeordneter Vergleich, setzt ZF, PF, CFZF PF CF = compare(st0, st(i))Flags: ZF CF PFGleitkomma (x87)
fucomipst0, st(i)DF /5Ungeordneter Vergleich, setzt ZF, PF, CF, mit Entfernen von st0ZF PF CF = compare(st0, st(i)); popFlags: ZF CF PFGleitkomma (x87)
fucompst(i)DD /5Ungeordneter Vergleich mit Entfernen von st0status word C3 C2 C0 = compare(st0, src); popFlags: C0 C2 C3Gleitkomma (x87)
fucomppDA E9Ungeordneter Vergleich von st0, st1 mit Entfernen beiderstatus word C3 C2 C0 = compare(st0, st1); pop twiceFlags: C0 C2 C3Gleitkomma (x87)
fwait9BWarten auf die x87-Einheitwait until the x87 unit is done and report its errorsSchranken und Sonstiges
fxamD9 E5Feststellen der Art von st0 (Zahl, NaN, ...)status word C3 C2 C1 C0 = kind of st0 (number, zero, infinity, NaN, ...)Flags: C0 C1 C2 C3Gleitkomma (x87)
fxchst(i)D9 /1Vertauschen von st0 mit einem anderen Registerswap(st0, st(i))Gleitkomma (x87)
fxrstorm0F AE /1Wiederherstellen des x87-, MMX- und SSE-Zustandsx87, MMX and SSE state = [m]System und Privilegien
fxsavem0F AE /0Sichern des x87-, MMX- und SSE-Zustands[m] = x87, MMX and SSE state (512 bytes)System und Privilegien
fxtractD9 F4Zerlegung von st0 in Exponent und Mantissest0 = exponent of st0; push: st0 = significandGleitkomma (x87)
fyl2xD9 F1st1 mal log2(st0)st1 = st1 * log2(st0); popGleitkomma (x87)
fyl2xp1D9 F9st1 mal log2(st0 + 1)st1 = st1 * log2(st0 + 1); popGleitkomma (x87)
getsec0F 37Befehle der Sicherheitserweiterung (Intel TXT)run the safer-mode function selected by eax (Intel TXT)System und Privilegien
haddpdxmm, xmm/m12866 0F 7C /rAddition benachbarter Doubles (horizontal)dst = (dst[0] + dst[1], dst[2] + dst[3], src[0] + src[1], src[2] + src[3])SSE Gleitkomma
haddpsxmm, xmm/m128F2 0F 7C /rAddition benachbarter Singles (horizontal)dst = (dst[0] + dst[1], dst[2] + dst[3], src[0] + src[1], src[2] + src[3])SSE Gleitkomma
hltF4Anhalten des Prozessors (bis zum nächsten Interrupt)stop until the next interrupt (privileged)System und Privilegien
hsubpdxmm, xmm/m12866 0F 7D /rSubtraktion benachbarter Doubles (horizontal)dst = (dst[0] - dst[1], dst[2] - dst[3], src[0] - src[1], src[2] - src[3])SSE Gleitkomma
hsubpsxmm, xmm/m128F2 0F 7D /rSubtraktion benachbarter Singles (horizontal)dst = (dst[0] - dst[1], dst[2] - dst[3], src[0] - src[1], src[2] - src[3])SSE Gleitkomma
idivax, r/m8F6 /7Division mit Vorzeichen: edx:eax durch den Operanden, Quotient nach eax, Rest nach edxeax = edx:eax / src; edx = edx:eax % src (8 bit: al = ax / src; ah = ax % src); #DE if src = 0 or quotient too big (signed)Flags: – · undefiniert: OF SF ZF AF CF PFArithmetik
eax, r/m32F7 /7
ax, r/m1666 F7 /7
imulr32, r/m32, imm3269 /r idMultiplikation mit Vorzeichen (ein, zwei oder drei Operanden)1 operand: edx:eax = eax * src (signed); 2: dst = dst * src; 3: dst = src * immFlags: OF CF · undefiniert: SF ZF AF PFArithmetik
r16, r/m16, imm1666 69 /r iw
r32, r/m32, imm86B /r ib
r16, r/m16, imm866 6B /r ib
r/m8F6 /5
r/m32F7 /5
r1666 F7 /5
r32, r/m320F AF /r
r16, r/m1666 0F AF /r
inal, imm8E4 ibLesen eines Wertes von einem Ein-/Ausgabeportdst = port[src]Daten kopieren
eax, imm8E5 ib
ax, imm866 E5 ib
al, dxEC
eax, dxED
ax, dx66 ED
incr/m8FE /0Erhöhung um 1 (CF bleibt)dst = dst + 1Flags: OF SF ZF AF PFArithmetik
r/m32FF /0
r/m1666 FF /0
insb6CLesen eines Ports nach [edi], edi läuft weiter[edi] = port[dx]; edi = edi +/- sizeZeichenketten
insd6DLesen eines Ports nach [edi], edi läuft weiter[edi] = port[dx]; edi = edi +/- sizeZeichenketten
insertpsxmm, xmm/m32, imm866 0F 3A 21 /r ibEinfügen eines Singles in xmmdst = dst with one single replaced by one of src (and zeroed ones), chosen by imm8SSE und MMX Datenbewegung
insw66 6DLesen eines Ports nach [edi], edi läuft weiter[edi] = port[dx]; edi = edi +/- sizeZeichenketten
intimm8CD ibAuslösen eines Software-Interruptspush(flags, cs, eip); jump to the handler of vector imm8Flags: IF TFSprünge, Aufrufe und Interrupts
int1F1Auslösen des Debug-Interrupts 1interrupt 1 (debug exception)Sprünge, Aufrufe und Interrupts
int3CCHaltepunkt (Interrupt 3, ein Byte)interrupt 3 (breakpoint)Sprünge, Aufrufe und Interrupts
intoCEInterrupt 4, wenn OF=1if OF = 1 then interrupt 4System und Privilegien
invd0F 08Leeren der Caches ohne Zurückschreiben (privilegiert)empty the caches without writing back (privileged)System und Privilegien
invlpgm0F 01 /7Entwerten eines Eintrags des Adressübersetzungspuffers (TLB)remove the translation of the page of [m] from the TLB (privileged)System und Privilegien
iretdCFRückkehr aus einem Interrupt (32 Bit)eip, cs, flags = pop(); (64 bit and on a change of level: esp, ss = pop())Flags: allSprünge, Aufrufe und Interrupts
iretw66 CFRückkehr aus einem Interrupt (16 Bit)eip, cs, flags = pop(); (64 bit and on a change of level: esp, ss = pop())Flags: allSprünge, Aufrufe und Interrupts
jarel877 cbSprung, wenn ohne Vorzeichen größer (CF=0 und ZF=0)if CF = 0 and ZF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 77 cb
rel320F 87 cd
rel1666 0F 87 cw
jberel876 cbSprung, wenn ohne Vorzeichen kleiner oder gleich (CF=1 oder ZF=1)if CF = 1 or ZF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 76 cb
rel320F 86 cd
rel1666 0F 86 cw
jcrel872 cbSprung, wenn Übertrag, ohne Vorzeichen kleiner (CF=1)if CF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 72 cb
rel320F 82 cd
rel1666 0F 82 cw
jecxzrel8E3 cbSprung, wenn ecx gleich 0 istif ecx == 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 E3 cb
jgrel87F cbSprung, wenn mit Vorzeichen größer (ZF=0 und SF=OF)if ZF = 0 and SF = OF then eip = targetSprünge, Aufrufe und Interrupts
rel866 7F cb
rel320F 8F cd
rel1666 0F 8F cw
jgerel87D cbSprung, wenn mit Vorzeichen größer oder gleich (SF=OF)if SF = OF then eip = targetSprünge, Aufrufe und Interrupts
rel866 7D cb
rel320F 8D cd
rel1666 0F 8D cw
jlrel87C cbSprung, wenn mit Vorzeichen kleiner (SF≠OF)if SF != OF then eip = targetSprünge, Aufrufe und Interrupts
rel866 7C cb
rel320F 8C cd
rel1666 0F 8C cw
jlerel87E cbSprung, wenn mit Vorzeichen kleiner oder gleich (ZF=1 oder SF≠OF)if ZF = 1 or SF != OF then eip = targetSprünge, Aufrufe und Interrupts
rel866 7E cb
rel320F 8E cd
rel1666 0F 8E cw
jmprel32E9 cdSprung zu einer Adresseeip = targetSprünge, Aufrufe und Interrupts
rel1666 E9 cw
rel8EB cb
rel866 EB cb
r/m32FF /4
mFF /5
r/m1666 FF /4
jncrel873 cbSprung, wenn kein Übertrag, ohne Vorzeichen größer oder gleich (CF=0)if CF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 73 cb
rel320F 83 cd
rel1666 0F 83 cw
jnorel871 cbSprung, wenn kein Überlauf (OF=0)if OF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 71 cb
rel320F 81 cd
rel1666 0F 81 cw
jnprel87B cbSprung, wenn Parität ungerade (PF=0)if PF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 7B cb
rel320F 8B cd
rel1666 0F 8B cw
jnsrel879 cbSprung, wenn nicht negativ (SF=0)if SF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 79 cb
rel320F 89 cd
rel1666 0F 89 cw
jnzrel875 cbSprung, wenn ungleich, Ergebnis nicht null (ZF=0)if ZF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 75 cb
rel320F 85 cd
rel1666 0F 85 cw
jorel870 cbSprung, wenn Überlauf (OF=1)if OF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 70 cb
rel320F 80 cd
rel1666 0F 80 cw
jprel87A cbSprung, wenn Parität gerade (PF=1)if PF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 7A cb
rel320F 8A cd
rel1666 0F 8A cw
jsrel878 cbSprung, wenn negativ (SF=1)if SF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 78 cb
rel320F 88 cd
rel1666 0F 88 cw
jzrel874 cbSprung, wenn gleich, Ergebnis null (ZF=1)if ZF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 74 cb
rel320F 84 cd
rel1666 0F 84 cw
lahf9FLaden der Flags nach ahah = SF:ZF:0:AF:0:PF:1:CFFlags
larr32, r32/m160F 02 /rLaden der Zugriffsrechte eines Segmentsdst = access rights of the segment src; ZF = 1 if it is validFlags: ZFSystem und Privilegien
r16, r32/m1666 0F 02 /r
lddquxmm, m128F2 0F F0 /rLaden von 128 Bit ohne Ausrichtung (schnell über Cache-Zeilen)dst = src (128 bits; any alignment)SSE und MMX Datenbewegung
ldmxcsrm0F AE /2Laden des SSE-Steuer- und StatusregistersMXCSR = [m32]SSE und MMX Datenbewegung
ldsr32, mC5 /rLaden eines Far-Zeigers nach ds:Registerdst = [m]; ds = [m + 4]Daten kopieren
r16, m66 C5 /r
lear32, m8D /rBerechnung einer Adresse und Speichern der Adresse, ohne Zugriff auf den Speicherdst = address of src (no memory access)Daten kopieren
r16, m66 8D /r
leaveC9Abbau des Stackrahmens (mov esp, ebp; pop ebp)esp = ebp; ebp = pop()Stack
lesr32, mC4 /rLaden eines Far-Zeigers nach es:Registerdst = [m]; es = [m + 4]Daten kopieren
r16, m66 C4 /r
lfence0F AE /5Schranke für Ladezugriffeall earlier loads are done before later instructionsSchranken und Sonstiges
lgdtm0F 01 /2Laden des Registers der globalen DeskriptortabelleGDTR = [m] (privileged)System und Privilegien
lidtm0F 01 /3Laden des Registers der Interrupt-DeskriptortabelleIDTR = [m] (privileged)System und Privilegien
lldtr/m160F 00 /2Laden des Registers der lokalen DeskriptortabelleLDTR = src (privileged)System und Privilegien
lmswm0F 01 /6Laden des Maschinen-Statuswortes (untere Bits von cr0)CR0 bits 0 to 15 = src (privileged)System und Privilegien
lodsbACLaden von [esi] nach al/ax/eax, esi läuft weiteracc = [esi]; esi = esi +/- size (acc is al, ax or eax)Zeichenketten
lodsdADLaden von [esi] nach al/ax/eax, esi läuft weiteracc = [esi]; esi = esi +/- size (acc is al, ax or eax)Zeichenketten
lodsw66 ADLaden von [esi] nach al/ax/eax, esi läuft weiteracc = [esi]; esi = esi +/- size (acc is al, ax or eax)Zeichenketten
looprel8E2 cbVerringern von ecx und Sprung, solange es nicht 0 istecx = ecx - 1; if ecx != 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 E2 cb
looperel8E1 cbWie loop, aber nur bei ZF=1ecx = ecx - 1; if ecx != 0 and ZF = 1 then eip = targetSprünge, Aufrufe und Interrupts
rel866 E1 cb
loopnerel8E0 cbWie loop, aber nur bei ZF=0ecx = ecx - 1; if ecx != 0 and ZF = 0 then eip = targetSprünge, Aufrufe und Interrupts
rel866 E0 cb
lslr32, r32/m160F 03 /rLaden der Grenze eines Segmentsdst = limit of the segment src; ZF = 1 if it is validFlags: ZFSystem und Privilegien
r16, r32/m1666 0F 03 /r
ltrr/m160F 00 /3Laden des Task-Registerstask register = src (privileged)System und Privilegien
lzcntr32, r/m32F3 0F BD /rZählen der führenden Nullbitsdst = number of leading 0 bits of src (width if src = 0)Flags: ZF CFArithmetik
maskmovdquxmm, xmm66 0F F7 /rSchreiben nur der durch eine Maske gewählten Bytes (xmm)for each byte whose mask bit (the top bit) is 1: [edi + i] = dst[i]SSE und MMX Datenbewegung
maskmovqmm, mm0F F7 /rSchreiben nur der durch eine Maske gewählten Bytes (mm)for each byte whose mask bit (the top bit) is 1: [edi + i] = dst[i]SSE und MMX Datenbewegung
maxpdxmm, xmm/m12866 0F 5F /rMaximum von 2 Doublesfor every element: dst[i] = max(dst[i], src[i])SSE Gleitkomma
maxpsxmm, xmm/m1280F 5F /rMaximum von 4 Singlesfor every element: dst[i] = max(dst[i], src[i])SSE Gleitkomma
maxsdxmm, xmm/m64F2 0F 5F /rMaximum von einem Doubledst[0] = max(dst[0], src[0]); the other elements staySSE Gleitkomma
maxssxmm, xmm/m32F3 0F 5F /rMaximum von einem Singledst[0] = max(dst[0], src[0]); the other elements staySSE Gleitkomma
mfence0F AE /6Schranke für alle Speicherzugriffeall earlier loads and stores are done before later onesSchranken und Sonstiges
minpdxmm, xmm/m12866 0F 5D /rMinimum von 2 Doublesfor every element: dst[i] = min(dst[i], src[i])SSE Gleitkomma
minpsxmm, xmm/m1280F 5D /rMinimum von 4 Singlesfor every element: dst[i] = min(dst[i], src[i])SSE Gleitkomma
minsdxmm, xmm/m64F2 0F 5D /rMinimum von einem Doubledst[0] = min(dst[0], src[0]); the other elements staySSE Gleitkomma
minssxmm, xmm/m32F3 0F 5D /rMinimum von einem Singledst[0] = min(dst[0], src[0]); the other elements staySSE Gleitkomma
monitor0F 01 C8Einrichten der Überwachung einer Adresse für mwaitwatch the address in eax (for mwait)System und Privilegien
monitorx0F 01 FAEinrichten der Überwachung einer Adresse für mwaitwatch the address in eax (for mwait)System und Privilegien
movr/m8, r888 /rKopieren der Quelle in das Zieldst = srcDaten kopieren
r/m32, r3289 /r
r/m16, r1666 89 /r
r8, r/m88A /r
r32, r/m328B /r
r16, r/m1666 8B /r
r32/m16, Sreg8C /r
r16, Sreg66 8C /r
Sreg, r32/m168E /r
r8, imm8B0+rb ib
r32, imm32B8+rd id
r16, imm1666 B8+rw iw
r/m8, imm8C6 /0 ib
r/m32, imm32C7 /0 id
r/m16, imm1666 C7 /0 iw
r32, CRn0F 20 /r
r32, DRn0F 21 /r
CRn, r320F 22 /r
DRn, r320F 23 /r
movapdxmm, xmm/m12866 0F 28 /rKopieren von 2 Double-Floats (128 Bit), Speicher 16-Byte-ausgerichtetdst = src (128 bits; memory must be 16-byte aligned)SSE und MMX Datenbewegung
xmm/m128, xmm66 0F 29 /r
movapsxmm, xmm/m1280F 28 /rKopieren von 4 Single-Floats (128 Bit), Speicher 16-Byte-ausgerichtetdst = src (128 bits; memory must be 16-byte aligned)SSE und MMX Datenbewegung
xmm/m128, xmm0F 29 /r
movber32, m0F 38 F0 /rKopieren mit Umkehren der Bytesdst = reverse_bytes(src)Daten kopieren
r16, m66 0F 38 F0 /r
m, r320F 38 F1 /r
m, r1666 0F 38 F1 /r
movdmm, r/m320F 6E /rKopieren von 32 Bit zwischen Ganzzahl-Register/Speicher und xmm/mmdst = src (32 bits; into xmm / mm the upper bits become 0)SSE und MMX Datenbewegung
xmm, r/m3266 0F 6E /r
r/m32, mm0F 7E /r
r/m32, xmm66 0F 7E /r
movddupxmm, xmm/m64F2 0F 12 /rVerdoppeln des unteren Doubles in beide Hälftendst = (src[63:0], src[63:0])SSE und MMX Datenbewegung
movdq2qmm, xmmF2 0F D6 /rKopieren der unteren Hälfte von xmm nach mmdst = src[63:0] (xmm to mm)SSE und MMX Datenbewegung
movdqaxmm, xmm/m12866 0F 6F /rKopieren von 128 Bit Ganzzahlen, Speicher 16-Byte-ausgerichtetdst = src (128 bits; memory must be 16-byte aligned)SSE und MMX Datenbewegung
xmm/m128, xmm66 0F 7F /r
movdquxmm, xmm/m128F3 0F 6F /rKopieren von 128 Bit Ganzzahlen, beliebig ausgerichtetdst = src (128 bits; any alignment)SSE und MMX Datenbewegung
xmm/m128, xmmF3 0F 7F /r
movhlpsxmm, xmm0F 12 /rKopieren der oberen Hälfte des Quell-xmm nach untendst[63:0] = src[127:64]SSE und MMX Datenbewegung
movhpdxmm, m6466 0F 16 /rKopieren von 1 Double in die obere Hälfte von xmm (oder aus ihr)load: dst[127:64] = [m64]; store: [m64] = src[127:64]SSE und MMX Datenbewegung
m64, xmm66 0F 17 /r
movhpsxmm, m640F 16 /rKopieren von 2 Singles in die obere Hälfte von xmm (oder aus ihr)load: dst[127:64] = [m64]; store: [m64] = src[127:64]SSE und MMX Datenbewegung
m64, xmm0F 17 /r
movlhpsxmm, xmm0F 16 /rKopieren der unteren Hälfte des Quell-xmm nach obendst[127:64] = src[63:0]SSE und MMX Datenbewegung
movlpdxmm, m6466 0F 12 /rKopieren von 1 Double in die untere Hälfte von xmm (oder aus ihr)load: dst[63:0] = [m64]; store: [m64] = src[63:0]SSE und MMX Datenbewegung
m64, xmm66 0F 13 /r
movlpsxmm, m640F 12 /rKopieren von 2 Singles in die untere Hälfte von xmm (oder aus ihr)load: dst[63:0] = [m64]; store: [m64] = src[63:0]SSE und MMX Datenbewegung
m64, xmm0F 13 /r
movmskpdr32, xmm66 0F 50 /rSammeln der Vorzeichenbits von 2 Doubles in ein Registerdst = sign bits of the 2 doubles of src (2 bits)SSE und MMX Datenbewegung
movmskpsr32, xmm0F 50 /rSammeln der Vorzeichenbits von 4 Singles in ein Registerdst = sign bits of the 4 singles of src (4 bits)SSE und MMX Datenbewegung
movntdqm128, xmm66 0F E7 /rSchreiben von 128 Bit am Cache vorbei[dst] = src (past the cache)SSE und MMX Datenbewegung
movntdqaxmm, xmm/m12866 0F 38 2A /rLesen von 128 Bit aus Speicher mit Write-Combiningdst = [src] (from write-combining memory)SSE und MMX Datenbewegung
movntim, r320F C3 /rSchreiben am Cache vorbei (nicht-temporal)[dst] = src (past the cache)Daten kopieren
movntpdm128, xmm66 0F 2B /rSchreiben von 128 Bit am Cache vorbei[dst] = src (past the cache)SSE und MMX Datenbewegung
movntpsm128, xmm0F 2B /rSchreiben von 128 Bit am Cache vorbei[dst] = src (past the cache)SSE und MMX Datenbewegung
movntqm64, mm0F E7 /rSchreiben von 64 Bit (mm) am Cache vorbei[dst] = src (past the cache)SSE und MMX Datenbewegung
movqmm, mm/m640F 6F /rKopieren von 64 Bit (auch zwischen Ganzzahl-Register und xmm/mm)dst = src (64 bits; into xmm the upper half becomes 0)SSE und MMX Datenbewegung
xmm, xmm/m64F3 0F 7E /r
mm/m64, mm0F 7F /r
xmm/m64, xmm66 0F D6 /r
movq2dqxmm, mmF3 0F D6 /rKopieren von mm in die untere Hälfte von xmmdst = (0, src) (mm to xmm)SSE und MMX Datenbewegung
movsbA4Kopieren eines Elements von [esi] nach [edi], esi und edi laufen weiter[edi] = [esi]; esi = esi +/- size; edi = edi +/- size (+ if DF = 0, - if DF = 1); with rep: repeat ecx timesZeichenketten
movsdA5Kopieren eines Double-Floats (bei xmm; ohne Operanden: String-Befehl)dst[63:0] = src[63:0] (from memory: the rest of dst becomes 0); without operands it is the string instructionSSE und MMX Datenbewegung
xmm, xmm/m64F2 0F 10 /r
xmm/m64, xmmF2 0F 11 /r
movshdupxmm, xmm/m128F3 0F 16 /rVerdoppeln der ungeraden Singlesdst = (src[63:32], src[63:32], src[127:96], src[127:96])SSE und MMX Datenbewegung
movsldupxmm, xmm/m128F3 0F 12 /rVerdoppeln der geraden Singlesdst = (src[31:0], src[31:0], src[95:64], src[95:64])SSE und MMX Datenbewegung
movssxmm, xmm/m32F3 0F 10 /rKopieren eines Single-Floatsdst[31:0] = src[31:0] (from memory: the rest of dst becomes 0)SSE und MMX Datenbewegung
xmm/m32, xmmF3 0F 11 /r
movsw66 A5Kopieren eines Elements von [esi] nach [edi], esi und edi laufen weiter[edi] = [esi]; esi = esi +/- size; edi = edi +/- size (+ if DF = 0, - if DF = 1); with rep: repeat ecx timesZeichenketten
movsxr32, r/m80F BE /rKopieren mit Erweitern des Vorzeichens auf die größere Breitedst = sext(src)Daten kopieren
r16, r/m866 0F BE /r
r32, r/m160F BF /r
r16, r/m1666 0F BF /r
movupdxmm, xmm/m12866 0F 10 /rKopieren von 2 Double-Floats (128 Bit), beliebig ausgerichtetdst = src (128 bits; any alignment)SSE und MMX Datenbewegung
xmm/m128, xmm66 0F 11 /r
movupsxmm, xmm/m1280F 10 /rKopieren von 4 Single-Floats (128 Bit), beliebig ausgerichtetdst = src (128 bits; any alignment)SSE und MMX Datenbewegung
xmm/m128, xmm0F 11 /r
movzxr32, r/m80F B6 /rKopieren mit Auffüllen der oberen Hälfte durch Nullen (ohne Vorzeichen)dst = zext(src)Daten kopieren
r16, r/m866 0F B6 /r
r32, r/m160F B7 /r
r16, r/m1666 0F B7 /r
mpsadbwxmm, xmm/m128, imm866 0F 3A 42 /r ibSummen absoluter Differenzen von Bytes (Bewegungssuche)dst[i] = sums of absolute byte differences of blocks chosen by imm8SSE und MMX Ganzzahlen
mulal, r/m8F6 /4Multiplikation ohne Vorzeichen, das Ergebnis ist doppelt so breit (edx:eax)edx:eax = eax * src (8 bit: ax = al * src; 16: dx:ax; 32: edx:eax)Flags: OF CF · undefiniert: SF ZF AF PFArithmetik
eax, r/m32F7 /4
ax, r/m1666 F7 /4
mulpdxmm, xmm/m12866 0F 59 /rMultiplikation von 2 Doublesfor every element: dst[i] = dst[i] * src[i] (double)SSE Gleitkomma
mulpsxmm, xmm/m1280F 59 /rMultiplikation von 4 Singlesfor every element: dst[i] = dst[i] * src[i] (single)SSE Gleitkomma
mulsdxmm, xmm/m64F2 0F 59 /rMultiplikation von einem Doubledst[0] = dst[0] * src[0] (double); the other elements staySSE Gleitkomma
mulssxmm, xmm/m32F3 0F 59 /rMultiplikation von einem Singledst[0] = dst[0] * src[0] (single); the other elements staySSE Gleitkomma
mwait0F 01 C9Warten auf eine Änderung der überwachten Adressewait until the watched address is written or an interrupt comesSystem und Privilegien
mwaitx0F 01 FBWarten auf eine Änderung der überwachten Adressewait until the watched address is written or an interrupt comesSystem und Privilegien
negr/m8F6 /3Negation (Zweierkomplement)dst = 0 - dst; CF = (dst != 0)Flags: OF SF ZF AF CF PFArithmetik
r/m32F7 /3
r/m1666 F7 /3
nop90Keine Operationno operationSchranken und Sonstiges
r/m320F 19 /r
r/m1666 0F 19 /r
r/m320F 1A /r
r/m1666 0F 1A /r
r/m320F 1B /r
r/m1666 0F 1B /r
r/m320F 1C /r
r/m1666 0F 1C /r
r/m320F 1D /r
r/m1666 0F 1D /r
r/m320F 1E /r
r/m1666 0F 1E /r
r32F3 0F 1E /0
r32F3 0F 1E /2
r32F3 0F 1E /3
r32F3 0F 1E /4
r32F3 0F 1E /5
r32F3 0F 1E /6
eaxF3 0F 1E F8
ebpF3 0F 1E FD
ecxF3 0F 1E F9
ediF3 0F 1E FF
esiF3 0F 1E FE
espF3 0F 1E FC
r/m320F 1F /r
r/m1666 0F 1F /r
notr/m8F6 /2Umkehrung aller Bits (Einerkomplement)dst = ~dstLogik und Bits
r/m32F7 /2
r/m1666 F7 /2
orr/m8, r808 /rBitweise ODER-Verknüpfungdst = dst OR src; CF = OF = 0Flags: OF SF ZF CF PF · undefiniert: AFLogik und Bits
r/m32, r3209 /r
r/m16, r1666 09 /r
r8, r/m80A /r
r32, r/m320B /r
r16, r/m1666 0B /r
al, imm80C ib
eax, imm320D id
ax, imm1666 0D iw
r/m8, imm880 /1 ib
r/m32, imm3281 /1 id
r/m16, imm1666 81 /1 iw
r/m8, imm882 /1 ib
r/m32, imm883 /1 ib
r/m16, imm866 83 /1 ib
orpdxmm, xmm/m12866 0F 56 /rBitweise ODER-Verknüpfungdst = dst OR srcSSE Gleitkomma
orpsxmm, xmm/m1280F 56 /rBitweise ODER-Verknüpfungdst = dst OR srcSSE Gleitkomma
outimm8, alE6 ibSchreiben eines Wertes auf einen Ein-/Ausgabeportport[dst] = srcDaten kopieren
imm8, eaxE7 ib
imm8, ax66 E7 ib
dx, alEE
dx, eaxEF
dx, ax66 EF
outsb6ESchreiben von [esi] auf einen Port, esi läuft weiterport[dx] = [esi]; esi = esi +/- sizeZeichenketten
outsd6FSchreiben von [esi] auf einen Port, esi läuft weiterport[dx] = [esi]; esi = esi +/- sizeZeichenketten
outsw66 6FSchreiben von [esi] auf einen Port, esi läuft weiterport[dx] = [esi]; esi = esi +/- sizeZeichenketten
pabsbmm, mm/m640F 38 1C /rBetrag von Bytesfor every 8 bit element: dst[i] = abs(src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 1C /r
pabsdmm, mm/m640F 38 1E /rBetrag von 32-Bit-Elementenfor every 32 bit element: dst[i] = abs(src[i])SSE und MMX Ganzzahlen
xmm, xmm/m6466 0F 38 1E /r
pabswmm, mm/m640F 38 1D /rBetrag von 16-Bit-Elementenfor every 16 bit element: dst[i] = abs(src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 1D /r
packssdwmm, mm/m640F 6B /rPacken von 32 in 16 Bit mit Vorzeichen (gesättigt)dst = (sat16_s(dst[i]) ..., sat16_s(src[i]) ...) (32 to 16 bit, signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 6B /r
packsswbmm, mm/m640F 63 /rPacken von 16 in 8 Bit mit Vorzeichen (gesättigt)dst = (sat8_s(dst[i]) ..., sat8_s(src[i]) ...) (16 to 8 bit, signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 63 /r
packusdwxmm, xmm/m12866 0F 38 2B /rPacken von 32 in 16 Bit ohne Vorzeichen (gesättigt)dst = (sat16_u(dst[i]) ..., sat16_u(src[i]) ...) (32 to 16 bit, unsigned)SSE und MMX Ganzzahlen
packuswbmm, mm/m640F 67 /rPacken von 16 in 8 Bit ohne Vorzeichen (gesättigt)dst = (sat8_u(dst[i]) ..., sat8_u(src[i]) ...) (16 to 8 bit, unsigned)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 67 /r
paddbmm, mm/m640F FC /rAddition von Bytesfor every 8 bit element: dst[i] = dst[i] + src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F FC /r
padddmm, mm/m640F FE /rAddition von 32-Bit-Elementenfor every 32 bit element: dst[i] = dst[i] + src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F FE /r
paddqmm, mm/m640F D4 /rAddition von 64-Bit-Elementenfor every 64 bit element: dst[i] = dst[i] + src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F D4 /r
paddsbmm, mm/m640F EC /rAddition von Bytes (mit Vorzeichen, gesättigt)for every 8 bit element: dst[i] = sat_s(dst[i] + src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F EC /r
paddswmm, mm/m640F ED /rAddition von 16-Bit-Elementen (mit Vorzeichen, gesättigt)for every 16 bit element: dst[i] = sat_s(dst[i] + src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F ED /r
paddusbmm, mm/m640F DC /rAddition von Bytes (ohne Vorzeichen, gesättigt)for every 8 bit element: dst[i] = sat_u(dst[i] + src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F DC /r
padduswmm, mm/m640F DD /rAddition von 16-Bit-Elementen (ohne Vorzeichen, gesättigt)for every 16 bit element: dst[i] = sat_u(dst[i] + src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F DD /r
paddwmm, mm/m640F FD /rAddition von 16-Bit-Elementenfor every 16 bit element: dst[i] = dst[i] + src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F FD /r
palignrmm, mm/m64, imm80F 3A 0F /r ibVerbinden zweier Register und Schieben um eine Byte-Zahldst = low part of (dst:src >> (imm8 * 8 bits))SSE und MMX Ganzzahlen
xmm, xmm/m128, imm866 0F 3A 0F /r ib
pandmm, mm/m640F DB /rBitweise UND-Verknüpfungdst = dst & srcSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F DB /r
pandnmm, mm/m640F DF /rBitweise Verknüpfung: NICHT Ziel UND Quelledst = ~dst & srcSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F DF /r
pauseF3 90Hinweis in Warteschleifen (spart Strom, hilft bei Hyper-Threading)hint: this is a wait loop (no change)Schranken und Sonstiges
pavgbmm, mm/m640F E0 /rMittelwert von Bytes (gerundet)dst[i] = (dst[i] + src[i] + 1) >> 1 (unsigned)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F E0 /r
pavgwmm, mm/m640F E3 /rMittelwert von 16-Bit-Elementen (gerundet)dst[i] = (dst[i] + src[i] + 1) >> 1 (unsigned)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F E3 /r
pblendvbxmm, xmm/m128, xmm066 0F 38 10 /rAuswahl von Bytes nach den Vorzeichenbits von xmm0for every element: dst[i] = (sign bit of xmm0[i]) ? src[i] : dst[i]SSE und MMX Ganzzahlen
pblendwxmm, xmm/m128, imm866 0F 3A 0E /r ibAuswahl von 16-Bit-Elementen nach einer Maskefor every element: dst[i] = bit i of imm8 ? src[i] : dst[i]SSE und MMX Ganzzahlen
pclmulqdqxmm, xmm/m128, imm866 0F 3A 44 /r ibMultiplikation ohne Übertrag (Galois-Feld, für CRC und GCM)dst = carry-less product of one quadword of dst and one of src (chosen by imm8)Kryptografie
pcmpeqbmm, mm/m640F 74 /rVergleich auf gleich (Bytes), Ergebnis ist eine Maskefor every 8 bit element: dst[i] = (dst[i] == src[i]) ? all 1 bits : 0SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 74 /r
pcmpeqdmm, mm/m640F 76 /rVergleich auf gleich (32-Bit-Elementen), Ergebnis ist eine Maskefor every 32 bit element: dst[i] = (dst[i] == src[i]) ? all 1 bits : 0SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 76 /r
pcmpeqqxmm, xmm/m12866 0F 38 29 /rVergleich auf gleich (64-Bit-Elementen), Ergebnis ist eine Maskefor every 64 bit element: dst[i] = (dst[i] == src[i]) ? all 1 bits : 0SSE und MMX Ganzzahlen
pcmpeqwmm, mm/m640F 75 /rVergleich auf gleich (16-Bit-Elementen), Ergebnis ist eine Maskefor every 16 bit element: dst[i] = (dst[i] == src[i]) ? all 1 bits : 0SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 75 /r
pcmpestrixmm, xmm/m128, imm866 0F 3A 61 /r ibVergleich von Zeichenketten (explizite Längen), Ergebnis ist ein IndexECX = index of the match of the strings dst, src (lengths in eax, edx; mode imm8)Flags: OF SF ZF AF CF PFSSE und MMX Ganzzahlen
pcmpestrmxmm, xmm/m128, imm866 0F 3A 60 /r ibVergleich von Zeichenketten (explizite Längen), Ergebnis ist eine Maskexmm0 = mask of the matches of the strings dst, src (lengths in eax, edx; mode imm8)Flags: OF SF ZF AF CF PFSSE und MMX Ganzzahlen
pcmpgtbmm, mm/m640F 64 /rVergleich auf größer, mit Vorzeichen (Bytes), Ergebnis ist eine Maskefor every 8 bit element: dst[i] = (dst[i] > src[i]) ? all 1 bits : 0 (signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 64 /r
pcmpgtdmm, mm/m640F 66 /rVergleich auf größer, mit Vorzeichen (32-Bit-Elementen), Ergebnis ist eine Maskefor every 32 bit element: dst[i] = (dst[i] > src[i]) ? all 1 bits : 0 (signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 66 /r
pcmpgtqxmm, xmm/m12866 0F 38 37 /rVergleich auf größer, mit Vorzeichen (64-Bit-Elementen), Ergebnis ist eine Maskefor every 64 bit element: dst[i] = (dst[i] > src[i]) ? all 1 bits : 0 (signed)SSE und MMX Ganzzahlen
pcmpgtwmm, mm/m640F 65 /rVergleich auf größer, mit Vorzeichen (16-Bit-Elementen), Ergebnis ist eine Maskefor every 16 bit element: dst[i] = (dst[i] > src[i]) ? all 1 bits : 0 (signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 65 /r
pcmpistrixmm, xmm/m128, imm866 0F 3A 63 /r ibVergleich von Zeichenketten (mit Ende 0), Ergebnis ist ein IndexECX = index of the match of the 0-terminated strings dst, src (mode imm8)Flags: OF SF ZF AF CF PFSSE und MMX Ganzzahlen
pcmpistrmxmm, xmm/m128, imm866 0F 3A 62 /r ibVergleich von Zeichenketten (mit Ende 0), Ergebnis ist eine Maskexmm0 = mask of the matches of the 0-terminated strings dst, src (mode imm8)Flags: OF SF ZF AF CF PFSSE und MMX Ganzzahlen
pextrbr32/m8, xmm, imm866 0F 3A 14 /r ibHerausholen eines Elements aus xmm in ein Registerdst = element number imm8 of srcSSE und MMX Datenbewegung
pextrdr/m32, xmm, imm866 0F 3A 16 /r ibHerausholen eines Elements aus xmm in ein Registerdst = element number imm8 of srcSSE und MMX Datenbewegung
pextrwr32, mm, imm80F C5 /r ibHerausholen eines Elements aus xmm in ein Registerdst = element number imm8 of srcSSE und MMX Datenbewegung
r32, xmm, imm866 0F C5 /r ib
r32/m16, xmm, imm866 0F 3A 15 /r ib
phadddmm, mm/m640F 38 02 /rAddition benachbarter 32-Bit-Elemente (horizontal)dst = (dst[0] + dst[1], dst[2] + dst[3], ..., src[0] + src[1], ...)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 02 /r
phaddswmm, mm/m640F 38 03 /rAddition benachbarter 16-Bit-Elemente (horizontal), gesättigtdst = (dst[0] + dst[1], dst[2] + dst[3], ..., src[0] + src[1], ...) (saturating)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 03 /r
phaddwmm, mm/m640F 38 01 /rAddition benachbarter 16-Bit-Elemente (horizontal)dst = (dst[0] + dst[1], dst[2] + dst[3], ..., src[0] + src[1], ...)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 01 /r
phminposuwxmm, xmm/m12866 0F 38 41 /rSuche des kleinsten 16-Bit-Elements samt Positiondst = (smallest unsigned word of src, its index, 0 ...)SSE und MMX Ganzzahlen
phsubdmm, mm/m640F 38 06 /rSubtraktion benachbarter 32-Bit-Elemente (horizontal)dst = (dst[0] - dst[1], dst[2] - dst[3], ..., src[0] - src[1], ...)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 06 /r
phsubswmm, mm/m640F 38 07 /rSubtraktion benachbarter 16-Bit-Elemente (horizontal), gesättigtdst = (dst[0] - dst[1], dst[2] - dst[3], ..., src[0] - src[1], ...) (saturating)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 07 /r
phsubwmm, mm/m640F 38 05 /rSubtraktion benachbarter 16-Bit-Elemente (horizontal)dst = (dst[0] - dst[1], dst[2] - dst[3], ..., src[0] - src[1], ...)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 05 /r
pinsrbxmm, r32/m8, imm866 0F 3A 20 /r ibEinfügen eines Elements aus einem Register in xmmdst = dst with element number imm8 replaced by srcSSE und MMX Datenbewegung
pinsrdxmm, r/m32, imm866 0F 3A 22 /r ibEinfügen eines Elements aus einem Register in xmmdst = dst with element number imm8 replaced by srcSSE und MMX Datenbewegung
pinsrwmm, r32/m16, imm80F C4 /r ibEinfügen eines Elements aus einem Register in xmmdst = dst with element number imm8 replaced by srcSSE und MMX Datenbewegung
xmm, r32/m16, imm866 0F C4 /r ib
pmaddubswmm, mm/m640F 38 04 /rMultiplikation von Bytepaaren und Addition (mit Sättigung)dst[i] = sat16(dst_u8[2i] * src_s8[2i] + dst_u8[2i+1] * src_s8[2i+1])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 04 /r
pmaddwdmm, mm/m640F F5 /rMultiplikation von 16-Bit-Paaren und Addition zu 32 Bitdst[i] = dst_s16[2i] * src_s16[2i] + dst_s16[2i+1] * src_s16[2i+1] (32 bit)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F F5 /r
pmaxsbxmm, xmm/m12866 0F 38 3C /rMaximum von Bytes (mit Vorzeichen)for every 8 bit element: dst[i] = max(dst[i], src[i]) (signed)SSE und MMX Ganzzahlen
pmaxsdxmm, xmm/m6466 0F 38 3D /rMaximum von 32-Bit-Elementen (mit Vorzeichen)for every 32 bit element: dst[i] = max(dst[i], src[i]) (signed)SSE und MMX Ganzzahlen
pmaxswmm, mm/m640F EE /rMaximum von 16-Bit-Elementen (mit Vorzeichen)for every 16 bit element: dst[i] = max(dst[i], src[i]) (signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F EE /r
pmaxubmm, mm/m640F DE /rMaximum von Bytes (ohne Vorzeichen)for every 8 bit element: dst[i] = max(dst[i], src[i]) (unsigned)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F DE /r
pmaxudxmm, xmm/m12866 0F 38 3F /rMaximum von 32-Bit-Elementen (ohne Vorzeichen)for every 32 bit element: dst[i] = max(dst[i], src[i]) (unsigned)SSE und MMX Ganzzahlen
pmaxuwxmm, xmm/m12866 0F 38 3E /rMaximum von 16-Bit-Elementen (ohne Vorzeichen)for every 16 bit element: dst[i] = max(dst[i], src[i]) (unsigned)SSE und MMX Ganzzahlen
pminsbxmm, xmm/m12866 0F 38 38 /rMinimum von Bytes (mit Vorzeichen)for every 8 bit element: dst[i] = min(dst[i], src[i]) (signed)SSE und MMX Ganzzahlen
pminsdxmm, xmm/m6466 0F 38 39 /rMinimum von 32-Bit-Elementen (mit Vorzeichen)for every 32 bit element: dst[i] = min(dst[i], src[i]) (signed)SSE und MMX Ganzzahlen
pminswmm, mm/m640F EA /rMinimum von 16-Bit-Elementen (mit Vorzeichen)for every 16 bit element: dst[i] = min(dst[i], src[i]) (signed)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F EA /r
pminubmm, mm/m640F DA /rMinimum von Bytes (ohne Vorzeichen)for every 8 bit element: dst[i] = min(dst[i], src[i]) (unsigned)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F DA /r
pminudxmm, xmm/m12866 0F 38 3B /rMinimum von 32-Bit-Elementen (ohne Vorzeichen)for every 32 bit element: dst[i] = min(dst[i], src[i]) (unsigned)SSE und MMX Ganzzahlen
pminuwxmm, xmm/m12866 0F 38 3A /rMinimum von 16-Bit-Elementen (ohne Vorzeichen)for every 16 bit element: dst[i] = min(dst[i], src[i]) (unsigned)SSE und MMX Ganzzahlen
pmovmskbr32, mm0F D7 /rSammeln der Vorzeichenbits der Bytes in ein Registerdst = the top bits of all bytes of srcSSE und MMX Datenbewegung
r32, xmm66 0F D7 /r
pmovsxbdxmm, xmm/m3266 0F 38 21 /rErweiterung von Bytes zu 32 Bit (mit Vorzeichen)for every element: dst[i] = sext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovsxbqxmm, xmm/m1666 0F 38 22 /rErweiterung von Bytes zu 64 Bit (mit Vorzeichen)for every element: dst[i] = sext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovsxbwxmm, xmm/m6466 0F 38 20 /rErweiterung von Bytes zu 16 Bit (mit Vorzeichen)for every element: dst[i] = sext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovsxdqxmm, xmm/m6466 0F 38 25 /rErweiterung von 32-Bit-Elementen zu 64 Bit (mit Vorzeichen)for every element: dst[i] = sext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovsxwdxmm, xmm/m6466 0F 38 23 /rErweiterung von 16-Bit-Elementen zu 32 Bit (mit Vorzeichen)for every element: dst[i] = sext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovsxwqxmm, xmm/m3266 0F 38 24 /rErweiterung von 16-Bit-Elementen zu 64 Bit (mit Vorzeichen)for every element: dst[i] = sext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovzxbdxmm, xmm/m3266 0F 38 31 /rErweiterung von Bytes zu 32 Bit (mit Nullen)for every element: dst[i] = zext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovzxbqxmm, xmm/m1666 0F 38 32 /rErweiterung von Bytes zu 64 Bit (mit Nullen)for every element: dst[i] = zext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovzxbwxmm, xmm/m6466 0F 38 30 /rErweiterung von Bytes zu 16 Bit (mit Nullen)for every element: dst[i] = zext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovzxdqxmm, xmm/m6466 0F 38 35 /rErweiterung von 32-Bit-Elementen zu 64 Bit (mit Nullen)for every element: dst[i] = zext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovzxwdxmm, xmm/m6466 0F 38 33 /rErweiterung von 16-Bit-Elementen zu 32 Bit (mit Nullen)for every element: dst[i] = zext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmovzxwqxmm, xmm/m3266 0F 38 34 /rErweiterung von 16-Bit-Elementen zu 64 Bit (mit Nullen)for every element: dst[i] = zext(src[i]) to the wider sizeSSE und MMX Ganzzahlen
pmuldqxmm, xmm/m12866 0F 38 28 /rMultiplikation von 32 Bit mit Vorzeichen zu 64 Bitdst[i] = dst_s32[2i] * src_s32[2i] (64 bit results)SSE und MMX Ganzzahlen
pmulhrswmm, mm/m640F 38 0B /rMultiplikation von 16 Bit mit Vorzeichen, gerundetdst[i] = (dst[i] * src[i] >> 14 + 1) >> 1 (signed 16 bit, rounded)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 0B /r
pmulhuwmm, mm/m640F E4 /rMultiplikation von 16 Bit ohne Vorzeichen, obere Hälfte bleibtdst[i] = (dst[i] * src[i]) >> 16 (unsigned 16 bit)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F E4 /r
pmulhwmm, mm/m640F E5 /rMultiplikation von 16 Bit mit Vorzeichen, obere Hälfte bleibtdst[i] = (dst[i] * src[i]) >> 16 (signed 16 bit)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F E5 /r
pmulldxmm, xmm/m12866 0F 38 40 /rMultiplikation von 32 Bit, untere Hälfte bleibtdst[i] = low 32 bits of dst[i] * src[i]SSE und MMX Ganzzahlen
pmullwmm, mm/m640F D5 /rMultiplikation von 16 Bit, untere Hälfte bleibtdst[i] = low 16 bits of dst[i] * src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F D5 /r
pmuludqmm, mm/m640F F4 /rMultiplikation von 32 Bit ohne Vorzeichen zu 64 Bitdst[i] = dst_u32[2i] * src_u32[2i] (64 bit results)SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F F4 /r
popes07Holen eines Wertes vom Stackdst = [esp]; esp = esp + 4 (16 bit: 2 bytes)Stack
ss17
ds1F
r3258+rd
r1666 58+rw
r/m328F /0
r/m1666 8F /0
fs0F A1
gs0F A9
popad61Holen aller 32-Bit-Register vom Stackedi, esi, ebp = pop(); (esp is skipped); ebx, edx, ecx, eax = pop()Stack
popaw66 61Holen aller 16-Bit-Register vom Stackdi, si, bp = pop(); (sp is skipped); bx, dx, cx, ax = pop()Stack
popcntr32, r/m32F3 0F B8 /rZählen der gesetzten Bitsdst = number of 1 bits in srcFlags: OF SF ZF AF CF PFArithmetik
popfd9DHolen des Flag-Registers (32 Bit) vom Stackeflags = pop() (privileged bits stay)Flags: allStack
popfw66 9DHolen des Flag-Registers vom Stackflags = pop() (privileged bits stay)Flags: allStack
pormm, mm/m640F EB /rBitweise ODER-Verknüpfungdst = dst OR srcSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F EB /r
prefetchm0F 0D /0Vorab-Laden einer Cache-Zeile (w: zum Schreiben)load the cache line of [m] into the cache (a hint, no change of the program)System und Privilegien
m0F 0D /2
m0F 0D /3
m0F 0D /4
m0F 0D /5
m0F 0D /6
m0F 0D /7
prefetchntam0F 18 /0Vorab-Laden, möglichst ohne den Cache zu verdrängenload the cache line of [m] into the cache (a hint, no change of the program)System und Privilegien
prefetcht0m0F 18 /1Vorab-Laden in alle Cache-Ebenenload the cache line of [m] into the cache (a hint, no change of the program)System und Privilegien
prefetcht1m0F 18 /2Vorab-Laden in die Cache-Ebene 2 und höherload the cache line of [m] into the cache (a hint, no change of the program)System und Privilegien
prefetcht2m0F 18 /3Vorab-Laden in die Cache-Ebene 3load the cache line of [m] into the cache (a hint, no change of the program)System und Privilegien
prefetchwm0F 0D /1Vorab-Laden einer Cache-Zeile (w: zum Schreiben)load the cache line of [m] into the cache (a hint, no change of the program)System und Privilegien
psadbwmm, mm/m640F F6 /rSumme der absoluten Byte-Differenzendst[i] = sum of abs(dst_u8[j] - src_u8[j]) over 8 bytesSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F F6 /r
pshufbmm, mm/m640F 38 00 /rMischen von Bytes nach einer Tabelle im Quellregisterdst[i] = (src[i] has top bit 1) ? 0 : dst[src[i] & 15]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 00 /r
pshufdxmm, xmm/m128, imm866 0F 70 /r ibMischen der 32-Bit-Elemente nach einer Vorgabedst = (src[sel0], src[sel1], src[sel2], src[sel3]); sel = bit pairs of imm8SSE und MMX Ganzzahlen
pshufhwxmm, xmm/m128, imm8F3 0F 70 /r ibMischen der oberen vier 16-Bit-Elementedst[63:0] = src[63:0]; the upper four words are chosen from src[127:64] by imm8SSE und MMX Ganzzahlen
pshuflwxmm, xmm/m128, imm8F2 0F 70 /r ibMischen der unteren vier 16-Bit-Elementedst[127:64] = src[127:64]; the lower four words are chosen from src[63:0] by imm8SSE und MMX Ganzzahlen
pshufwmm, mm/m64, imm80F 70 /r ibMischen von vier 16-Bit-Elementen (mm)dst = four words chosen from src by imm8 (mm)SSE und MMX Ganzzahlen
psignbmm, mm/m640F 38 08 /rÜbernahme des Vorzeichens der Quelle für Bytesfor every 8 bit element: dst[i] = src[i] < 0 ? -dst[i] : (src[i] == 0 ? 0 : dst[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 08 /r
psigndmm, mm/m640F 38 0A /rÜbernahme des Vorzeichens der Quelle für 32-Bit-Elementenfor every 32 bit element: dst[i] = src[i] < 0 ? -dst[i] : (src[i] == 0 ? 0 : dst[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 0A /r
psignwmm, mm/m640F 38 09 /rÜbernahme des Vorzeichens der Quelle für 16-Bit-Elementenfor every 16 bit element: dst[i] = src[i] < 0 ? -dst[i] : (src[i] == 0 ? 0 : dst[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 38 09 /r
pslldmm, imm80F 72 /6 ibSchieben von 32-Bit-Elementen nach linksfor every 32 bit element: dst[i] = dst[i] << count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 72 /6 ib
mm, mm/m640F F2 /r
xmm, xmm/m12866 0F F2 /r
pslldqxmm, imm866 0F 73 /7 ibSchieben des ganzen Registers um Bytes nach linksdst = dst << (imm8 * 8 bits) (the whole register, zeros come in)SSE und MMX Ganzzahlen
psllqmm, imm80F 73 /6 ibSchieben von 64-Bit-Elementen nach linksfor every 64 bit element: dst[i] = dst[i] << count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 73 /6 ib
mm, mm/m640F F3 /r
xmm, xmm/m12866 0F F3 /r
psllwmm, imm80F 71 /6 ibSchieben von 16-Bit-Elementen nach linksfor every 16 bit element: dst[i] = dst[i] << count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 71 /6 ib
mm, mm/m640F F1 /r
xmm, xmm/m12866 0F F1 /r
psradmm, imm80F 72 /4 ibSchieben von 32-Bit-Elementen nach rechts (arithmetisch)for every 32 bit element: dst[i] = dst[i] >>s count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 72 /4 ib
mm, mm/m640F E2 /r
xmm, xmm/m12866 0F E2 /r
psrawmm, imm80F 71 /4 ibSchieben von 16-Bit-Elementen nach rechts (arithmetisch)for every 16 bit element: dst[i] = dst[i] >>s count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 71 /4 ib
mm, mm/m640F E1 /r
xmm, xmm/m12866 0F E1 /r
psrldmm, imm80F 72 /2 ibSchieben von 32-Bit-Elementen nach rechts (logisch)for every 32 bit element: dst[i] = dst[i] >> count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 72 /2 ib
mm, mm/m640F D2 /r
xmm, xmm/m12866 0F D2 /r
psrldqxmm, imm866 0F 73 /3 ibSchieben des ganzen Registers um Bytes nach rechtsdst = dst >> (imm8 * 8 bits) (the whole register, zeros come in)SSE und MMX Ganzzahlen
psrlqmm, imm80F 73 /2 ibSchieben von 64-Bit-Elementen nach rechts (logisch)for every 64 bit element: dst[i] = dst[i] >> count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 73 /2 ib
mm, mm/m640F D3 /r
xmm, xmm/m12866 0F D3 /r
psrlwmm, imm80F 71 /2 ibSchieben von 16-Bit-Elementen nach rechts (logisch)for every 16 bit element: dst[i] = dst[i] >> count (count = src or imm8)SSE und MMX Ganzzahlen
xmm, imm866 0F 71 /2 ib
mm, mm/m640F D1 /r
xmm, xmm/m12866 0F D1 /r
psubbmm, mm/m640F F8 /rSubtraktion von Bytesfor every 8 bit element: dst[i] = dst[i] - src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F F8 /r
psubdmm, mm/m640F FA /rSubtraktion von 32-Bit-Elementenfor every 32 bit element: dst[i] = dst[i] - src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F FA /r
psubqmm, mm/m640F FB /rSubtraktion von 64-Bit-Elementenfor every 64 bit element: dst[i] = dst[i] - src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F FB /r
psubsbmm, mm/m640F E8 /rSubtraktion von Bytes (mit Vorzeichen, gesättigt)for every 8 bit element: dst[i] = sat_s(dst[i] - src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F E8 /r
psubswmm, mm/m640F E9 /rSubtraktion von 16-Bit-Elementen (mit Vorzeichen, gesättigt)for every 16 bit element: dst[i] = sat_s(dst[i] - src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F E9 /r
psubusbmm, mm/m640F D8 /rSubtraktion von Bytes (ohne Vorzeichen, gesättigt)for every 8 bit element: dst[i] = sat_u(dst[i] - src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F D8 /r
psubuswmm, mm/m640F D9 /rSubtraktion von 16-Bit-Elementen (ohne Vorzeichen, gesättigt)for every 16 bit element: dst[i] = sat_u(dst[i] - src[i])SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F D9 /r
psubwmm, mm/m640F F9 /rSubtraktion von 16-Bit-Elementenfor every 16 bit element: dst[i] = dst[i] - src[i]SSE und MMX Ganzzahlen
xmm, xmm/m12866 0F F9 /r
ptestxmm, xmm/m12866 0F 38 17 /rBit-Test (setzt ZF und CF)ZF = ((dst & src) == 0); CF = ((~dst & src) == 0); OF SF AF PF = 0Flags: OF SF ZF AF CF PFSSE und MMX Ganzzahlen
punpckhbwmm, mm/m640F 68 /rVerschränken der oberen Bytes zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the high half of the elementsSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 68 /r
punpckhdqmm, mm/m640F 6A /rVerschränken der oberen 32-Bit-Elemente zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the high half of the elementsSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 6A /r
punpckhqdqxmm, xmm/m12866 0F 6D /rVerschränken der oberen 64-Bit-Elemente zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the high half of the elementsSSE und MMX Ganzzahlen
punpckhwdmm, mm/m640F 69 /rVerschränken der oberen 16-Bit-Elemente zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the high half of the elementsSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 69 /r
punpcklbwmm, mm/m640F 60 /rVerschränken der unteren Bytes zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the low half of the elementsSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 60 /r
punpckldqmm, mm/m640F 62 /rVerschränken der unteren 32-Bit-Elemente zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the low half of the elementsSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 62 /r
punpcklqdqxmm, xmm/m12866 0F 6C /rVerschränken der unteren 64-Bit-Elemente zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the low half of the elementsSSE und MMX Ganzzahlen
punpcklwdmm, mm/m640F 61 /rVerschränken der unteren 16-Bit-Elemente zweier Registerdst = (dst[0], src[0], dst[1], src[1], ...) of the low half of the elementsSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F 61 /r
pushes06Ablegen eines Wertes auf dem Stackesp = esp - 4; [esp] = src (16 bit: 2 bytes)Stack
cs0E
ss16
ds1E
r3250+rd
r1666 50+rw
imm3268 id
imm1666 68 iw
imm86A ib
r/m32FF /6
r/m1666 FF /6
fs0F A0
gs0F A8
pushad60Ablegen aller 32-Bit-Register auf dem Stacktmp = esp; push(eax, ecx, edx, ebx, tmp, ebp, esi, edi)Stack
pushaw66 60Ablegen aller 16-Bit-Register auf dem Stacktmp = sp; push(ax, cx, dx, bx, tmp, bp, si, di)Stack
pushfd9CAblegen des Flag-Registers (32 Bit) auf dem Stackpush(eflags)Stack
pushfw66 9CAblegen des Flag-Registers auf dem Stackpush(flags)Stack
pxormm, mm/m640F EF /rBitweise exklusive ODER-Verknüpfung (pxor x, x löscht)dst = dst ^ srcSSE und MMX Ganzzahlen
xmm, xmm/m12866 0F EF /r
rclr/m8, imm8C0 /2 ibRotation nach links durch das Carry-Flagrotate_left(CF:dst, count) as one value of width + 1 bitsFlags: OF CFSchieben und Rotieren
r/m32, imm8C1 /2 ib
r/m16, imm866 C1 /2 ib
r/m8, 1D0 /2
r/m32, 1D1 /2
r/m16, 166 D1 /2
r/m8, clD2 /2
r/m32, clD3 /2
r/m16, cl66 D3 /2
rcppsxmm, xmm/m1280F 53 /rKehrwert (angenähert) von 4 Singlesfor every element: dst[i] = 1 / src[i] (approximate)SSE Gleitkomma
rcpssxmm, xmm/m32F3 0F 53 /rKehrwert (angenähert) von einem Singledst[0] = 1 / src[0] (approximate); the other elements staySSE Gleitkomma
rcrr/m8, imm8C0 /3 ibRotation nach rechts durch das Carry-Flagrotate_right(CF:dst, count) as one value of width + 1 bitsFlags: OF CFSchieben und Rotieren
r/m32, imm8C1 /3 ib
r/m16, imm866 C1 /3 ib
r/m8, 1D0 /3
r/m32, 1D1 /3
r/m16, 166 D1 /3
r/m8, clD2 /3
r/m32, clD3 /3
r/m16, cl66 D3 /3
rdfsbaser32F3 0F AE /0Lesen der Basisadresse von fs/gsdst = base address of fsSystem und Privilegien
rdgsbaser32F3 0F AE /1Lesen der Basisadresse von fs/gsdst = base address of gsSystem und Privilegien
rdmsr0F 32Lesen eines modellspezifischen Registers (privilegiert)edx:eax = model-specific register number ecx (privileged)System und Privilegien
rdpidr64F3 0F C7 /7Lesen der Prozessor-Kennungdst = id of the processorSystem und Privilegien
rdpmc0F 33Lesen eines Leistungszählersedx:eax = performance counter number ecxSystem und Privilegien
rdrandr320F C7 /6Lesen einer Zufallszahl des Prozessorsdst = random number from the processor; CF = 1 if it is validFlags: OF SF ZF AF CF PFSystem und Privilegien
r1666 0F C7 /6
rdseedr320F C7 /7Lesen eines Startwertes für Zufallsgeneratorendst = seed value for random number generators; CF = 1 if it is validFlags: OF SF ZF AF CF PFSystem und Privilegien
r1666 0F C7 /7
rdsspdr32F3 0F 1E /1Lesen des Schatten-Stackzeigersdst = shadow stack pointerSystem und Privilegien
rdtsc0F 31Lesen des Zeitstempelzählers (Taktzyklen)edx:eax = time stamp counterSystem und Privilegien
rdtscp0F 01 F9Lesen des Zeitstempelzählers und der Prozessor-Kennungedx:eax = time stamp counter; ecx = processor idSystem und Privilegien
retimm16C2 iwRückkehr aus der Funktion (die Adresse kommt vom Stack)eip = pop(); with imm16: esp = esp + imm16 afterwardsSprünge, Aufrufe und Interrupts
C3
retfimm16CA iwRückkehr aus einer Far-Funktioneip = pop(); cs = pop()Sprünge, Aufrufe und Interrupts
CB
rolr/m8, imm8C0 /0 ibRotation nach linksdst = rotate_left(dst, count); CF = lowest bit of the resultFlags: OF CFSchieben und Rotieren
r/m32, imm8C1 /0 ib
r/m16, imm866 C1 /0 ib
r/m8, 1D0 /0
r/m32, 1D1 /0
r/m16, 166 D1 /0
r/m8, clD2 /0
r/m32, clD3 /0
r/m16, cl66 D3 /0
rorr/m8, imm8C0 /1 ibRotation nach rechtsdst = rotate_right(dst, count); CF = highest bit of the resultFlags: OF CFSchieben und Rotieren
r/m32, imm8C1 /1 ib
r/m16, imm866 C1 /1 ib
r/m8, 1D0 /1
r/m32, 1D1 /1
r/m16, 166 D1 /1
r/m8, clD2 /1
r/m32, clD3 /1
r/m16, cl66 D3 /1
roundpdxmm, xmm/m128, imm866 0F 3A 09 /r ibRunden von 2 Doubles auf ganze Zahlendst[i] = round(src[i]) with the rounding mode of imm8SSE Gleitkomma
roundpsxmm, xmm/m128, imm866 0F 3A 08 /r ibRunden von 4 Singles auf ganze Zahlendst[i] = round(src[i]) with the rounding mode of imm8SSE Gleitkomma
roundsdxmm, xmm/m64, imm866 0F 3A 0B /r ibRunden eines Doubles auf eine ganze Zahldst[i] = round(src[i]) with the rounding mode of imm8SSE Gleitkomma
roundssxmm, xmm/m32, imm866 0F 3A 0A /r ibRunden eines Singles auf eine ganze Zahldst[i] = round(src[i]) with the rounding mode of imm8SSE Gleitkomma
rsm0F AAVerlassen des Systemverwaltungsmodus (SMM)leave system management mode, restore the saved stateFlags: allSystem und Privilegien
rsqrtpsxmm, xmm/m1280F 52 /rKehrwert der Wurzel (angenähert) von 4 Singlesfor every element: dst[i] = 1 / sqrt(src[i]) (approximate)SSE Gleitkomma
rsqrtssxmm, xmm/m32F3 0F 52 /rKehrwert der Wurzel (angenähert) von einem Singledst[0] = 1 / sqrt(src[0]) (approximate); the other elements staySSE Gleitkomma
sahf9ESpeichern von ah in die FlagsSF ZF AF PF CF = bits of ahFlags: SF ZF AF CF PFFlags
salcD6Setzen von al aus CF (undokumentiert)al = CF ? 255 : 0Arithmetik
sarr/m8, imm8C0 /7 ibSchieben nach rechts mit Vorzeichen (Vorzeichenbit bleibt)dst = dst >>s count (sign bit comes in); CF = last bit shifted outFlags: OF SF ZF CF PF · undefiniert: AFSchieben und Rotieren
r/m32, imm8C1 /7 ib
r/m16, imm866 C1 /7 ib
r/m8, 1D0 /7
r/m32, 1D1 /7
r/m16, 166 D1 /7
r/m8, clD2 /7
r/m32, clD3 /7
r/m16, cl66 D3 /7
sbbr/m8, r818 /rSubtraktion mit Borgen (CF)dst = dst - src - CFFlags: OF SF ZF AF CF PFArithmetik
r/m32, r3219 /r
r/m16, r1666 19 /r
r8, r/m81A /r
r32, r/m321B /r
r16, r/m1666 1B /r
al, imm81C ib
eax, imm321D id
ax, imm1666 1D iw
r/m8, imm880 /3 ib
r/m32, imm3281 /3 id
r/m16, imm1666 81 /3 iw
r/m8, imm882 /3 ib
r/m32, imm883 /3 ib
r/m16, imm866 83 /3 ib
scasbAEVergleich von al/ax/eax mit [edi], edi läuft weiterflags = acc - [edi]; edi = +/- size; with repe / repne: repeat, at most ecx timesFlags: OF SF ZF AF CF PFZeichenketten
scasdAFVergleich von al/ax/eax mit [edi], edi läuft weiterflags = acc - [edi]; edi = +/- size; with repe / repne: repeat, at most ecx timesFlags: OF SF ZF AF CF PFZeichenketten
scasw66 AFVergleich von al/ax/eax mit [edi], edi läuft weiterflags = acc - [edi]; edi = +/- size; with repe / repne: repeat, at most ecx timesFlags: OF SF ZF AF CF PFZeichenketten
setar/m80F 97 /rSetzen des Bytes auf 1, wenn ohne Vorzeichen größer (CF=0 und ZF=0), sonst auf 0dst = (CF = 0 and ZF = 0) ? 1 : 0Daten kopieren
setber/m80F 96 /rSetzen des Bytes auf 1, wenn ohne Vorzeichen kleiner oder gleich (CF=1 oder ZF=1), sonst auf 0dst = (CF = 1 or ZF = 1) ? 1 : 0Daten kopieren
setcr/m80F 92 /rSetzen des Bytes auf 1, wenn Übertrag, ohne Vorzeichen kleiner (CF=1), sonst auf 0dst = (CF = 1) ? 1 : 0Daten kopieren
setgr/m80F 9F /rSetzen des Bytes auf 1, wenn mit Vorzeichen größer (ZF=0 und SF=OF), sonst auf 0dst = (ZF = 0 and SF = OF) ? 1 : 0Daten kopieren
setger/m80F 9D /rSetzen des Bytes auf 1, wenn mit Vorzeichen größer oder gleich (SF=OF), sonst auf 0dst = (SF = OF) ? 1 : 0Daten kopieren
setlr/m80F 9C /rSetzen des Bytes auf 1, wenn mit Vorzeichen kleiner (SF≠OF), sonst auf 0dst = (SF != OF) ? 1 : 0Daten kopieren
setler/m80F 9E /rSetzen des Bytes auf 1, wenn mit Vorzeichen kleiner oder gleich (ZF=1 oder SF≠OF), sonst auf 0dst = (ZF = 1 or SF != OF) ? 1 : 0Daten kopieren
setncr/m80F 93 /rSetzen des Bytes auf 1, wenn kein Übertrag, ohne Vorzeichen größer oder gleich (CF=0), sonst auf 0dst = (CF = 0) ? 1 : 0Daten kopieren
setnor/m80F 91 /rSetzen des Bytes auf 1, wenn kein Überlauf (OF=0), sonst auf 0dst = (OF = 0) ? 1 : 0Daten kopieren
setnpr/m80F 9B /rSetzen des Bytes auf 1, wenn Parität ungerade (PF=0), sonst auf 0dst = (PF = 0) ? 1 : 0Daten kopieren
setnsr/m80F 99 /rSetzen des Bytes auf 1, wenn nicht negativ (SF=0), sonst auf 0dst = (SF = 0) ? 1 : 0Daten kopieren
setnzr/m80F 95 /rSetzen des Bytes auf 1, wenn ungleich, Ergebnis nicht null (ZF=0), sonst auf 0dst = (ZF = 0) ? 1 : 0Daten kopieren
setor/m80F 90 /rSetzen des Bytes auf 1, wenn Überlauf (OF=1), sonst auf 0dst = (OF = 1) ? 1 : 0Daten kopieren
setpr/m80F 9A /rSetzen des Bytes auf 1, wenn Parität gerade (PF=1), sonst auf 0dst = (PF = 1) ? 1 : 0Daten kopieren
setsr/m80F 98 /rSetzen des Bytes auf 1, wenn negativ (SF=1), sonst auf 0dst = (SF = 1) ? 1 : 0Daten kopieren
setzr/m80F 94 /rSetzen des Bytes auf 1, wenn gleich, Ergebnis null (ZF=1), sonst auf 0dst = (ZF = 1) ? 1 : 0Daten kopieren
sfence0F AE /7Schranke für Schreibzugriffeall earlier stores are done before later storesSchranken und Sonstiges
sgdtm0F 01 /0Speichern des Registers der globalen Deskriptortabelle[m] = GDTRSystem und Privilegien
shlr/m8, imm8C0 /4 ibSchieben nach links (Faktor 2 je Stelle), Auffüllen mit 0dst = dst << count (count masked to 5 / 6 bits); CF = last bit shifted outFlags: OF SF ZF CF PF · undefiniert: AFSchieben und Rotieren
r/m8, imm8C0 /6 ib
r/m32, imm8C1 /4 ib
r/m32, imm8C1 /6 ib
r/m16, imm866 C1 /4 ib
r/m16, imm866 C1 /6 ib
r/m8, 1D0 /4
r/m8, 1D0 /6
r/m32, 1D1 /4
r/m32, 1D1 /6
r/m16, 166 D1 /4
r/m16, 166 D1 /6
r/m8, clD2 /4
r/m8, clD2 /6
r/m32, clD3 /4
r/m32, clD3 /6
r/m16, cl66 D3 /4
r/m16, cl66 D3 /6
shldr/m32, r32, imm80F A4 /r ibSchieben nach links mit Auffüllen aus einem zweiten Registerdst = (dst << count) OR (src >> (width - count))Flags: OF SF ZF CF PF · undefiniert: AFSchieben und Rotieren
r/m16, r16, imm866 0F A4 /r ib
r/m32, r32, cl0F A5 /r
r/m16, r16, cl66 0F A5 /r
shrr/m8, imm8C0 /5 ibSchieben nach rechts ohne Vorzeichen, Auffüllen mit 0dst = dst >> count (zeros come in); CF = last bit shifted outFlags: OF SF ZF CF PF · undefiniert: AFSchieben und Rotieren
r/m32, imm8C1 /5 ib
r/m16, imm866 C1 /5 ib
r/m8, 1D0 /5
r/m32, 1D1 /5
r/m16, 166 D1 /5
r/m8, clD2 /5
r/m32, clD3 /5
r/m16, cl66 D3 /5
shrdr/m32, r32, imm80F AC /r ibSchieben nach rechts mit Auffüllen aus einem zweiten Registerdst = (dst >> count) OR (src << (width - count))Flags: OF SF ZF CF PF · undefiniert: AFSchieben und Rotieren
r/m16, r16, imm866 0F AC /r ib
r/m32, r32, cl0F AD /r
r/m16, r16, cl66 0F AD /r
shufpdxmm, xmm/m128, imm866 0F C6 /r ibMischen von Doubles aus zwei Registern nach einer Vorgabedst = (dst[sel0], src[sel1]); sel = bits of imm8SSE Gleitkomma
shufpsxmm, xmm/m128, imm80F C6 /r ibMischen von Singles aus zwei Registern nach einer Vorgabedst = (dst[sel0], dst[sel1], src[sel2], src[sel3]); sel = bit pairs of imm8SSE Gleitkomma
sidtm0F 01 /1Speichern des Registers der Interrupt-Deskriptortabelle[m] = IDTRSystem und Privilegien
sldtr32/m160F 00 /0Speichern des Registers der lokalen Deskriptortabelledst = LDTRSystem und Privilegien
r1666 0F 00 /0
smswm0F 01 /4Speichern des Maschinen-Statuswortesdst = CR0 bits 0 to 15System und Privilegien
sqrtpdxmm, xmm/m12866 0F 51 /rQuadratwurzel von 2 Doublesfor every element: dst[i] = sqrt(src[i])SSE Gleitkomma
sqrtpsxmm, xmm/m1280F 51 /rQuadratwurzel von 4 Singlesfor every element: dst[i] = sqrt(src[i])SSE Gleitkomma
sqrtsdxmm, xmm/m64F2 0F 51 /rQuadratwurzel von einem Doubledst[0] = sqrt(src[0]); the other elements staySSE Gleitkomma
sqrtssxmm, xmm/m32F3 0F 51 /rQuadratwurzel von einem Singledst[0] = sqrt(src[0]); the other elements staySSE Gleitkomma
stac0F 01 CBSetzen des AC-Flags (Zugriffsschutz)EFLAGS.AC = 1Flags: ACFlags
stcF9Setzen des Carry-FlagsCF = 1Flags: CFFlags
stdFDSetzen des Richtungs-Flags (String-Befehle zählen abwärts)DF = 1Flags: DFFlags
stiFBErlauben der Interrupts (IF=1)IF = 1 (effective after the next instruction)Flags: IFFlags
stmxcsrm0F AE /3Speichern des SSE-Steuer- und Statusregisters[m32] = MXCSRSSE und MMX Datenbewegung
stosbAASpeichern von al/ax/eax nach [edi], edi läuft weiter[edi] = acc; edi = edi +/- size (acc is al, ax or eax)Zeichenketten
stosdABSpeichern von al/ax/eax nach [edi], edi läuft weiter[edi] = acc; edi = edi +/- size (acc is al, ax or eax)Zeichenketten
stosw66 ABSpeichern von al/ax/eax nach [edi], edi läuft weiter[edi] = acc; edi = edi +/- size (acc is al, ax or eax)Zeichenketten
strr32/m160F 00 /1Speichern des Task-Registersdst = task registerSystem und Privilegien
r1666 0F 00 /1
subr/m8, r828 /rSubtraktion der Quelle vom Zieldst = dst - srcFlags: OF SF ZF AF CF PFArithmetik
r/m32, r3229 /r
r/m16, r1666 29 /r
r8, r/m82A /r
r32, r/m322B /r
r16, r/m1666 2B /r
al, imm82C ib
eax, imm322D id
ax, imm1666 2D iw
r/m8, imm880 /5 ib
r/m32, imm3281 /5 id
r/m16, imm1666 81 /5 iw
r/m8, imm882 /5 ib
r/m32, imm883 /5 ib
r/m16, imm866 83 /5 ib
subpdxmm, xmm/m12866 0F 5C /rSubtraktion von 2 Doublesfor every element: dst[i] = dst[i] - src[i] (double)SSE Gleitkomma
subpsxmm, xmm/m1280F 5C /rSubtraktion von 4 Singlesfor every element: dst[i] = dst[i] - src[i] (single)SSE Gleitkomma
subsdxmm, xmm/m64F2 0F 5C /rSubtraktion von einem Doubledst[0] = dst[0] - src[0] (double); the other elements staySSE Gleitkomma
subssxmm, xmm/m32F3 0F 5C /rSubtraktion von einem Singledst[0] = dst[0] - src[0] (single); the other elements staySSE Gleitkomma
swapgs0F 01 F8Tausch der gs-Basis mit dem Kernel-Wertswap(gs base, kernel gs base) (privileged)System und Privilegien
syscall0F 05Aufruf des Betriebssystems (64 Bit, schnell)ecx = eip of the next instruction; r11 = flags; eip = LSTAR; flags = flags & ~SFMASK; ring 0Flags: RFSprünge, Aufrufe und Interrupts
sysenter0F 34Aufruf des Betriebssystems (32 Bit, schnell)enter ring 0 at the address in IA32_SYSENTER_EIPFlags: IF VMSprünge, Aufrufe und Interrupts
sysexit0F 35Rückkehr aus einem Systemaufruf (32 Bit, schnell)back to ring 3: eip = edx, esp = ecxSprünge, Aufrufe und Interrupts
sysretd0F 07Rückkehr aus einem Systemaufruf (schnell)eip = ecx; flags = r11; back to ring 3Sprünge, Aufrufe und Interrupts
testr/m8, r884 /rBitweiser Test (UND), nur die Flags ändern sichflags = dst & src (the result is thrown away); CF = OF = 0Flags: OF SF ZF CF PF · undefiniert: AFVergleichen und Tauschen
r/m32, r3285 /r
r/m16, r1666 85 /r
al, imm8A8 ib
eax, imm32A9 id
ax, imm1666 A9 iw
r/m8, imm8F6 /0 ib
r/m8, imm8F6 /1 ib
r/m32, imm32F7 /0 id
r/m32, imm32F7 /1 id
r/m16, imm1666 F7 /0 iw
r/m16, imm1666 F7 /1 iw
tzcntr32, r/m32F3 0F BC /rZählen der Nullbits am unteren Endedst = number of trailing 0 bits of src (width if src = 0)Flags: ZF CFArithmetik
ucomisdxmm, xmm/m6466 0F 2E /rWie comisd, ohne Ausnahme bei stillen NaNZF PF CF = compare(dst, src): greater 0 0 0, less 0 0 1, equal 1 0 0, unordered 1 1 1; OF SF AF = 0Flags: OF SF ZF AF CF PFSSE Gleitkomma
ucomissxmm, xmm/m320F 2E /rWie comiss, ohne Ausnahme bei stillen NaNZF PF CF = compare(dst, src): greater 0 0 0, less 0 0 1, equal 1 0 0, unordered 1 1 1; OF SF AF = 0Flags: OF SF ZF AF CF PFSSE Gleitkomma
ud20F 0BAbsichtlich ungültiger Befehl (löst eine Ausnahme aus)raises #UD (invalid instruction)Sprünge, Aufrufe und Interrupts
unpckhpdxmm, xmm/m12866 0F 15 /rVerschränken der oberen Doubles zweier Registerdst = (dst[1], src[1])SSE Gleitkomma
unpckhpsxmm, xmm/m1280F 15 /rVerschränken der oberen Singles zweier Registerdst = (dst[2], src[2], dst[3], src[3])SSE Gleitkomma
unpcklpdxmm, xmm/m12866 0F 14 /rVerschränken der unteren Doubles zweier Registerdst = (dst[0], src[0])SSE Gleitkomma
unpcklpsxmm, xmm/m1280F 14 /rVerschränken der unteren Singles zweier Registerdst = (dst[0], src[0], dst[1], src[1])SSE Gleitkomma
verrr/m160F 00 /4Prüfung eines Segments auf LesbarkeitZF = 1 if the segment src can be readFlags: ZFSystem und Privilegien
verwr/m160F 00 /5Prüfung eines Segments auf SchreibbarkeitZF = 1 if the segment src can be writtenFlags: ZFSystem und Privilegien
wbinvd0F 09Zurückschreiben und Leeren der Caches (privilegiert)write back and empty the caches (privileged)System und Privilegien
wrfsbaser32F3 0F AE /2Schreiben der Basisadresse von fs/gsbase address of fs = srcSystem und Privilegien
wrgsbaser32F3 0F AE /3Schreiben der Basisadresse von fs/gsbase address of gs = srcSystem und Privilegien
wrmsr0F 30Schreiben eines modellspezifischen Registers (privilegiert)model-specific register number ecx = edx:eax (privileged)System und Privilegien
xaddr/m8, r80F C0 /rTauschen und Addieren (atomar mit lock)tmp = dst + src; src = dst; dst = tmpFlags: OF SF ZF AF CF PFVergleichen und Tauschen
r/m32, r320F C1 /r
r/m16, r1666 0F C1 /r
xchgr/m8, r886 /rVertauschen der beiden Operanden (mit Speicher: atomar)tmp = dst; dst = src; src = tmpDaten kopieren
r/m32, r3287 /r
r/m16, r1666 87 /r
r32, eax90+rd
r16, ax66 90+rw
xgetbv0F 01 D0Lesen eines erweiterten Steuerregisters (XCR)edx:eax = extended control register number ecxSystem und Privilegien
xlatbD7Laden von al aus der Tabelle bei [ebx + al]al = [ebx + zext(al)]Daten kopieren
xorr/m8, r830 /rBitweise exklusive ODER-Verknüpfung (xor eax, eax setzt auf 0)dst = dst ^ src; CF = OF = 0Flags: OF SF ZF CF PF · undefiniert: AFLogik und Bits
r/m32, r3231 /r
r/m16, r1666 31 /r
r8, r/m832 /r
r32, r/m3233 /r
r16, r/m1666 33 /r
al, imm834 ib
eax, imm3235 id
ax, imm1666 35 iw
r/m8, imm880 /6 ib
r/m32, imm3281 /6 id
r/m16, imm1666 81 /6 iw
r/m8, imm882 /6 ib
r/m32, imm883 /6 ib
r/m16, imm866 83 /6 ib
xorpdxmm, xmm/m12866 0F 57 /rBitweise exklusive ODER-Verknüpfung (xorps x, x löscht)dst = dst ^ srcSSE Gleitkomma
xorpsxmm, xmm/m1280F 57 /rBitweise exklusive ODER-Verknüpfung (xorps x, x löscht)dst = dst ^ srcSSE Gleitkomma
xrstorm0F AE /5Wiederherstellen des erweiterten Prozessorzustandsthe state components selected by edx:eax = [m]System und Privilegien
xsavem0F AE /4Sichern des erweiterten Prozessorzustands (SSE, AVX ...)[m] = the state components selected by edx:eaxSystem und Privilegien
xsavecm0F C7 /4Sichern des erweiterten Prozessorzustands (SSE, AVX ...)[m] = the state components selected by edx:eaxSystem und Privilegien
xsaveoptm0F AE /6Sichern des erweiterten Prozessorzustands (SSE, AVX ...)[m] = the state components selected by edx:eaxSystem und Privilegien
xsetbv0F 01 D1Schreiben eines erweiterten Steuerregisters (XCR)extended control register number ecx = edx:eax (privileged)System und Privilegien