Фантазии о Вселенной и мой личный сайт
Опкоды процессора (16/32 бит)

Опкоды процессора (16/32 бит)

Ниже представлен максимально полный набор инструкции в табличной форме для 16/32-х битных процессоров. В случае расширения размера регистров, ax заменяется на eax (и др.), r16 заменяется на r32, i16 на imm32.

Основная таблица опкодов

0 / 8 1 / 9 2 / A 3 / B 4 / C 5 / D 6 / E 7 / F
00 ADD rm, r8 ADD rm, r16 ADD r8, rm ADD r16, rm ADD al, i8 ADD ax, i16 PUSH es POP es
08 OR rm, r8 OR rm, r16 OR r8, rm OR r16, rm OR al, i8 OR ax, i16 PUSH cs Расширенный
опкод
10 ADC rm, r8 ADC rm, r16 ADC r8, rm ADC r16, rm ADC al, i8 ADC ax, i16 PUSH ss POP ss
18 SBB rm, r8 SBB rm, r16 SBB r8, rm SBB r16, rm SBB al, i8 SBB ax, i16 PUSH ds POP ds
20 AND rm, r8 AND rm, r16 AND r8, rm AND r16, rm AND al, i8 AND ax, i16 ES:префикс DAA
28 SUB rm, r8 SUB rm, r16 SUB r8, rm SUB r16, rm SUB al, i8 SUB ax, i16 CS:префикс DAS
30 XOR rm, r8 XOR rm, r16 XOR r8, rm XOR r16, rm XOR al, i8 XOR ax, i16 SS:префикс AAA
38 CMP rm, r8 CMP rm, r16 CMP r8, rm CMP r16, rm CMP al, i8 CMP ax, i16 DS:префикс AAS
40 INC ax INC cx INC dx INC bx INC sp INC bp INC si INC di
48 DEC ax DEC cx DEC dx DEC bx DEC sp DEC bp DEC si DEC di
50 PUSH ax PUSH cx PUSH dx PUSH bx PUSH sp PUSH bp PUSH si PUSH di
58 POP ax POP cx POP dx POP bx POP sp POP bp POP si POP di
60 PUSHA POPA BOUNDr16, m16&16 ARPLr/m, r16 FS:префикс GS:префикс Расширение
операнда
Расширение
адреса
68 PUSHi16 IMULr16, rm, i16 PUSHimm8 IMULr16, rm, imm8 INSB INSW OUTSB OUTSW
70 JOrel8 JNOrel8 JBrel8 JNBrel8 JZrel8 JNZrel8 JBErel8 JNBErel8
78 JSrel8 JNSrel8 JPrel8 JNPrel8 JLrel8 JNLrel8 JLErel8 JNLErel8
80 Арифметическиеrm, i8 Арифметическиеrm, i16 Арифметическиеrm, i8 Арифметическиеrm16, i8 TESTrm, r8 TESTrm, r16 XCHGrm, r8 XCHGrm, r16
88 MOVrm, r8 MOVrm, r16 MOVr8, rm MOVr16, rm MOVrm16, sreg LEAr16, rm MOVsreg, rm16 POPrm16
90 NOP XCHGcx XCHGdx XCHGbx XCHGsp XCHGbp XCHGsi XCHGdi
98 CBWCWDE CWDCDQ CALLFptr16:16 FWAIT PUSHF POPF SAHF LAHF
A0 MOVal, [m16] MOVax, [m16] MOV[m16], al MOV[m16], ax MOVSB MOVSW CMPSB CMPSW
A8 TESTal, i8 TESTax, i16 STOSB STOSW LODSB LODSW SCASB SCASW
B0 MOVal, i8 MOVcl, i8 MOVdl, i8 MOVbl, i8 MOVah, i8 MOVch, i8 MOVdh, i8 MOVbh, i8
B8 MOVax, i16 MOVcx, i16 MOVdx, i16 MOVbx, i16 MOVsp, i16 MOVbp, i16 MOVsi, i16 MOVdi, i16
C0 Сдвиговыеrm8, i8 Сдвиговыеrm16, i8 RETi16 RET LESr16, rm LDSr16, rm MOVrm, i8 MOVrm, i16
C8 ENTERi16, i8 LEAVE RETFi16 RETF INT3 INTi8 INTO IRET
D0 Сдвиговыеrm8, 1 Сдвиговыеrm16, 1 Сдвиговыеrm8, cl Сдвиговыеrm16, cl AAM AAD SALC XLATB
D8 Сопроцессор
E0 LOOPNZrel8 LOOPZrel8 LOOPrel8 JCXZrel8 INal, i8 INax, i8 OUTi8, al OUTi8, ax
E8 CALLrel16 JMPrel16 JMPFp16:16 JMPrel8 INal, dx INax, dx OUTdx, al OUTdx, ax
F0 LOCK: INT1 REPNZ: REPZ:REP: Алиас HLT CMC Группа #1rm8 Группа #1rm16
F8 CLC STC CLI STI CLD STD Группа #2rm8 Группа #3rm16

