The University of Texas at Austin
Department of Electrical and Computer Engineering

List of Instructions for the Project

EE 382N – Spring 2026
Yale N. Patt, Instructor
Orhan Unuvar, Asher Nederveld, Edgar Turcotte, TAs

The following table contains all instruction variations you will implement in the project. It includes the instruction variations due to the operand size override and REP prefix; in addition, many instructions may be preceded by a segment override prefix (consult the manuals for details).

Opcode Mnemonic Description
37 AAA ASCII adjust AL after addition
81 /2 id ADC r/m32,imm32 Add with CF imm32 to r/m32
83 /2 ib ADC r/m32,imm8 Add with CF sign-extended imm8 into r/m32
11 /r ADC r/m32,r32 Add with CF r32 to r/m32
13 /r ADC r32,r/m32 Add with CF r/m32 to r32
04 ib ADD AL,imm8 Add imm8 to AL
05 iw ADD AX,imm16 Add imm16 to AX
05 id ADD EAX,imm32 Add imm32 to EAX
80 /0 ib ADD r/m8,imm8 Add imm8 to r/m8
81 /0 iw ADD r/m16,imm16 Add imm16 to r/m16
81 /0 id ADD r/m32,imm32 Add imm32 to r/m32
83 /0 ib ADD r/m16,imm8 Add sign-extended imm8 to r/m16
83 /0 ib ADD r/m32,imm8 Add sign-extended imm8 to r/m32
00 /r ADD r/m8,r8 Add r8 to r/m8
01 /r ADD r/m16,r16 Add r16 to r/m16
01 /r ADD r/m32,r32 Add r32 to r/m32
02 /r ADD r8,r/m8 Add r/m8 to r8
03 /r ADD r16,r/m16 Add r/m16 to r16
03 /r ADD r32,r/m32 Add r/m32 to r32
24 ib AND AL,imm8 AL AND imm8
25 iw AND AX,imm16 AX AND imm16
25 id AND EAX,imm32 EAX AND imm32
80 /4 ib AND r/m8,imm8 r/m8 AND imm8
81 /4 iw AND r/m16,imm16 r/m16 AND imm16
81 /4 id AND r/m32,imm32 r/m32 AND imm32
83 /4 ib AND r/m16,imm8 r/m16 AND imm8 (sign-extended)
83 /4 ib AND r/m32,imm8 r/m32 AND imm8 (sign-extended)
20 /r AND r/m8,r8 r/m8 AND r8
21 /r AND r/m16,r16 r/m16 AND r16
21 /r AND r/m32,r32 r/m32 AND r32
22 /r AND r8,r/m8 r8 AND r/m8
23 /r AND r16,r/m16 r16 AND r/m16
23 /r AND r32,r/m32 r32 AND r/m32
0F BC BSF r16,r/m16 Bit scan forward on r/m16
0F BC BSF r32,r/m32 Bit scan forward on r/m32
E8 cw CALL rel16 Call near, relative, displacement relative to next instruction
E8 cd CALL rel32 Call near, relative, displacement relative to next instruction
FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16
FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32
9A cp CALL ptr16:32 Call far, absolute, address given in operand
FC CLD Clear DF flag
0F 42 /r CMOVC r16, r/m16 Move if carry (CF=1)
0F 42 /r CMOVC r32, r/m32 Move if carry (CF=1)
0F B0 /r CMPXCHG r/m8,r8 Compare AL with r/m8. If equal, r/m8 = r8 and ZF=1. Else, ZF=0, AL=r/m8
0F B1 /r CMPXCHG r/m16,r16 Compare AX with r/m16. If equal, r/m16 = r16 and ZF=1. Else, ZF=0, AX=r/m16
0F B1 /r CMPXCHG r/m32,r32 Compare EAX with r/m32. If equal, r/m32 = r32 and ZF=1. Else, ZF=0, EAX=r/m32
F4 HLT Halt
CF IREtd Interrupt return (32-bit operand size)
77 cb JNBE rel8 Jump short if not below or equal (CF=0 and ZF=0)
75 cb JNE rel8 Jump short if not equal (ZF=0)
0F 87 cw JNBE rel16 Jump near if not below or equal (CF=0 and ZF=0)
0F 87 cd JNBE rel32 Jump near if not below or equal (CF=0 and ZF=0)
0F 85 cw JNE rel16 Jump near if not equal (ZF=0)
0F 85 cd JNE rel32 Jump near if not equal (ZF=0)
EB cb JMP rel8 Jump short, relative, displacement relative to next instruction
E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction
E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
EA cd JMP ptr16:16 Jump far, absolute, address given in operand
EA cp JMP ptr16:32 Jump far, absolute, address given in operand
88 /r MOV r/m8,r8 Move r8 to r/m8
89 /r MOV r/m16,r16 Move r16 to r/m16
89 /r MOV r/m32,r32 Move r32 to r/m32
8A /r MOV r8,r/m8 Move r/m8 to r8
8B /r MOV r16,r/m16 Move r/m16 to r16
8B /r MOV r32,r/m32 Move r/m32 to r32
8C /r MOV r/m16,Sreg Move segment register to r/m16
8E /r MOV Sreg,r/m16 Move r/m16 to segment register
B0+ rb MOV r8,imm8 Move imm8 to r8
B8+ rw MOV r16,imm16 Move imm16 to r16
B8+ rd MOV r32,imm32 Move imm32 to r32
C6 /0 MOV r/m8,imm8 Move imm8 to r/m8
C7 /0 MOV r/m16,imm16 Move imm16 to r/m16
C7 /0 MOV r/m32,imm32 Move imm32 to r/m32
0F 6F /r MOVQ mm, mm/m64 Move quadword from mm/m64 to mm
0F 7F /r MOVQ mm/m64, mm Move quadword from mm to mm/m64
A4 MOVS m8,m8 Move byte at address DS:[(E)SI] to address ES:[(E)DI]
A5 MOVS m16,m16 Move word at address DS:[(E)SI] to address ES:[(E)DI]
A5 MOVS m32,m32 Move doubleword at address DS:[(E)SI] to address ES:[(E)DI]
F6 /2 NOT r/m8 Reverse each bit of r/m8
F7 /2 NOT r/m16 Reverse each bit of r/m16
F7 /2 NOT r/m32 Reverse each bit of r/m32
0C ib OR AL,imm8 AL OR imm8
0D iw OR AX,imm16 AX OR imm16
0D id OR EAX,imm32 EAX OR imm32
80 /1 ib OR r/m8,imm8 r/m8 OR imm8
81 /1 iw OR r/m16,imm16 r/m16 OR imm16
81 /1 id OR r/m32,imm32 r/m32 OR imm32
83 /1 ib OR r/m16,imm8 r/m16 OR imm8 (sign-extended)
83 /1 ib OR r/m32,imm8 r/m32 OR imm8 (sign-extended)
08 /r OR r/m8,r8 r/m8 OR r8
09 /r OR r/m16,r16 r/m16 OR r16
09 /r OR r/m32,r32 r/m32 OR r32
0A /r OR r8,r/m8 r8 OR r/m8
0B /r OR r16,r/m16 r16 OR r/m16
0B /r OR r32,r/m32 r32 OR r/m32
0F 63 /r PACKSSWB mm1, mm/m64 Converts 4 packed signed word integers from mm1 and mm2/m64 into 8 packed signed byte integers in mm1 using signed saturation
0F 6B /r PACKSSDW mm1, mm/m64 Converts 2 packed signed double word integers from mm1 and mm2/m64 into 4 packed signed word integers in mm1 using signed saturation
0F FD /r PADDW mm, mm/m64 Add packed word integers from mm/m64 and mm
0F FE /r PADDD mm, mm/m64 Add packed doubleword integers from mm/m64 and mm
0F E0 /r PAVGB mm1, mm2/m64 Average packed unsigned byte integers from mm2/m64 and mm1 with rounding
0F E3 /r PAVGW mm1, mm2/m64 Average packed unsigned word integers from mm2/m64 and mm1 with rounding
8F /0 POP r/m16 Pop top of stack into m16; increment stack pointer
8F /0 POP r/m32 Pop top of stack into m32; increment stack pointer
58+ rw POP r16 Pop top of stack into r16; increment stack pointer
58+ rd POP r32 Pop top of stack into r32; increment stack pointer
1F POP DS Pop top of stack into DS; increment stack pointer
07 POP ES Pop top of stack into ES; increment stack pointer
17 POP SS Pop top of stack into SS; increment stack pointer
0F A1 POP FS Pop top of stack into FS; increment stack pointer
0F A9 POP GS Pop top of stack into GS; increment stack pointer
FF /6 PUSH r/m16 Push r/m16
FF /6 PUSH r/m32 Push r/m32
50+rw PUSH r16 Push r16
50+rd PUSH r32 Push r32
6A PUSH imm8 Push imm8
68 PUSH imm16 Push imm16
68 PUSH imm32 Push imm32
0E PUSH CS Push CS
16 PUSH SS Push SS
1E PUSH DS Push DS
06 PUSH ES Push ES
0F A0 PUSH FS Push FS
0F A8 PUSH GS Push GS
F3 A4 REP MOVS m8,m8 Move (E)CX bytes from DS:[(E)SI] to ES:[(E)DI]
F3 A5 REP MOVS m16,m16 Move (E)CX words from DS:[(E)SI] to ES:[(E)DI]
F3 A5 REP MOVS m32,m32 Move (E)CX double words from DS:[(E)SI] to ES:[(E)DI]
F3 A7 REPE CMPS m32,m32 Find nonmatching doublewords in ES:[(E)DI] and DS:[(E)SI]
C3 RET Near return to calling procedure
CB RET Far return to calling procedure
C2 iw RET imm16 Near return to calling procedure and pop imm16 bytes from stack
CA iw RET imm16 Far return to calling procedure and pop imm16 bytes from stack
D0 /4 SAL r/m8,1 Multiply r/m8 by 2, once
D2 /4 SAL r/m8,CL Multiply r/m8 by 2, CL times
C0 /4 ib SAL r/m8,imm8 Multiply r/m8 by 2, imm8 times
D1 /4 SAL r/m16,1 Multiply r/m16 by 2, once
D3 /4 SAL r/m16,CL Multiply r/m16 by 2, CL times
C1 /4 ib SAL r/m16,imm8 Multiply r/m16 by 2, imm8 times
D1 /4 SAL r/m32,1 Multiply r/m32 by 2, once
D3 /4 SAL r/m32,CL Multiply r/m32 by 2, CL times
C1 /4 ib SAL r/m32,imm8 Multiply r/m32 by 2, imm8 times
D0 /7 SAR r/m8,1 Signed divide r/m8 by 2, once
D2 /7 SAR r/m8,CL Signed divide r/m8 by 2, CL times
C0 /7 ib SAR r/m8,imm8 Signed divide r/m8 by 2, imm8 times
D1 /7 SAR r/m16,1 Signed divide r/m16 by 2, once
D3 /7 SAR r/m16,CL Signed divide r/m16 by 2, CL times
C1 /7 ib SAR r/m16,imm8 Signed divide r/m16 by 2, imm8 times
D1 /7 SAR r/m32,1 Signed divide r/m32 by 2, once
D3 /7 SAR r/m32,CL Signed divide r/m32 by 2, CL times
C1 /7 ib SAR r/m32,imm8 Signed divide r/m32 by 2, imm8 times
81 /3 id SBB r/m32,imm32 Subtract with borrow imm32 from r/m32
83 /3 ib SBB r/m32,imm8 Subtract with borrow sign-extended imm8 from r/m32
19 /r SBB r/m32,r32 Subtract with borrow r32 from r/m32
1B /r SBB r32,r/m32 Subtract with borrow r/m32 from r32
FD STD Set DF flag
90+rw XCHG AX,r16 Exchange r16 with AX
90+rd XCHG EAX,r32 Exchange r32 with EAX
86 /r XCHG r/m8,r8 Exchange r8 with r/m8
87 /r XCHG r/m16,r16 Exchange r16 with r/m16
87 /r XCHG r/m32,r32 Exchange r32 with r/m32