Групповые инструкции основного набора инструкции

Некоторые инструкции являются групповыми. Это означает, что используются биты [5:3] для выбора режима функционирования. Биты в r/m части используются как операнд (один операнд).

modm(reg) = 0 1 2 3 4 5 6 7
Арифметические ADD OR ADC SBB AND SUB XOR CMP
Сдвиговые ROL ROR RCL RCR SHL SHR SAL SAR
Группа #1 TESTrm, imm TESTrm, imm NOTrm NEGrm MULrm IMULrm DIVrm IDIVrm
Группа #2 INCrm8 DECrm8
Группа #3 INCrm16 DECrm16 CALLrm16 CALLFm16:16 JMPrm16 JMPFm16:16 PUSHrm16

Инструкции сопроцессора

reg= 0 1 2 3 4 5 6 7
D8 FADD STi/m32real FMUL STi/m32real FCOM STi/m32real FCOMP STi/m32real FSUB STi/m32real FSUBR STi/m32real FDIV STi/m32real FDIVR STi/m32real
D9 FLD STi/m32real FXCH STi FST m32real FSTP m32real Сопроцессор #1 Сопроцессор #2 Сопроцессор #3 Сопроцессор #4
DA FIADD m32int FCMOVB STi FIMUL m32int FCMOVE STi FICOM m32int FCMOVBE STi FICOMP m32int FCMOVU STi FISUB m32int FISUBR m32int FUCOMPP STi FIDIV m32int FIDIVR m32int
DB FILD m32int FCMOVNB STi FISTTP m32int FCMOVNE STi FIST m32int FCMOVNBE STi FISTP m32int FCMOVNU STi Сопроцессор #5 FLD m80real FUCOMI STi FCOMI STi FSTP m80real
DC FADD m64real FADD STi, ST FMUL m64real FMUL STi, ST FCOM m64real FCOM2 STi, ST FCOMP m64real FCOMP3 STi, ST FSUB m64real FSUBR STi, ST FSUBR m64real FSUB STi, ST FDIV m64real FDIVR STi, ST FDIVR m64real FDIV STi, ST
DD FLD m64real FFREE STi FISTTP m64int FXCH4 STi FST m64real FST STi FSTP m64real FSTP STi FRSTOR r/m FUCOM STi FUCOMP STi, ST FNSAVE r/m FSTSW r/m
DE FIADD m16int FADDP STi FIMUL m16int FMULP STi FICOM m16int FCOMP5 STi FICOMP m16int FCOMPP STi FISUB m16int FSUBRP STi FISUBR m16int FSUBP STi FIDIV m16int FDIVRP STi FIDIVR m16int FDIVP STi
DF FILD m16int FFREEP STi FISTTP m16int FXCH7 STi FIST m16int FSTP8 STi FISTP m16int FSTP9 STi FBLD m80dec FNSTSW AX FILD m64int FUCOMIP STi FBSTP m80dec FCOMIP STi FISTP m64int

Модификации MODRM для сопроцессора

Сопроцессор #1 Сопроцессор #2 Сопроцессор #3 Сопроцессор #4 Сопроцессор #5
FLDENVm14/2 FLDCWm16 FNSTENVm14/28 FNSTCWm16
E0 FCHS E8 FLD1 F0 F2XM1 F8 FPREMm16 E0 FNENI
E1 FABS E9 FLDL2T F1 FYL2X F9 FYL2XP1 E1 FNDISI
E4 FTST EA FLDL2E F2 FPTAN FA FSQRT E2 FNCLEX
E5 FXAM EB FLDPI F3 FPATAN FB FSINCOS E3 FNINIT
EC FLDLG2 F4 FXTRACT FC FRNDINT E4 FNSETPM
ED FLDLN2 F5 FPREM1 FD FSCALE
EE FLDZ F6 FDECSTP FE FSIN
F7 FINCSTP FF FCOS

Расширенный набор инструкции

0 / 8 1 / 9 2 / A 3 / B 4 / C 5 / D 6 / E 7 / F
00 Группа #1Управление Группа #2Управление LARr16, rm LSLr16, rm CLTS
08 INVD WBINVD UD2 NOPrm16
10 MOVUPS xmm, xmm/m128 66: MOVUPD xmm, xmm/m128 F2: MOVSD xmm, xmm/m64 F3: MOVSS xmm, xmm/m32 MOVUPS xmm/m128, xmm 66: MOVUPD xmm/m128, xmm F2: MOVSD xmm/m64, xmm F3: MOVSS xmm/m32, xmm MOVHLPSxmm, xmm MOVLPSxmm, m64 66: MOVLPDxmm, m64 F2: MOVDDUPxmm, xmm/m64 F3: MOVSLDUPxmm, xmm/m64 MOVLPS m64, xmm 66: MOVLPD m64, xmm UNPCKLPS xmm, xmm/m64 66: UNPCKLPD xmm, xmm/m128 UNPCKHPS xmm, xmm/m64 66: UNPCKHPD xmm, xmm/m128 MOVLHPS xmm, xmm MOVHPS xmm, m64 66: MOVHPD xmm, m64 F3: MOVSHDUP xmm, xmm/m64 MOVHPS m64, xmm 66: MOVHPD m64, xmm
18 Группа #3Prefetch HINT_NOP HINT_NOP HINT_NOP HINT_NOP HINT_NOP HINT_NOP HINT_NOP / NOP
20 MOVr32, CRn MOVr32, DRn MOVCRn, r32 MOVDRn, r32
28 MOVAPS xmm, xmm/m128 66: MOVAPD xmm, xmm/m128 MOVAPS xmm/m128, xmm 66: MOVAPD xmm/m128, xmm CVTPI2PS xmm, m64 66: CVTPI2PD xmm, m64 F2: CVTSI2SD r/m32 F3: CVTSI2SS r/m32 MOVNTPS m128, xmm 66: MOVNTPD m128, xmm CVTTPS2PI mm, xmm/m64 66: CVTTPD2PI mm, xmm/m128 F2: CVTTSD2SI r32, xmm/m64 F3: CVTTSS2SI r32, xmm/m32 CVTPS2PI mm, xmm/m64 66: CVTPD2PI mm, xmm/m128 F2: CVTSD2SI r32, xmm/m64 F3: CVTSS2SI r32, xmm/m32 UCOMISS xmm, xmm/m32 66: UCOMISD xmm, xmm/m64 COMISS xmm, xmm/m32 66: COMISD xmm, xmm/m64
30 WRMSR RDTSC RDMSR RDPMC SYSENTER SYSEXIT GETSEC
38 Группа #4sse3/4 Группа #5sse3/4
40 CMOVOr16, rm CMOVNOr16, rm CMOVBr16, rm CMOVNBr16, rm CMOVZr16, rm CMOVNZr16, rm CMOVBEr16, rm CMOVAr16, rm
48 CMOVSr16, rm CMOVNSr16, rm CMOVPr16, rm CMOVNPr16, rm CMOVLr16, rm CMOVNLr16, rm CMOVLEr16, rm CMOVGr16, rm
50 MOVMSKPSr32, xmm 66: MOVMSKPDr32,xmm SQRTPSxmm, xmm/m128 F3: SQRTSSxmm, xmm/m32 66: SQRTPDxmm, xmm/m128 F2: SQRTSDxmm, xmm/m64 RSQRTPSxmm, xmm/m128 F3: RSQRTSSxmm, xmm/m32 RCPPSxmm, xmm/m128 F3: RCPSSxmm, xmm/m32 ANDPSxmm, xmm/m128 66: ANDPDxmm, xmm/m128 ANDNPSxmm, xmm/m128 66: ANDNPDxmm, xmm/m128 ORPSxmm, xmm/m128 66: ORPDxmm, xmm/m128 XORPSxmm, xmm/m128 66: XORPSxmm, xmm/m128
58 ADDPSxmm, xmm/m128 F3: ADDSSxmm, xmm/m32 66: ADDPDxmm, xmm/m128 F2: ADDSDxmm, xmm/m64 MULPSxmm, xmm/m128 F3: MULSSxmm, xmm/m32 66: MULPDxmm, xmm/m128 F2: MULSDxmm, xmm/m64 CVTPS2PDxmm, xmm/m128 F3: CVTSS2SDxmm, xmm/m32 66: CVTPD2PSxmm, xmm/m128 F2: CVTSD2SSxmm, xmm/m64 CVTDQ2PSxmm, xmm/m128 F3: CVTTPS2DQxmm, xmm/m128 66: CVTPS2DQxmm, xmm/m128 SUBPSxmm, xmm/m128 F3: SUBSSxmm, xmm/m32 66: SUBPDxmm, xmm/m128 F2: SUBSDxmm, xmm/m64 MINPSxmm, xmm/m128 F3: MINSSxmm, xmm/m32 66: MINPDxmm, xmm/m128 F2: MINSDxmm, xmm/m64 DIVPSxmm, xmm/m128 F3: DIVSSxmm, xmm/m32 66: DIVPDxmm, xmm/m128 F2: DIVSDxmm, xmm/m64 MAXPSxmm, xmm/m128 F3: MAXSSxmm, xmm/m32 66: MAXPDxmm, xmm/m128 F2: MAXSDxmm, xmm/m64
60 PUNPCKLBWmm, mm/m64 66: PUNPCKLBWxmm, xmm/m128 PUNPCKLWDmm, mm/m64 66: PUNPCKLWDxmm, xmm/m128 PUNPCKLDQmm, mm/m64 66: PUNPCKLDQxmm, xmm/m128 PACKSSWBmm, mm/m64 66: PACKSSWBxmm, xmm/m128 PCMPGTBmm, mm/m64 66: PCMPGTBxmm, xmm/m128 PCMPGTWmm, mm/m64 66: PCMPGTWxmm, xmm/m128 PCMPGTDmm, mm/m64 66: PCMPGTDxmm, xmm/m128 PACKUSWBmm, mm/m64 66: PACKUSWBxmm, xmm/m128
68 PUNPCKHBWmm, mm/m64 66: PUNPCKHBWxmm, xmm/m128 PUNPCKHWDmm, mm/m64 66: PUNPCKHWDxmm, xmm/m128 PUNPCKHDQmm, mm/m64 66: PUNPCKHDQxmm, xmm/m128 PACKSSDWmm, mm/m64 66: PACKSSDWxmm, xmm/m128 66: PUNPCKLQDQxmm, xmm/m128 66: PUNPCKHQDQxmm, xmm/m128 MOVDmm, mm/m32 66: MOVDxmm, xmm/m32 MOVQmm, mm/m64 66: MOVDQAxmm, xmm/m128 F3: MOVDQUxmm, xmm/m128
70 PSHUFWmm/m64, i8 F2: PSHUFLWxmm/m128, i8 F3: PSHUFHWxmm/m128, i8 66: PSHUFDxmm/m128, i8 Группа #7sse1/2 Группа #8mmx/sse2 Группа #9mmx/sse2 PCMPEQBmm, mm/m64 66: PCMPEQBxmm, xmm/m128 PCMPEQWmm, mm/m64 66: PCMPEQWxmm, xmm/m128 PCMPEQDmm, mm/m64 66: PCMPEQDxmm, xmm/m128 EMMS
78 VMREADr/m32, r32 VMWRITEr32, r/m32 66: HADDPDxmm, xmm/m128 F2: HADDPSxmm, xmm/m128 66: HSUBPDxmm, xmm/m128 F2: HSUBPSxmm, xmm/m128 MOVDr/m32, mm 66: MOVDr/m32, xmm F3: MOVQxmm, xmm/m64 MOVQmm/m64, mm 66: MOVDQAxmm/m128, xmm F3: MOVDQUxmm/m128, xmm
80 JOrel16 JNOrel16 JBrel16 JNBrel16 JZrel16 JNZrel16 JBErel16 JArel16
88 JSrel16 JNSrel16 JPrel16 JNPrel16 JLrel16 JNLrel16 JLErel16 JGrel16
80 SETOr/m8 SETNOr/m8 SETBr/m8 SETNBr/m8 SETZr/m8 SETNZr/m8 SETBEr/m8 SETAr/m8
88 SETSr/m8 SETNSr/m8 SETPr/m8 SETNPr/m8 SETLr/m8 SETNLr/m8 SETLEr/m8 SETGr/m8
A0 PUSHFS POPFS CPUID BTr/m, r16 SHLDr/m, r16, i8 SHLDr/m, r16, cl
A8 PUSHGS POPGS RSM BTSr/m, r16 SHRDr/m, r16, i8 SHRDr/m, r16, cl Группа #6Контроль IMULr16, rm
B0
B8
C0
C8
D0
D8
E0
E8
F0
F8