Intel 80x86(IA-32) Assembly Language OpCodes

Intel 80x86(IA-32) Assembly Language OpCodes

The following table provides a list of x86-Assembler mnemonics, that is not complete. Most of them can be found, for others see at www.intel.com
Intel 手册,共4771页,你值得拥有 : )

原文链接 <–


  1. Notations and Format used in this Document

  2. AAA - Ascii Adjust for Addition

  3. AAD - Ascii Adjust for Division

  4. AAM - Ascii Adjust for Multiplication

  5. AAS - Ascii Adjust for Subtraction

  6. ADC - Add With Carry

  7. ADD - Arithmetic Addition

  8. AND - Logical And

  9. ARPL - Adjusted Requested Privilege Level of Selector

  10. BOUND - Array Index Bound Check

  11. BSF - Bit Scan Forward

  12. BSR - Bit Scan Reverse

  13. BSWAP - Byte Swap

  14. BT - Bit Test

  15. BTC - Bit Test with Compliment

  16. BTR - Bit Test with Reset

  17. BTS - Bit Test and Set

  18. CALL - Procedure Call

  19. CBW - Convert Byte to Word

  20. CDQ - Convert Double to Quad

  21. CLC - Clear Carry

  22. CLD - Clear Direction Flag

  23. CLI - Clear Interrupt Flag

  24. CLTS - Clear Task Switched Flag

  25. CMC - Complement Carry Flag

  26. CMP - Compare

  27. CMPS - Compare String

  28. CMPXCHG - Compare and Exchange

  29. CWD - Convert Word to Doubleword

  30. CWDE - Convert Word to Extended Doubleword

  31. DAA - Decimal Adjust for Addition

  32. DAS - Decimal Adjust for Subtraction

  33. DEC - Decrement

  34. DIV - Divide

  35. ENTER - Make Stack Frame

  36. ESC - Escape

  37. Floating point instuctions - no descriptions

  38. HLT - Halt CPU

  39. IDIV - Signed Integer Division

  40. IMUL - Signed Multiply

  41. IN - Input Byte or Word From Port

  42. INC - Increment

  43. INS - Input String from Port

  44. INT - Interrupt

  45. INTO - Interrupt on Overflow

  46. INVD - Invalidate Cache

  47. INVLPG - Invalidate Translation Look-Aside Buffer Entry

  48. IRET/IRETD - Interrupt Return

  49. JA/JNBE - Jump Above / Jump Not Below or Equal

  50. JAE/JNB - Jump Above or Equal / Jump on Not Below

  51. JB/JNAE - Jump Below / Jump Not Above or Equal

  52. JBE/JNA - Jump Below or Equal / Jump Not Above

  53. JC - Jump on Carry

  54. JCXZ/JECXZ - Jump if Register (E)CX is Zero

  55. JE/JZ - Jump Equal / Jump Zero

  56. JG/JNLE - Jump Greater / Jump Not Less or Equal

  57. JGE/JNL - Jump Greater or Equal / Jump Not Less

  58. JL/JNGE - Jump Less / Jump Not Greater or Equal

  59. JLE/JNG - Jump Less or Equal / Jump Not Greater

  60. JMP - Unconditional Jump

  61. JNC - Jump Not Carry

  62. JNE/JNZ - Jump Not Equal / Jump Not Zero

  63. JNO - Jump Not Overflow

  64. JNS - Jump Not Signed

  65. JNP/JPO - Jump Not Parity / Jump Parity Odd

  66. JO - Jump on Overflow

  67. JP/JPE - Jump on Parity / Jump on Parity Even

  68. JS - Jump Signed

  69. LAHF - Load Register AH From Flags

  70. LAR - Load Access Rights

  71. LDS - Load Pointer Using DS

  72. LEA - Load Effective Address

  73. LEAVE - Restore Stack for Procedure Exit

  74. LES - Load Pointer Using ES

  75. LFS - Load Pointer Using FS

  76. LGDT - Load Global Descriptor Table

  77. LIDT - Load Interrupt Descriptor Table

  78. LGS - Load Pointer Using GS

  79. LLDT - Load Local Descriptor Table

  80. LMSW - Load Machine Status Word

  81. LOCK - Lock Bus

  82. LODS - Load String

  83. LOOP - Decrement CX and Loop if CX Not Zero

  84. LOOPE/LOOPZ - Loop While Equal / Loop While Zero

  85. LOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not Equal

  86. LSL - Load Segment Limit

  87. LSS - Load Pointer Using SS

  88. LTR - Load Task Register

  89. MOV - Move Byte or Word

  90. MOVS - Move String

  91. MOVSX - Move with Sign Extend

  92. MOVZX - Move with Zero Extend

  93. MUL - Unsigned Multiply

  94. NEG - Two’s Complement Negation

  95. NOP - No Operation

  96. NOT - One’s Compliment Negation

  97. OR - Inclusive Logical OR

  98. OUT - Output Data to Port

  99. OUTS - Output String to Port

  100. POP - Pop Word off Stack

  101. POPA/POPAD - Pop All Registers onto Stack

  102. POPF/POPFD - Pop Flags off Stack

  103. PUSH - Push Word onto Stack

  104. PUSHA/PUSHAD - Push All Registers onto Stack

  105. PUSHF/PUSHFD - Push Flags onto Stack

  106. RCL - Rotate Through Carry Left

  107. RCR - Rotate Through Carry Right

  108. REP - Repeat String Operation

  109. REPE/REPZ - Repeat Equal / Repeat Zero

  110. REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero

  111. RET/RETF - Return From Procedure

  112. ROL - Rotate Left

  113. ROR - Rotate Right

  114. SAHF - Store AH Register into FLAGS

  115. SAL/SHL - Shift Arithmetic Left / Shift Logical Left

  116. SAR - Shift Arithmetic Right

  117. SBB - Subtract with Borrow

  118. SCAS - Scan String

  119. SETAE/SETNB - Set if Above or Equal / Set if Not Below

  120. SETB/SETNAE - Set if Below / Set if Not Above or Equal

  121. SETBE/SETNA - Set if Below or Equal / Set if Not Above

  122. SETE/SETZ - Set if Equal / Set if Zero

  123. SETNE/SETNZ - Set if Not Equal / Set if Not Zero

  124. SETL/SETNGE - Set if Less / Set if Not Greater or Equal

  125. SETGE/SETNL - Set if Greater or Equal / Set if Not Less

  126. SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal

  127. SETG/SETNLE - Set if Greater / Set if Not Less or Equal

  128. SETS - Set if Signed

  129. SETNS - Set if Not Signed

  130. SETC - Set if Carry

  131. SETNC - Set if Not Carry

  132. SETO - Set if Overflow

  133. SETNO - Set if Not Overflow

  134. SETP/SETPE - Set if Parity / Set if Parity Even

  135. SETNP/SETPO - Set if No Parity / Set if Parity Odd

  136. SGDT - Store Global Descriptor Table

  137. SIDT - Store Interrupt Descriptor Table

  138. SHR - Shift Logical Right

  139. SHLD/SHRD - Double Precision Shift

  140. SLDT - Store Local Descriptor Table

  141. SMSW - Store Machine Status Word

  142. STC - Set Carry

  143. STD - Set Direction Flag

  144. STI - Set Interrupt Flag

  145. STOS - Store String

  146. STR - Store Task Register

  147. SUB - Subtract

  148. TEST - Test For Bit Pattern

  149. VERR - Verify Read

  150. VERW - Verify Write

  151. WAIT/FWAIT - Event Wait

  152. WBINVD - Write-Back and Invalidate Cache

  153. XCHG - Exchange

  154. XLAT/XLATB - Translate

  155. XOR - Exclusive OR

Notations and Format used in this Document

Notation


mnemonics
Instruction syntax

op
Instruction OpCode

xx
Additional Code bytes

s
Sign Bit
  • E: Sign-extended 8-bit immediate data
  • N: Non

w
Word/byte Bit
  • W: 16-bit operanrs
  • B: 8-bit operanrs

len
Instruction length

flags
  • ——–c - Carry flag

  • ——-p- - Parity flag

  • ——a– - Auxiliary flag

  • —–z— - Zero flag

  • —-s—- - Sign flag

  • —t—– - Trap flag

  • –i—— - Interrupt flag

  • -d——- - Direction flag

  • o——– - Overflow flag


mr
Addressing mode Byte = MODRM(mod-reg-r/m)

/0~7
2nd or 3rd Opcode (MODRM bits 5,4,3 from reg field)

d0 d1
Displacement [Low-byte High-byte]

i0 i1
Immediate word value

o0 o1
Offset value

s0 s1
Segment value


r0
Relative Short Displacement to label ‘sl’ (-128/+127 bytes)

r0 r1
Relative Long Displacement to label ‘ll’ (-32768/+32767 bytes)

Mnemonic Notation





















mb
memory byte

mw
memory word

md
memory double word

mq
memory quad word




rb
register byte

rw
register word

rd
register double word




rmb
register or memory byte

rmw
register or memory word




sl
short label

ll
long label



np
near pointer

fp
far pointer




ib
immediate byte

iw
immediate word




mwr
memory word real

mdr
memory double word real

mqr
memory quad word real

mtr
memory ten byte real




cr
control register




dr
debug register




tr
test register




















Instruction General Format
PreFixOpCodemodRMDispImm





AAA - Ascii Adjust for Addition






mnemonicsop xx xx xx xx xxswlenflags
AAA37 1——a-



Usage
AAA

Modifies flags
AF CF (OF,PF,SF,ZF undefined)



Changes contents of AL to valid unpacked decimal.

The high order nibble is zeroed.

AAD - Ascii Adjust for Division






mnemonicsop xx xx xx xx xxswlenflags
AADD5 0A 2—-sz-p



Usage
AAD

Modifies flags
SF ZF PF (AF,CF,OF undefined)



Used before dividing unpacked decimal numbers.

Multiplies AH by 10 and the adds result into AL. Sets AH to zero.

This instruction is also known to have an undocumented behavior.

AAM - Ascii Adjust for Multiplication






mnemonicsop xx xx xx xx xxswlenflags
AAMD4 0A 2—-sz-p



Usage
AAM

Modifies flags
PF SF ZF (AF,CF,OF undefined)



Used after multiplication of two unpacked decimal numbers, this

instruction adjusts an unpacked decimal number. The high order

nibble of each byte must be zeroed before using this instruction.

This instruction is also known to have an undocumented behavior.

AAS - Ascii Adjust for Subtraction






mnemonicsop xx xx xx xx xxswlenflags
AAS3F 1——a-



Usage
AAS

Modifies flags
AF CF (OF,PF,SF,ZF undefined)



Corrects result of a previous unpacked decimal subtraction in AL.

High order nibble is zeroed.

ADC - Add With Carry














mnemonicsop xx xx xx xx xxswlenflags
ADC     AL,ib14 i0 B2o—szap
ADC     AX,iw15 i0 i1 W3o—szap
ADC     rb,rmb12 mr d0 d1 B2~4o—szap
ADC     rw,rmw13 mr d0 d1 W2~4o—szap
ADC     rmb,ib80 /2 d0 d1 i0NB3~5o—szap
ADC     rmw,iw81 /2 d0 d1 i0 i1NW4~6o—szap
ADC     rmw,ib83 /2 d0 d1 i0EW3~5o—szap
ADC     rmb,rb10 mr d0 d1 B2~4o—szap
ADC     rmw,rw11 mr d0 d1 W2~4o—szap



Usage
ADC     dest,src

Modifies flags
AF CF OF SF PF ZF



Sums two binary operands placing the result in the destination.

If CF is set, a 1 is added to the destination.


ADD - Arithmetic Addition














mnemonicsop xx xx xx xx xxswlenflags
ADD     AL,ib04 i0 B2o—szap
ADD     AX,iw05 i0 i1 W3o—szap
ADD     rb,rmb02 mr d0 d1 B2~4o—szap
ADD     rw,rmw03 mr d0 d1 W2~4o—szap
ADD     rmb,ib80 /0 d0 d1 i0NB3~5o—szap
ADD     rmw,iw81 /0 d0 d1 i0 i1NW4~6o—szap
ADD     rmw,ib83 /0 d0 d1 i0EW3~5o—szap
ADD     rmb,rb00 mr d0 d1 B2~4o—szap
ADD     rmw,rw01 mr d0 d1 W2~4o—szap



Usage
ADD     dest,src

Modifies flags
AF CF OF PF SF ZF



Adds “src” to “dest” and replacing the original contents of “dest”.

Both operands are binary.


AND - Logical And














mnemonicsop xx xx xx xx xxswlenflags
AND     AL,ib24 i0 B20—sz-p
AND     AX,iw25 i0 i1 W30—sz-p
AND     rb,rmb22 mr d0 d1 B2~40—sz-p
AND     rw,rmw23 mr d0 d1 W2~40—sz-p
AND     rmb,ib80 /4 d0 d1 i0NB3~50—sz-p
AND     rmw,iw81 /4 d0 d1 i0 i1NW4~60—sz-p
AND     rmw,ib83 /4 d0 d1 i0EW3~50—sz-p
AND     rmb,rb20 mr d0 d1 B2~40—sz-p
AND     rmw,rw21 mr d0 d1 W2~40—sz-p



Usage
AND     dest,src

Modifies flags
CF OF PF SF ZF (AF undefined)



Performs a logical AND of the two operands replacing the destination with the result.

ARPL - Adjusted Requested Privilege Level of Selector (286+ protected mode)






mnemonicsop xx xx xx xx xxswlenflags
ARPL    rmw,rw      [286]63 mr d0 d1 2~4—–z–



Usage
ARPL    dest,src

Modifies flags
ZF



Compares the RPL bits of “dest” against “src”. If the RPL bits

of “dest” are less than “src”, the destination RPL bits are set

equal to the source RPL bits and the Zero Flag is set. Otherwise

the Zero Flag is cleared.

BOUND - Array Index Bound Check (80188+)






mnemonicsop xx xx xx xx xxswlenflags
BOUND   rw,rmw      [186]62 mr d0 d1 2~4——–



Usage
BOUND   src,limit

Modifies flags
None



Array index in source register is checked against upper and lower

bounds in memory source. The first word located at “limit” is

the lower boundary and the word at “limit+2” is the upper array bound.

Interrupt 5 occurs if the source value is less than or higher than

the source.

BSF - Bit Scan Forward (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
BSF     rw,rmw      [386]0F BC mr d0 d1 3~5—–z–



Usage
BSF     dest,src

Modifies flags
ZF



Scans source operand for first bit set. Sets ZF if a bit is found

set and loads the destination with an index to first set bit. Clears

ZF is no bits are found set. BSF scans forward across bit pattern

(0-n) while BSR scans in reverse (n-0).

BSR - Bit Scan Reverse (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
BSR     rw,rmw      [386]0F BD mr d0 d1 3~5—–z–



Usage
BSR     dest,src

Modifies flags
ZF



Scans source operand for first bit set. Sets ZF if a bit is found

set and loads the destination with an index to first set bit. Clears

ZF is no bits are found set. BSF scans forward across bit pattern

(0-n) while BSR scans in reverse (n-0).

BSWAP - Byte Swap (486+ only)













mnemonicsop xx xx xx xx xxswlenflags
BSWAP   eax         [486]0F C8 2——–
BSWAP   ecx         [486]0F C9 2——–
BSWAP   edx         [486]0F CA 2——–
BSWAP   ebx         [486]0F CB 2——–
BSWAP   esp         [486]0F CC 2——–
BSWAP   ebp         [486]0F CD 2——–
BSWAP   esi         [486]0F CE 2——–
BSWAP   edi         [486]0F CF 2——–



Usage
BSWAP   reg32

Modifies flags
none



Changes the byte order of a 32 bit register from big endian to

little endian or vice versa. Result left in destination register

is undefined if the operand is a 16 bit register.

BT - Bit Test (386+ only)







mnemonicsop xx xx xx xx xxswlenflags
BT      rmw,ib      [386]0F BA /4 d0 d1 i0 4~6——–
BT      rmw,rw      [386]0F A3 mr d0 d1 3~5——–



Usage
BT      dest,src

Modifies flags
CF



The destination bit indexed by the source value is copied into the Carry Flag.

BTC - Bit Test with Compliment (386+ only)







mnemonicsop xx xx xx xx xxswlenflags
BTC     rmw,ib      [386]0F BA /7 d0 d1 i0 4~6——–
BTC     rmw,rw      [386]0F BB mr d0 d1 3~5——–



Usage
BTC     dest,src

Modifies flags
CF



The destination bit indexed by the source value is copied into the

Carry Flag after being complimented (inverted).

BTR - Bit Test with Reset (386+ only)







mnemonicsop xx xx xx xx xxswlenflags
BTR     rmw,ib      [386]0F BA /6 d0 d1 i0 4~6——–
BTR     rmw,rw      [386]0F B3 mr d0 d1 3~5——–



Usage
BTR     dest,src

Modifies flags
CF



The destination bit indexed by the source value is copied into the

Carry Flag and then cleared in the destination.

BTS - Bit Test and Set (386+ only)







mnemonicsop xx xx xx xx xxswlenflags
BTS     rmw,ib      [386]0F BA /5 d0 d1 i0 4~6——–
BTS     rmw,rw      [386]0F AB mr d0 d1 3~5——–



Usage
BTS     dest,src

Modifies flags
CF



The destination bit indexed by the source value is copied into the

Carry Flag and then set in the destination.

CALL - Procedure Call









mnemonicsop xx xx xx xx xxswlenflags
CALL    npE8 o0 o1 3——–
CALL    rwFF /2 d0 d1 W2~4——–
CALL    DWORD PTR[rw]FF /3 d0 d1 W2~4——–
CALL    FAR PTR fp9A o0 o1 sl sh 5——–



Usage
CALL    destination

Modifies flags
None



Pushes Instruction Pointer (and Code Segment for far calls) onto

stack and loads Instruction Pointer with the address of proc-name.

Code continues with execution at CS:IP.

CBW - Convert Byte to Word






mnemonicsop xx xx xx xx xxswlenflags
CBW98 1——–



Usage
CBW

Modifies flags
None



Converts byte in AL to word Value in AX by extending sign of AL throughout register AH.

CDQ - Convert Double to Quad (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
CDQ               [32bit]66| 99 1+1——–



Usage
CDQ

Modifies flags
None



Converts signed DWORD in EAX to a signed quad word in EDX:EAX by

extending the high order bit of EAX throughout EDX

CLC - Clear Carry






mnemonicsop xx xx xx xx xxswlenflags
CLCF8 1——–



Usage
CLC

Modifies flags
CF



Clears the Carry Flag.

CLD - Clear Direction Flag






mnemonicsop xx xx xx xx xxswlenflags
CLDFC 1-0——



Usage
CLD

Modifies flags
DF



Clears the Direction Flag causing string instructions to increment the SI and DI index registers.

CLI - Clear Interrupt Flag (Disable Interrupts)






mnemonicsop xx xx xx xx xxswlenflags
CLIFA 1–0—–



Usage
CLI

Modifies flags
IF



Disables the maskable hardware interrupts by clearing the Interrupt

flag. NMI’s and software interrupts are not inhibited.

CLTS - Clear Task Switched Flag (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
CLTS                [286]0F 06 2——–



Usage
CLTS

Modifies flags
None



Clears the Task Switched Flag in the Machine Status Register. This

is a privileged operation and is generally used only by operating system code.

CMC - Complement Carry Flag






mnemonicsop xx xx xx xx xxswlenflags
CMCF5 1——–



Usage
CMC

Modifies flags
CF



Toggles (inverts) the Carry Flag

CMP - Compare














mnemonicsop xx xx xx xx xxswlenflags
CMP     AL,ib3C i0 B2o—szap
CMP     AX,iw3D i0 i1 W3o—szap
CMP     rb,rmb3A mr d0 d1 B2~4o—szap
CMP     rw,rmw3B mr d0 d1 W2~4o—szap
CMP     rmb,ib80 /7 d0 d1 i0NB3~5o—szap
CMP     rmw,iw81 /7 d0 d1 i0 i1NW4~6o—szap
CMP     rmw,ib83 /7 d0 d1 i0EW3~5o—szap
CMP     rmb,rb38 mr d0 d1 B2~4o—szap
CMP     rmw,rw39 mr d0 d1 W2~4o—szap



Usage
CMP     dest,src

Modifies flags
AF CF OF PF SF ZF



Subtracts source from destination and updates the flags but does

not save result. Flags can subsequently be checked for conditions.

CMPS - Compare String (Byte, Word or Doubleword)








mnemonicsop xx xx xx xx xxswlenflags
CMPSBA6 B1od–szap
CMPSWA7 W1od–szap
CMPSD             [32bit]66| A7 D1+1od–szap



Usage
CMPS    dest,src

CMPSB


CMPSW


CMPSD   (386+ only)

Modifies flags
AF CF OF PF SF ZF



Subtracts destination value from source without saving results.

Updates flags based on the subtraction and the index registers

(E)SI and (E)DI are incremented or decremented depending on the

state of the Direction Flag. CMPSB inc/decrements the index

registers by 1, CMPSW inc/decrements by 2, while CMPSD increments

or decrements by 4. The REP prefixes can be used to process

entire data items.

CMPXCHG/CMPXCHG8B - Compare and Exchange










mnemonicsop xx xx xx xx xxswlenflags
CMPXCHG rmb,rb      [486]0F A6 mr d0 d1 B3~5o—szap
CMPXCHG rmw,rw      [486]0F A7 mr d0 d1 W3~5o—szap
CMPXCHG rmb,rb      [486]0F B0 mr d0 d1 B3~5o—szap
CMPXCHG rmw,rw      [486]0F B1 mr d0 d1 W3~5o—szap
CMPXCHG8B rmq,rd     [P5]0F C7 mr d0 d1 3~5—–z–



Usage
CMPXCHG dest,src  (486+)

CMPXCHG8B dest, src (P5+)

Modifies flags
AF CF OF PF SF ZF



Compares the accumulator (8-32 bits) with “dest”. If equal the

“dest” is loaded with “src”, otherwise the accumulator is loaded

with “dest”.

CWD - Convert Word to Doubleword






mnemonicsop xx xx xx xx xxswlenflags
CWD99 1——–



Usage
CWD

Modifies flags
None



Extends sign of word in register AX throughout register DX forming

a doubleword quantity in DX:AX.

CWDE - Convert Word to Extended Doubleword (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
CWDE              [32bit]66| 98 1+1——–



Usage
CWDE

Modifies flags
None



Converts a signed word in AX to a signed doubleword in EAX by

extending the sign bit of AX throughout EAX.

DAA - Decimal Adjust for Addition






mnemonicsop xx xx xx xx xxswlenflags
DAA27 1—-szap



Usage
DAA

Modifies flags
AF CF PF SF ZF (OF undefined)



Corrects result (in AL) of a previous BCD addition operation.

Contents of AL are changed to a pair of packed decimal digits.

DAS - Decimal Adjust for Subtraction






mnemonicsop xx xx xx xx xxswlenflags
DAS2F 1—-szap



Usage
DAS

Modifies flags
AF CF PF SF ZF (OF undefined)



Corrects result (in AL) of a previous BCD subtraction operation.

Contents of AL are changed to a pair of packed decimal digits.

DEC - Decrement















mnemonicsop xx xx xx xx xxswlenflags
DEC     AX48 1o—szap
DEC     BP4C 1o—szap
DEC     BX4A 1o—szap
DEC     CX49 1o—szap
DEC     DI4F 1o—szap
DEC     DX49 1o—szap
DEC     rmbFE /1 d0 d1 2~4o—szap
DEC     rmwFF /1 d0 d1 2~4o—szap
DEC     SI4D 1o—szap
DEC     SP4B 1o—szap



Usage
DEC     dest

Modifies flags
AF OF PF SF ZF



Unsigned binary subtraction of one from the destination.

DIV - Divide







mnemonicsop xx xx xx xx xxswlenflags
DIV     rmbF6 /6 d0 d1 B2~4o—szap
DIV     rmwF7 /6 d0 d1 W2~4o—szap



Usage
DIV     src

Modifies flags
(AF,CF,OF,PF,SF,ZF undefined)



Unsigned binary division of accumulator by source. If the source

divisor is a byte value then AX is divided by “src” and the quotient

is placed in AL and the remainder in AH. If source operand is a word

value, then DX:AX is divided by “src” and the quotient is stored in AX

and the remainder in DX.

ENTER - Make Stack Frame (80188+)






mnemonicsop xx xx xx xx xxswlenflags
ENTER   iw,ib       [186]C8 i0 i1 i0 4——–



Usage
ENTER   locals,level

Modifies flags
None



Modifies stack for entry to procedure for high level language.

Operand “locals” specifies the amount of storage to be allocated

on the stack. “Level” specifies the nesting level of the routine.

Paired with the LEAVE instruction, this is an efficient method of

entry and exit to procedures.

A description of the floating point instructions is not available at yet.

The following table has been provided for op-codes:
















































































































































mnemonicsop xx xx xx xx xxswlenflags
F2XM1D9 F0 2——–
FABSD9 E1 2——–
FADDDE C1 2——–
FADD    mdrD8 /0 d0 d1 D2~4——–
FADD    mqrDC /0 d0 d1 Q2~4——–
FADD    st(i),stDC C0+i 2——–
FADD    st,st(i)D8 C0+i 2——–
FADDP   st(i),stDE C0+i 2——–
FBLD    mtrDF /4 d0 d1 2~4——–
FBSTP   mtrDF /6 d0 d1 2~4——–
FCHSD9 E0 2——–
FCLEX9B DB E2 3——–
FCOMD8 D1 2—–z-p
FCOM    mdrD8 /2 d0 d1 D2~4—–z-p
FCOM    mqrDC /2 d0 d1 Q2~4—–z-p
FCOM    st(i)D8 D0+i 2—–z-p
FCOMPD8 D9 2—–z-p
FCOMP   mdrD8 /3 d0 d1 D2~4—–z-p
FCOMP   mqrDC /3 d0 d1 Q2~4—–z-p
FCOMP   st(i)D8 D8+i 2—–z-p
FCOMPPDE D9 2—–z-p
FCOS                [387]D9 FF 2——–
FDECSTPD9 F6 2——–
FDISI9B DB E1 3——–
FDIV    mdrD8 /6 d0 d1 D2~4——–
FDIV    mqrDC /6 d0 d1 Q2~4——–
FDIV    st(i),stDC F8+i 2——–
FDIV    st,st(i)DC F0+i 2——–
FDIVPDE F9 2——–
FDIVP   st(i),stDE F8+i 2——–
FDIVR   mdrD8 /7 d0 d1 D2~4——–
FDIVR   mqrDC /7 d0 d1 Q2~4——–
FDIVR   st(i),stDC F0+i 2——–
FDIVR   st,st(i)DC F8+i 2——–
FDIVRPDE F1 2——–
FDIVRP  st(i),stDE F0+i 2——–
FENI9B DB E0 3——–
FFREE   st(i)DD C0+i 2——–
FIADD   mwDE /0 d0 d1 W2~4——–
FIADD   mdDA /0 d0 d1 D2~4——–
FICOM   mdrDE /2 d0 d1 D2~4—–z-p
FICOM   mqrDA /2 d0 d1 Q2~4—–z-p
FICOMP  mdDE /3 d0 d1 D2~4—–z-p
FICOMP  mqDA /3 d0 d1 Q2~4—–z-p
FIDIV   mwDE /6 d0 d1 W2~4——–
FIDIV   mdDA /6 d0 d1 D2~4——–
FIDIVR  mwDE /7 d0 d1 W2~4——–
FIDIVR  mdDA /7 d0 d1 D2~4——–
FILD    mwDF /0 d0 d1 W2~4——–
FILD    mdDB /0 d0 d1 D2~4——–
FILD    mqDF /5 d0 d1 Q2~4——–
FIMUL   mwDE /1 d0 d1 W2~4——–
FIMUL   mdDA /1 d0 d1 D2~4——–
FINCSTPD9 F7 2——–
FINIT9B DB E3 3——–
FIST    mwDF /2 d0 d1 W2~4——–
FIST    mdDB /2 d0 d1 D2~4——–
FISTP   mwDF /3 d0 d1 W2~4——–
FISTP   mdDB /3 d0 d1 D2~4——–
FISTP   mqDF /7 d0 d1 Q2~4——–
FISUB   mwDE /4 d0 d1 W2~4——–
FISUB   mdDA /4 d0 d1 D2~4——–
FISUBR  mwDE /5 d0 d1 W2~4——–
FISUBR  mdDA /5 d0 d1 D2~4——–
FLD     mdrD9 /0 d0 d1 D2~4——–
FLD     mqrDD /0 d0 d1 Q2~4——–
FLD     mtrDB /5 d0 d1 T2~4——–
FLD     st(i)D9 C0+i 2——–
FLD1D9 E8 2——–
FLDCW   mwD9 /5 d0 d1 W2~4——–
FLDENV  m14D9 /4 d0 d1 2~4——–
FLDL2ED9 EA 2——–
FLDL2TD9 E9 2——–
FLDLG2D9 EC 2——–
FLDLN2D9 ED 2——–
FLDPID9 EB 2——–
FLDZD9 EE 2——–
FMULDE C9 2——–
FMUL    mdrD8 /1 d0 d1 D2~4——–
FMUL    mqrDC /1 d0 d1 Q2~4——–
FMUL    st(i),stDC C8+i 2——–
FMUL    st,st(i)D8 C8+i 2——–
FMULP   st(i),stDE C8+i 2——–
FNCLEXDB E2 2——–
FNDISIDB E1 2——–
FNENIDB E0 2——–
FNINITDB E3 2——–
FNOPD9 D0 2——–
FNSAVE  m94DD /6 d0 d1 2~4——–
FNSTCW  mwD9 /7 d0 d1 W2~4——–
FNSTENV m14D9 /6 d0 d1 2~4——–
FNSTSW  axDF E0 2——–
FNSTSW  mwDD /7 d0 d1 W2~4——–
FPATAND9 F3 2——–
FPREMD9 F8 2——–
FPREM1              [387]D9 F5 2——–
FPTAND9 F2 2——–
FRNDINTD9 FC 2——–
FRSTOR  m94DD /4 d0 d1 2~4——–
FSAVE   m949B DD /6 d0 d1 3~5——–
FSCALED9 FD 2——–
FSETPMDB E4 2——–
FSIN                [387]D9 FE 2——–
FSINCOS             [387]D9 FB 2——–
FSQRTD9 FA 2——–
FST     mdrD9 /2 d0 d1 D2~4——–
FST     mqrDD /2 d0 d1 Q2~4——–
FST     st(i)DD D0+i 2——–
FSTCW   mw9B D9 /7 d0 d1 W3~5——–
FSTENV  m149B D9 /6 d0 d1 3~5——–
FSTP    mdrD9 /3 d0 d1 D2~4——–
FSTP    mqrDD /3 d0 d1 Q2~4——–
FSTP    mtrDB /7 d0 d1 T2~4——–
FSTP    st(i)DD D8+i 2——–
FSTSW   ax9B DF E0 3——–
FSTSW   mw9B DD /7 d0 d1 W3~5——–
FSUB    mdrD8 /4 d0 d1 D2~4——–
FSUB    mqrDC /4 d0 d1 Q2~4——–
FSUB    st(i),stDC E8+i 2——–
FSUB    st,st(i)D8 E0+i 2——–
FSUBPDE E9 2——–
FSUBP   st(i),stDE E8+i 2——–
FSUBRDE E1 2——–
FSUBR   mdrD8 /5 d0 d1 D2~4——–
FSUBR   mqrDC /5 d0 d1 Q2~4——–
FSUBR   st(i),stDC E0+i 2——–
FSUBR   st,st(i)D8 E8+i 2——–
FSUBRP  st(i),stDE E0+i 2——–
FTSTD9 E4 2——–
FUCOM               [387]DD E1 2—–z-p
FUCOM   st(i)       [387]DD E0+i 2—–z-p
FUCOMP  st(i)       [387]DD E8+i 2—–z-p
FUCOMPP             [387]DA E9 2—–z-p
FXAMD9 E5 2——–
FXCHD9 C9 2——–
FXCH    st(i)D9 C8+i 2——–
FXTRACTD9 F4 2——–
FYL2XD9 F1 2——–
FYL2XP1D9 F9 2——–

ESC - Escape






mnemonicsop xx xx xx xx xxswlenflags
ESC? 2——–



Usage
ESC     immed,src

Modifies flags
None



Provides access to the data bus for other resident processors.

The CPU treats it as a NOP but places memory operand on bus.

HLT - Halt CPU






mnemonicsop xx xx xx xx xxswlenflags
HLTF4 1——–



Usage
HLT

Modifies flags
None



Halts CPU until RESET line is activated, NMI or maskable interrupt

received. The CPU becomes dormant but retains the current CS:IP

for later restart.

IDIV - Signed Integer Division







mnemonicsop xx xx xx xx xxswlenflags
IDIV    rmbF6 /7 d0 d1 B2~4o—szap
IDIV    rmwF7 /7 d0 d1 W2~4o—szap



Usage
IDIV   src

Modifies flags
(AF,CF,OF,PF,SF,ZF undefined)



Signed binary division of accumulator by source. If source is a

byte value, AX is divided by “src” and the quotient is stored in

AL and the remainder in AH. If source is a word value, DX:AX is

divided by “src”, and the quotient is stored in AL and the

remainder in DX.

IMUL - Signed Multiply

















mnemonicsop xx xx xx xx xxswlenflags
IMUL    rb,rmb      [386]0F AF mr d0 d1 B3~5o—szap
IMUL    rd,ib6B mr i0 W3o—szap
IMUL    rd,id69 mr i0 i1 i2 i3 W6o—szap
IMUL    rd,rmd,ib6B mr d0 d1 i0 W3~5o—szap
IMUL    rd,rmd,id69 mr d0 d1 i0~i3 W6~8o—szap
IMUL    rmbF6 /5 d0 d1 B2~4o—szap
IMUL    rmwF7 /5 d0 d1 W2~4o—szap
IMUL    rw,ib6B mr i0 B3o—szap
IMUL    rw,iw69 mr i0 i1 B4o—szap
IMUL    rw,rmw      [386]0F AF mr d0 d1 W3~5o—szap
IMUL    rw,rmw,ib6B mr d0 d1 i0 B3~5o—szap
IMUL    rw,rmw,iw69 mr d0 d1 i0 i1 B4~6o—szap



Usage
IMUL    src

IMUL    src,immed  (286+ only)


IMUL    dest,src,immed8  (286+ only)


IMUL    dest,src  (386+ only)

Modifies flags
CF OF (AF,PF,SF,ZF undefined)



Signed multiplication of accumulator by “src” with result placed

in the accumulator. If the source operand is a byte value, it

is multiplied by AL and the result stored in AX. If the source

operand is a word value it is multiplied by AX and the result is

stored in DX:AX. Other variations of this instruction allow

specification of source and destination registers as well as a

third immediate factor.

IN - Input Byte or Word From Port









mnemonicsop xx xx xx xx xxswlenflags
IN      AL,ibE4 i0 B2——–
IN      AL,DXEC B1——–
IN      AX,ibE5 i0 W2——–
IN      AX,DXED W1——–



Usage
IN      accum,port

Modifies flags
None



A byte, word or dword is read from “port” and placed in AL, AX or

EAX respectively. If the port number is in the range of 0-255

it can be specified as an immediate, otherwise the port number

must be specified in DX. Valid port ranges on the PC are 0-1024,

though values through 65535 may be specified and recognized by

third party vendors and PS/2’s.

INC - Increment















mnemonicsop xx xx xx xx xxswlenflags
INC     AX40 1o—szap
INC     CX41 1o—szap
INC     DX42 1o—szap
INC     BX43 1o—szap
INC     SP44 1o—szap
INC     BP45 1o—szap
INC     SI46 1o—szap
INC     DI47 1o—szap
INC     rmbFE /0 d0 d1 2~4o—szap
INC     rmwFF /0 d0 d1 2~4o—szap



Usage
INC     dest

Modifies flags
AF OF PF SF ZF



Adds one to destination unsigned binary operand.

INS - Input String from Port (80188+)








mnemonicsop xx xx xx xx xxswlenflags
INSB                [186]6C B1——–
INSW                [186]6D W1——–
INSD              [32bit]66| 6D D1+1——–



Usage
INS     dest,port

INSB


INSW


INSD  (386+ only)

Modifies flags
None



Loads data from port to the destination ES:(E)DI (even if a

destination operand is supplied). (E)DI is adjusted by the size

of the operand and increased if the Direction Flag is cleared and

decreased if the Direction Flag is set. For INSB, INSW, INSD no

operands are allowed and the size is determined by the mnemonic.

INT - Interrupt







mnemonicsop xx xx xx xx xxswlenflags
INT     3CC 1–00—-
INT     ibCD i0 2–00—-



Usage
INT     num

Modifies flags
TF IF



Initiates a software interrupt by pushing the flags, clearing the

Trap and Interrupt Flags, pushing CS followed by IP and loading

CS:IP with the value found in the interrupt vector table. Execution

then begins at the location addressed by the new CS:IP

INTO - Interrupt on Overflow






mnemonicsop xx xx xx xx xxswlenflags
INTOCE 1–00—-



Usage
INTO

Modifies flags
IF TF



If the Overflow Flag is set this instruction generates an INT 4

which causes the code addressed by 0000:0010 to be executed.

INVD - Invalidate Cache (486+ only)






mnemonicsop xx xx xx xx xxswlenflags
INVD                [486]0F 08 2——–



Usage
INVD

Modifies flags
none



Flushes CPU internal cache. Issues special function bus cycle

which indicates to flush external caches. Data in write-back

external caches is lost.


INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+ only)






mnemonicsop xx xx xx xx xxswlenflags
INVLPG  m           [486]0F 01 /7 3——–



Usage
INVLPG

Modifies flags
none



Invalidates a single page table entry in the Translation

Look-Aside Buffer. Intel warns that this instruction may be

implemented differently on future processors.

IRET/IRETD - Interrupt Return







mnemonicsop xx xx xx xx xxswlenflags
IRETCF 1oditszap
IRETD             [32bit]66| CF 1+1oditszap



Usage
IRET

IRETD  (386+ only)

Modifies flags
AF CF DF IF PF SF TF ZF



Returns control to point of interruption by popping IP, CS

and then the Flags from the stack and continues execution at

this location. CPU exception interrupts will return to the

instruction that cause the exception because the CS:IP placed

on the stack during the interrupt is the address of the offending

instruction.

JA/JNBE - Jump Above / Jump Not Below or Equal







mnemonicsop xx xx xx xx xxswlenflags
JA      ll          [386]0F 87 r0 r1 4——–
JA      sl77 r0 2——–



Usage
JA      label

JNBE    label

Modifies flags
None



Causes execution to branch to “label” if the Carry Flag and Zero Flag

are both clear. Unsigned comparison.


*) JA/JNBE are different mnemonics for the same instruction

JAE/JNB - Jump Above or Equal / Jump on Not Below







mnemonicsop xx xx xx xx xxswlenflags
JAE     ll          [386]0F 83 r0 r1 4——–
JAE     sl73 r0 2——–



Usage
JAE     label

JNB     label

Modifies flags
None



Causes execution to branch to “label” if the Carry Flag is clear.

Functionally similar to JNC. Unsigned comparison.


*) JAE/JNB are different mnemonics for the same instruction

JB/JNAE - Jump Below / Jump Not Above or Equal







mnemonicsop xx xx xx xx xxswlenflags
JB      ll          [386]0F 82 r0 r1 4——–
JB      sl72 r0 2——–



Usage
JB      label

JNAE    label

Modifies flags
None



Causes execution to branch to “label” if the Carry Flag is set.

Functionally similar to JC. Unsigned comparison.


*) JB/JNAE are different mnemonics for the same instruction

JBE/JNA - Jump Below or Equal / Jump Not Above







mnemonicsop xx xx xx xx xxswlenflags
JBE     ll          [386]0F 86 r0 r1 4——–
JBE     sl76 r0 2——–



Usage
JBE     label

JNA     label

Modifies flags
None



Causes execution to branch to “label” if the Carry Flag or

the Zero Flag is set. Unsigned comparison.


*) JBE/JNA are different mnemonics for the same instruction

JC - Jump on Carry







mnemonicsop xx xx xx xx xxswlenflags
JC      ll          [386]0F 82 r0 r1 4——–
JC      sl72 r0 2——–



Usage
JC      label

Modifies flags
None



Causes execution to branch to “label” if the Carry Flag is set.

Functionally similar to JB and JNAE. Unsigned comparison.

JCXZ/JECXZ - Jump if Register (E)CX is Zero







mnemonicsop xx xx xx xx xxswlenflags
JCXZ    slE3 r0 2——–
JECXZ   sl        [32bit]67| E3 r0 1+2——–



Usage
JCXZ    label

JECXZ   label  (386+ only)

Modifies flags
None



Causes execution to branch to “label” if register CX is zero. Uses unsigned comparison.

JE/JZ - Jump Equal / Jump Zero







mnemonicsop xx xx xx xx xxswlenflags
JE      ll          [386]0F 84 r0 r1 4——–
JE      sl74 r0 2——–



Usage
JE      label

JZ      label

Modifies flags
None



Causes execution to branch to “label” if the Zero Flag is set. Uses unsigned comparison.


*) JE/JZ are different mnemonics for the same instruction

JG/JNLE - Jump Greater / Jump Not Less or Equal







mnemonicsop xx xx xx xx xxswlenflags
JG      ll          [386]0F 8F r0 r1 4——–
JG      sl7F r0 4——–



Usage
JG      label

JNLE    label

Modifies flags
None



Causes execution to branch to “label” if the Zero Flag is clear or

the Sign Flag equals the Overflow Flag. Signed comparison.


*) JG/JNLE are different mnemonics for the same instruction

JGE/JNL - Jump Greater or Equal / Jump Not Less







mnemonicsop xx xx xx xx xxswlenflags
JGE     ll          [386]0F 8D r0 r1 4——–
JGE     sl7D r0 4——–



Usage
JGE     label

JNL     label

Modifies flags
None



Causes execution to branch to “label” if the Sign Flag equals

the Overflow Flag. Signed comparison.


*) JGE/JNL are different mnemonics for the same instruction

JL/JNGE - Jump Less / Jump Not Greater or Equal







mnemonicsop xx xx xx xx xxswlenflags
JL      ll          [386]0F 8C r0 r1 4——–
JL      sl7C r0 2——–



Usage
JL      label

JNGE    label

Modifies flags
None



Causes execution to branch to “label” if the Sign Flag is not equal

to Overflow Flag. Unsigned comparison.


*) JL/JNGE are different mnemonics for the same instruction

JLE/JNG - Jump Less or Equal / Jump Not Greater







mnemonicsop xx xx xx xx xxswlenflags
JLE     ll          [386]0F 8E r0 r1 4——–
JLE     sl7E r0 2——–



Usage
JLE     label

JNG     label

Modifies flags
None



Causes execution to branch to “label” if the Zero Flag is set or the

Sign Flag is not equal to the Overflow Flag. Signed comparison.


*) JLE/JNG are different mnemonics for the same instruction

JMP - Unconditional Jump










mnemonicsop xx xx xx xx xxswlenflags
JMP     SHORT slEB r0 2——–
JMP     npE9 o0 o1 3——–
JMP     rmwFF /4 d0 d1 2~4——–
JMP     DWORD PTR [rmw]FF /5 d0 d1 2~4——–
JMP     FAR PTR fpEA o0 o1 s0 s1 5——–



Usage
JMP     target

Modifies flags
None



Unconditionally transfers control to “label”. Jumps by default

are within -32768 to 32767 bytes from the instruction following

the jump. NEAR and SHORT jumps cause the IP to be updated while FAR

jumps cause CS and IP to be updated.

JNC - Jump Not Carry







mnemonicsop xx xx xx xx xxswlenflags
JNC     ll          [386]0F 83 r0 r1 4——–
JNC     sl73 r0 2——–



Usage
JNC     label

Modifies flags
None



Causes execution to branch to “label” if the Carry Flag is clear.

Functionally similar to JAE or JNB. Unsigned comparison.

JNE/JNZ - Jump Not Equal / Jump Not Zero







mnemonicsop xx xx xx xx xxswlenflags
JNE     ll          [386]0F 85 r0 r1 4——–
JNE     sl75 r0 2——–



Usage
JNE     label

JNZ     label

Modifies flags
None



Causes execution to branch to “label” if the Zero Flag is clear. Unsigned comparison.


*) JNE/JNZ are different mnemonics for the same instruction

JNO - Jump Not Overflow







mnemonicsop xx xx xx xx xxswlenflags
JNO     ll          [386]0F 81 r0 r1 4——–
JNO     sl71 r0 2——–



Usage
JNO     label

Modifies flags
None



Causes execution to branch to “label” if the Overflow Flag is clear. Signed comparison.


JNS - Jump Not Signed







mnemonicsop xx xx xx xx xxswlenflags
JNS     ll          [386]0F 89 r0 r1 4——–
JNS     sl79 r0 2——–



Usage
JNS     label

Modifies flags
None



Causes execution to branch to “label” if the Sign Flag is clear. Signed comparison.

JNP/JPO - Jump Not Parity / Jump Parity Odd







mnemonicsop xx xx xx xx xxswlenflags
JNP     ll          [386]0F 8B r0 r1 4——–
JNP     sl7B r0 2——–



Usage
JNP     label

JPO     label

Modifies flags
None



Causes execution to branch to “label” if the Parity Flag is clear. Unsigned comparison.


*) JNE/JPO are different mnemonics for the same instruction

JO - Jump on Overflow







mnemonicsop xx xx xx xx xxswlenflags
JO      ll          [386]0F 80 r0 r1 4——–
JO      sl70 r0 2——–



Usage
JO  label

Modifies flags
None



Causes execution to branch to “label” if the Overflow Flag is set. Signed comparison.

JP/JPE - Jump on Parity / Jump on Parity Even







mnemonicsop xx xx xx xx xxswlenflags
JP      ll          [386]0F 8A r0 r1 4——–
JP      sl7A r0 2——–



Usage
JP      label

JPE     label

Modifies flags
None



Causes execution to branch to “label” if the Parity Flag is set. Unsigned comparison.


*) JP/JPE are different mnemonics for the same instruction

JS - Jump Signed







mnemonicsop xx xx xx xx xxswlenflags
JS      ll          [386]0F 88 r0 r1 4——–
JS      sl78 r0 2——–



Usage
JS      label

Modifies flags
None



Causes execution to branch to “label” if the Sign Flag is set. Signed comparison.

LAHF - Load Register AH From Flags






mnemonicsop xx xx xx xx xxswlenflags
LAHF9F 1——–



Usage
LAHF

Modifies flags
None



Copies bits 0-7 of the flags register into AH. This includes flags

AF, CF, PF, SF and ZF other bits are undefined.

LAR - Load Access Rights (286+ protected)






mnemonicsop xx xx xx xx xxswlenflags
LAR     rw,rmw      [286]0F 02 mr d0 d1 3~5—–z–



Usage
LAR     dest,src

Modifies flags
ZF



The high byte of the of the destination register is overwritten by

the value of the access rights byte and the low order byte is zeroed

depending on the selection in the source operand. The Zero Flag is

set if the load operation is successful.

LDS - Load Pointer Using DS






mnemonicsop xx xx xx xx xxswlenflags
LDS     rw,mdC5 mr d0 d1 2~4——–



Usage
LDS     dest,src

Modifies flags
None



Loads 32-bit pointer from memory source to destination register

and DS. The offset is placed in the destination register and the

segment is placed in DS. To use this instruction the word at the

lower memory address must contain the offset and the word at the

higher address must contain the segment. This simplifies the loading

of far pointers from the stack and the interrupt vector table.

LEA - Load Effective Address






mnemonicsop xx xx xx xx xxswlenflags
LEA     rw,mw8D mr d0 d1 2~4——–



Usage
LEA     dest,src

Modifies flags
None



Transfers offset address of “src” to the destination register.

LEAVE - Restore Stack for Procedure Exit (80188+)






mnemonicsop xx xx xx xx xxswlenflags
LEAVE               [186]C9 1——–



Usage
LEAVE

Modifies flags
None



Releases the local variables created by the previous ENTER

instruction by restoring SP and BP to their condition before

the procedure stack frame was initialized.

LES - Load Pointer Using ES






mnemonicsop xx xx xx xx xxswlenflags
LES     rw,mdC4 mr d0 d1 2~4——–



Usage
LES     dest,src

Modifies flags
None



Loads 32-bit pointer from memory source to destination register

and ES. The offset is placed in the destination register and the

segment is placed in ES. To use this instruction the word at the

lower memory address must contain the offset and the word at the

higher address must contain the segment. This simplifies the loading

of far pointers from the stack and the interrupt vector table.

LFS - Load Pointer Using FS (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
LFS     rw,md       [386]0F B4 mr d0 d1 3~5——–



Usage
LFS     dest,src

Modifies flags
None



Loads 32-bit pointer from memory source to destination register

and FS. The offset is placed in the destination register and the

segment is placed in FS. To use this instruction the word at the

lower memory address must contain the offset and the word at the

higher address must contain the segment. This simplifies the loading

of far pointers from the stack and the interrupt vector table.

LGDT - Load Global Descriptor Table (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
LGDT    mw          [286]0F 01 /2 d0 d1 3~5——–



Usage
LGDT    src

Modifies flags
None



Loads a value from an operand into the Global Descriptor Table (GDT) register.

LIDT - Load Interrupt Descriptor Table (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
LIDT    mw          [286]0F 01 /3 d0 d1 3~5——–



Usage
LIDT    src

Modifies flags
None



Loads a value from an operand into the Interrupt Descriptor Table (IDT) register.

LGS - Load Pointer Using GS (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
LGS     rw,md       [386]0F B5 mr d0 d1 3~5——–



Usage
LGS     dest,src

Modifies flags
None



Loads 32-bit pointer from memory source to destination register

and GS. The offset is placed in the destination register and the

segment is placed in GS. To use this instruction the word at the

lower memory address must contain the offset and the word at the

higher address must contain the segment. This simplifies the loading

of far pointers from the stack and the interrupt vector table.

LLDT - Load Local Descriptor Table (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
LLDT    rmw         [286]0F 00 /2 d0 d1 3~5——–



Usage
LLDT    src

Modifies flags
None



Loads a value from an operand into the Local Descriptor Table Register (LDTR).

LMSW - Load Machine Status Word (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
LMSW    rmw         [286]0F 01 /6 d0 d1 3~5——–



Usage
LMSW    src

Modifies flags
None



Loads the Machine Status Word (MSW) from data found at “src”

LOCK - Lock Bus






mnemonicsop xx xx xx xx xxswlenflags
LOCKF0 1——–



Usage
LOCK

LOCK: (386+ prefix)

Modifies flags
None



This instruction is a prefix that causes the CPU assert bus lock

signal during the execution of the next instruction. Used to

avoid two processors from updating the same data location. The

286 always asserts lock during an XCHG with memory operands. This

should only be used to lock the bus prior to XCHG, MOV, IN and

OUT instructions.

LODS - Load String (Byte, Word or Double)








mnemonicsop xx xx xx xx xxswlenflags
LODSBAC B1——–
LODSWAD W1——–
LODSD             [32bit]66| AD D1+1——–



Usage
LODS    src

LODSB


LODSW


LODSD  (386+ only)

Modifies flags
None



Transfers string element addressed by DS:SI (even if an operand is

supplied) to the accumulator. SI is incremented based on the size

of the operand or based on the instruction used. If the Direction

Flag is set SI is decremented, if the Direction Flag is clear SI

is incremented. Use with REP prefixes.

LOOP - Decrement CX and Loop if CX Not Zero






mnemonicsop xx xx xx xx xxswlenflags
LOOP    slE2 r0 2——–



Usage
LOOP    label

Modifies flags
None



Decrements CX by 1 and transfers control to “label” if CX is not

Zero. The “label” operand must be within -128 or 127 bytes of the

instruction following the loop instruction

LOOPE/LOOPZ - Loop While Equal / Loop While Zero






mnemonicsop xx xx xx xx xxswlenflags
LOOPE   slE1 r0 2——–



Usage
LOOPE   label

LOOPZ   label

Modifies flags
None



Decrements CX by 1 (without modifying the flags) and transfers

control to “label” if CX != 0 and the Zero Flag is set. The

“label” operand must be within -128 or 127 bytes of the instruction

following the loop instruction.


*) LOOPE/LOOPZ are different mnemonics for the same instruction

LOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not Equal






mnemonicsop xx xx xx xx xxswlenflags
LOOPNZ  slE0 r0 2——–



Usage
LOOPNZ  label

LOOPNE  label

Modifies flags
None



Decrements CX by 1 (without modifying the flags) and transfers

control to “label” if CX != 0 and the Zero Flag is clear. The

“label” operand must be within -128 or 127 bytes of the instruction

following the loop instruction.


*) LOOPNZ/LOOPNE are different mnemonics for the same instruction

LSL - Load Segment Limit (286+ protected)






mnemonicsop xx xx xx xx xxswlenflags
LSL     rw,rmw      [286]0F 03 mr d0 d1 3~5——–



Usage
LSL     dest,src

Modifies flags
ZF



Loads the segment limit of a selector into the destination register

if the selector is valid and visible at the current privilege level.

If loading is successful the Zero Flag is set, otherwise it is

cleared.

LSS - Load Pointer Using SS (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
LSS     rw,md       [386]0F B2 mr d0 d1 3~5——–



Usage
LSS     dest,src

Modifies flags
None



Loads 32-bit pointer from memory source to destination register

and SS. The offset is placed in the destination register and the

segment is placed in SS. To use this instruction the word at the

lower memory address must contain the offset and the word at the

higher address must contain the segment. This simplifies the loading

of far pointers from the stack and the interrupt vector table.

LTR - Load Task Register (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
LTR     rmw         [286]0F 00 /3 d0 d1 3~5——–



Usage
LTR     src

Modifies flags
None



Loads the current task register with the value specified in “src”.

MOV - Move Byte or Word







































mnemonicsop xx xx xx xx xxswlenflags
MOV     AL,rmbA0 d0 d1 B3——–
MOV     AX,rmwA1 d0 d1 W3——–
MOV     AL,ibB0 i0 B2——–
MOV     AH,ibB4 i0 B2——–
MOV     AX,iwB8 i0 i1 W3——–
MOV     CL,ibB1 i0 B2——–
MOV     CH,ibB5 i0 B2——–
MOV     CX,iwB9 i0 i1 W3——–
MOV     DL,ibB2 i0 B2——–
MOV     DH,ibB6 i0 B2——–
MOV     DX,iwBA i0 i1 W3——–
MOV     BL,ibB3 i0 B2——–
MOV     BH,ibB7 i0 B2——–
MOV     BX,iwBB i0 i1 W3——–
MOV     SP,iwBC i0 i1 W3——–
MOV     BP,iwBD i0 i1 W3——–
MOV     SI,iwBE i0 i1 W3——–
MOV     DI,iwBF i0 i1 W3——–
MOV     cr,rd       [386]0F 22 mr 3——–
MOV     rd,cr       [386]0F 20 mr 3——–
MOV     dr,rd       [386]0F 23 mr 3——–
MOV     rd,dr       [386]0F 21 mr 3——–
MOV     tr,rd       [386]0F 26 mr 2——–
MOV     rd,tr       [386]0F 24 mr 3——–
MOV     rb,rmb8A mr d0 d1 B2~4——–
MOV     rmb,rb88 mr d0 d1 B2~4——–
MOV     rmb,ALA2 d0 d1 B3——–
MOV     rmw,AXA3 d0 d1 W3——–
MOV     rmb,ibC6 mr d0 d1 i0 B3~5——–
MOV     rmw,iwC7 mr d0 d1 i0 i1 W4~6——–
MOV     rmw,rw89 mr d0 d1 W2~4——–
MOV     rw,rmw8B mr d0 d1 W2~4——–
MOV     rmw,sr8C mr d0 d1 2~4——–
MOV     sr,rmw8E mr d0 d1 2~4——–



Usage
MOV     dest,src

Modifies flags
None



Copies byte or word from the source operand to the destination

operand. If the destination is SS interrupts are disabled except

on early buggy 808x CPUs. Some CPUs disable interrupts if the

destination is any of the segment registers

MOVS - Move String (Byte or Word)








mnemonicsop xx xx xx xx xxswlenflags
MOVSBA4 B1——–
MOVSWA5 W1——–
MOVSD             [32bit]66| A5 D1+1——–



Usage
MOVS    dest,src

MOVSB


MOVSW


MOVSD  (386+ only)

Modifies flags
None



Copies data from addressed by DS:SI (even if operands are given) to

the location ES:DI destination and updates SI and DI based on the

size of the operand or instruction used. SI and DI are incremented

when the Direction Flag is cleared and decremented when the Direction

Flag is Set. Use with REP prefixes.

MOVSX - Move with Sign Extend (386+ only)







mnemonicsop xx xx xx xx xxswlenflags
MOVSX   rw,rmb      [386]0F BE mr d0 d1 B3~5——–
MOVSX   rd,rmw      [386]0F BF mr d0 d1 W3~5——–



Usage
MOVSX   dest,src

Modifies flags
None



Copies the value of the source operand to the destination register

with the sign extended.

MOVZX - Move with Zero Extend (386+ only)







mnemonicsop xx xx xx xx xxswlenflags
MOVZX   rw,rmb      [386]0F B6 mr d0 d1 B3~5——–
MOVZX   rd,rmw      [386]0F B7 mr d0 d1 B3~5——–



Usage
MOVZX   dest,src

Modifies flags
None



Copies the value of the source operand to the destination register

with the zeroes extended.

MUL - Unsigned Multiply







mnemonicsop xx xx xx xx xxswlenflags
MUL     rmbF6 /4 d0 d1 B2~4o—szap
MUL     rmwF7 /4 d0 d1 W2~4o—szap



Usage
MUL     src

Modifies flags
CF OF (AF,PF,SF,ZF undefined)



Unsigned multiply of the accumulator by the source. If “src” is

a byte value, then AL is used as the other multiplicand and the

result is placed in AX. If “src” is a word value, then AX is

multiplied by “src” and DX:AX receives the result. If “src” is

a double word value, then EAX is multiplied by “src” and EDX:EAX

receives the result. The 386+ uses an early out algorithm which

makes multiplying any size value in EAX as fast as in the 8 or 16

bit registers.

NEG - Two’s Complement Negation







mnemonicsop xx xx xx xx xxswlenflags
NEG     rmbF6 /3 d0 d1 B2~4o—szap
NEG     rmwF7 /3 d0 d1 W2~4o—szap



Usage
NEG     dest

Modifies flags
AF CF OF PF SF ZF



Subtracts the destination from 0 and saves the 2s complement of

“dest” back into “dest”.

NOP - No Operation






mnemonicsop xx xx xx xx xxswlenflags
NOP90 1——–



Usage
NOP

Modifies flags
None



This is a do nothing instruction. It results in occupation of both

space and time and is most useful for patching :-) code [segments].

NOT - One’s Compliment Negation (Logical NOT)







mnemonicsop xx xx xx xx xxswlenflags
NOT     rmbF6 /2 d0 d1 B2~4——–
NOT     rmwF7 /2 d0 d1 W2~4——–



Usage
NOT     dest

Modifies flags
None



Inverts the bits of the “dest” operand forming the 1s complement.

OR - Inclusive Logical OR














mnemonicsop xx xx xx xx xxswlenflags
OR      AL,ib0C i0 B2o—szap
OR      AX,iw0D i0 i1 W3o—szap
OR      rb,rmb0A mr d0 d1 B2~4o—szap
OR      rw,rmw0B mr d0 d1 W2~4o—szap
OR      rmb,ib80 /1 d0 d1 i0NB3~5o—szap
OR      rmw,iw81 /1 d0 d1 i0 i1NW4~6o—szap
OR      rmw,ib83 /1 d0 d1 i0EW3~5o—szap
OR      rmb,rb08 mr d0 d1 B2~4o—szap
OR      rmw,rw09 mr d0 d1 W2~4o—szap



Usage
OR      dest,src

Modifies flags
CF OF PF SF ZF (AF undefined)



Logical inclusive OR of the two operands returning the result in

the destination. Any bit set in either operand will be set in the

destination.

OUT - Output Data to Port









mnemonicsop xx xx xx xx xxswlenflags
OUT     DX,ALEE B1——–
OUT     DX,AXEF W1——–
OUT     ib,ALE6 i0 B2——–
OUT     ib,AXE7 i0 W2——–



Usage
OUT     port,accum

Modifies flags
None



Transfers byte in AL,word in AX or dword in EAX to the specified

hardware port address. If the port number is in the range of 0-255

it can be specified as an immediate. If greater than 255 then the

port number must be specified in DX. Since the PC only decodes 10

bits of the port address, values over 1023 can only be decoded by

third party vendor equipment and also map to the port range 0-1023.

OUTS - Output String to Port (80188+ only)








mnemonicsop xx xx xx xx xxswlenflags
OUTSB               [186]6E B1——–
OUTSW               [186]6F W1——–
OUTSD             [32bit]66| 6F D1+1——–



Usage
OUTS    port,src

OUTSB


OUTSW


OUTSD  (386+ only)

Modifies flags
None



Transfers a byte, word or doubleword from “src” to the hardware

port specified in DX. For instructions with no operands the “src”

is located at DS:SI and SI is incremented or decremented by the

size of the operand or the size dictated by the instruction format.

When the Direction Flag is set SI is decremented, when clear, SI is

incremented. If the port number is in the range of 0-255 it can

be specified as an immediate. If greater than 255 then the port

number must be specified in DX. Since the PC only decodes 10 bits

of the port address, values over 1023 can only be decoded by third

party vendor equipment and also map to the port range 0-1023.

POP - Pop Word off Stack



















mnemonicsop xx xx xx xx xxswlenflags
POP     AX58 1——–
POP     CX59 1——–
POP     DX5A 1——–
POP     BX5B 1——–
POP     SP5C 1——–
POP     BP5D 1——–
POP     SI5E 1——–
POP     DI5F 1——–
POP     ES07 1——–
POP     SS17 1——–
POP     DS1F 1——–
POP     FS          [386]0F A1 2——–
POP     GS          [386]0F A9 2——–
POP     rmw8F mr d0 d1 2~4——–



Usage
POP     dest

Modifies flags
None



Transfers word at the current stack top (SS:SP) to the destination

then increments SP by two to point to the new stack top. CS is not

a valid destination.

POPA/POPAD - Pop All Registers onto Stack (80188+ only)







mnemonicsop xx xx xx xx xxswlenflags
POPA                [186]61 1——–
POPAD             [32bit]66| 61 1+1——–



Usage
POPA

POPAD  (386+ only)

Modifies flags
None



Pops the top 8 words off the stack into the 8 general purpose 16/32

bit registers. Registers are popped in the following order: (E)DI,

(E)SI, (E)BP, (E)SP, (E)DX, (E)CX and (E)AX. The (E)SP value popped

from the stack is actually discarded.

POPF/POPFD - Pop Flags off Stack







mnemonicsop xx xx xx xx xxswlenflags
POPF9D 1oditszap
POPFD             [32bit]66| 9D 1+1oditszap



Usage
POPF

POPFD  (386+ only)

Modifies flags
all flags



Pops word/doubleword from stack into the Flags Register and then

increments SP by 2 (for POPF) or 4 (for POPFD).

PUSH - Push Word onto Stack






















mnemonicsop xx xx xx xx xxswlenflags
PUSH    AX50 1——–
PUSH    CX51 1——–
PUSH    DX52 1——–
PUSH    BX53 1——–
PUSH    SP54 1——–
PUSH    BP55 1——–
PUSH    SI56 1——–
PUSH    DI57 1——–
PUSH    ES06 1——–
PUSH    CS0E 1——–
PUSH    SS16 1——–
PUSH    DS1E 1——–
PUSH    FS          [386]0F A0 2——–
PUSH    GS          [386]0F A8 2——–
PUSH    ib          [186]6A i0E2——–
PUSH    iw          [186]68 i0 i1N3——–
PUSH    rmwFF /6 d0 d1 2~4——–



Usage
PUSH    src

PUSH    immed   (80188+ only)

Modifies flags
None



Decrements SP by the size of the operand (two or four, byte values

are sign extended) and transfers one word from source to the stack

top (SS:SP).

PUSHA/PUSHAD - Push All Registers onto Stack (80188+ only)







mnemonicsop xx xx xx xx xxswlenflags
PUSHA               [186]60 1——–
PUSHAD            [32bit]66| 60 1+1——–



Usage
PUSHA

PUSHAD  (386+ only)

Modifies flags
None



Pushes all general purpose registers onto the stack in the following

order: (E)AX, (E)CX, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI. The

value of SP is the value before the actual push of SP.

PUSHF/PUSHFD - Push Flags onto Stack







mnemonicsop xx xx xx xx xxswlenflags
PUSHF9C 1——–
PUSHFD            [32bit]66| 9C 1+1——–



Usage
PUSHF

PUSHFD  (386+ only)

Modifies flags
None



Transfers the Flags Register onto the stack. PUSHF saves a 16 bit

value while PUSHFD saves a 32 bit value.

RCL - Rotate Through Carry Left











mnemonicsop xx xx xx xx xxswlenflags
RCL     rmb,1D0 /2 d0 d1 B2~4o——-
RCL     rmb,CLD2 /2 d0 d1 B2~4o——-
RCL     rmb,ib      [186]C0 /2 d0 d1 i0 B3~5o——-
RCL     rmw,1D1 /2 d0 d1 W2~4o——-
RCL     rmw,CLD3 /2 d0 d1 W2~4o——-
RCL     rmw,ib      [186]C1 /2 d0 d1 i0 W3~5o——-



Usage
RCL     dest,count

Modifies flags
CF OF



Rotates the bits in the destination to the left “count” times with

all data pushed out the left side re-entering on the right. The

Carry Flag holds the last bit rotated out.

RCR - Rotate Through Carry Right











mnemonicsop xx xx xx xx xxswlenflags
RCR     rmb,1D0 /3 d0 d1 B2~4o——-
RCR     rmb,CLD2 /3 d0 d1 B2~4o——-
RCR     rmb,ib      [186]C0 /3 d0 d1 i0 B3~5o——-
RCR     rmw,1D1 /3 d0 d1 W2~4o——-
RCR     rmw,CLD3 /3 d0 d1 W2~4o——-
RCR     rmw,ib      [186]C1 /3 d0 d1 i0 W3~5o——-



Usage
RCR     dest,count

Modifies flags
CF OF



Rotates the bits in the destination to the right “count” times with

all data pushed out the right side re-entering on the left. The

Carry Flag holds the last bit rotated out.

REP - Repeat String Operation






mnemonicsop xx xx xx xx xxswlenflags
REPF3 1—–z–



Usage
REP

Modifies flags
None



Repeats execution of string instructions while CX != 0. After

each string operation, CX is decremented and the Zero Flag is

tested. The combination of a repeat prefix and a segment override

on CPU’s before the 386 may result in errors if an interrupt occurs

before CX=0. The following code shows code that is susceptible to

this and how to avoid it:

again: rep movs byte ptr ES:[DI],ES:[SI] ; vulnerable instr.

jcxz next ; continue if REP successful

loop again ; interrupt goofed count

next:

REPE/REPZ - Repeat Equal / Repeat Zero






mnemonicsop xx xx xx xx xxswlenflags
REPEF3 1——–



Usage
REPE

REPZ

Modifies flags
None



Repeats execution of string instructions while CX != 0 and the Zero

Flag is set. CX is decremented and the Zero Flag tested after

each string operation. The combination of a repeat prefix and a

segment override on processors other than the 386 may result in

errors if an interrupt occurs before CX=0.


*) REPE/REPZ are different mnemonics for the same instruction

REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero






mnemonicsop xx xx xx xx xxswlenflags
REPNEF2 1—–z–



Usage
REPNE

REPNZ

Modifies flags
None



Repeats execution of string instructions while CX != 0 and the Zero

Flag is clear. CX is decremented and the Zero Flag tested after

each string operation. The combination of a repeat prefix and a

segment override on processors other than the 386 may result in

errors if an interrupt occurs before CX=0.


*) REPNE/REPNZ are different mnemonics for the same instruction

RET/RETF - Return From Procedure









mnemonicsop xx xx xx xx xxswlenflags
RETC3 1——–
RET     iwC2 i0 i1 3——–
RETFCB 1——–
RETF    iwCA i0 i1 3——–



Usage
RET     nBytes

RETF    nBytes


RETN    nBytes

Modifies flags
None



Transfers control from a procedure back to the instruction address

saved on the stack. “n bytes” is an optional number of bytes to

release. Far returns pop the IP followed by the CS, while near

returns pop only the IP register.

ROL - Rotate Left











mnemonicsop xx xx xx xx xxswlenflags
ROL     rmb,1D0 /0 d0 d1 B2~4o——-
ROL     rmb,CLD2 /0 d0 d1 B2~4o——-
ROL     rmb,ib      [186]C0 /0 d0 d1 i0 B3~5o——-
ROL     rmw,1D1 /0 d0 d1 W2~4o——-
ROL     rmw,CLD3 /0 d0 d1 W2~4o——-
ROL     rmw,ib      [186]C1 /0 d0 d1 i0 W3~5o——-



Usage
ROL     dest,count

Modifies flags
CF OF



Rotates the bits in the destination to the left “count” times with

all data pushed out the left side re-entering on the right. The

Carry Flag will contain the value of the last bit rotated out.

ROR - Rotate Right











mnemonicsop xx xx xx xx xxswlenflags
ROR     rmb,1D0 /1 d0 d1 B2~4o——-
ROR     rmb,CLD2 /1 d0 d1 B2~4o——-
ROR     rmb,ib      [186]C0 /1 d0 d1 i0 B3~5o——-
ROR     rmw,1D1 /1 d0 d1 W2~4o——-
ROR     rmw,CLD3 /1 d0 d1 W2~4o——-
ROR     rmw,ib      [186]C1 /1 d0 d1 i0 W3~5o——-



Usage
ROR     dest,count

Modifies flags
CF OF



Rotates the bits in the destination to the right “count” times with

all data pushed out the right side re-entering on the left. The

Carry Flag will contain the value of the last bit rotated out.

SAHF - Store AH Register into FLAGS






mnemonicsop xx xx xx xx xxswlenflags
SAHF9E 1—-szap



Usage
SAHF

Modifies flags
AF CF PF SF ZF



Transfers bits 0-7 of AH into the Flags Register. This includes AF, CF, PF, SF and ZF.

SAL/SHL - Shift Arithmetic Left / Shift Logical Left

















mnemonicsop xx xx xx xx xxswlenflags
SAL     rmb,1D0 /4 d0 d1 B2~4o——-
SAL     rmb,CLD2 /4 d0 d1 B2~4o——-
SAL     rmb,ib      [186]C0 /4 d0 d1 i0 B3~5o——-
SAL     rmw,1D1 /4 d0 d1 W2~4o——-
SAL     rmw,CLD3 /4 d0 d1 W2~4o——-
SAL     rmw,ib      [186]C1 /4 d0 d1 i0 W3~5o——-
SHL     rmb,1D0 /4 d0 d1 B2~4o——-
SHL     rmb,CLD2 /4 d0 d1 B2~4o——-
SHL     rmb,ib      [186]C0 /4 d0 d1 i0 B3~5o——-
SHL     rmw,1D1 /4 d0 d1 W2~4o——-
SHL     rmw,CLD3 /4 d0 d1 W2~4o——-
SHL     rmw,ib      [186]C1 /4 d0 d1 i0 W3~5o——-



Usage
SAL     dest,count

SHL     dest,count

Modifies flags
CF OF PF SF ZF (AF undefined)



Shifts the destination left by “count” bits with zeroes shifted

in on right. The Carry Flag contains the last bit shifted out.

SAR - Shift Arithmetic Right










mnemonicsop xx xx xx xx xxswlenflags
SAR     rmb,CLD2 /7 d0 d1 B2~4o——-
SAR     rmb,ib      [186]C0 /7 d0 d1 i0 B3~5o——-
SAR     rmw,1D1 /7 d0 d1 W2~4o——-
SAR     rmw,CLD3 /7 d0 d1 W2~4o——-
SAR     rmw,ib      [186]C1 /7 d0 d1 i0 W3~5o——-



Usage
SAR     dest,count

Modifies flags
CF OF PF SF ZF (AF undefined)



Shifts the destination right by “count” bits with the current sign

bit replicated in the leftmost bit. The Carry Flag contains the

last bit shifted out.

SBB - Subtract with Borrow














mnemonicsop xx xx xx xx xxswlenflags
SBB     AL,ib1C i0 B2o—szap
SBB     AX,iw1D i0 i1 W3o—szap
SBB     rb,rmb1A mr d0 d1 B2~4o—szap
SBB     rw,rmw1B mr d0 d1 W2~4o—szap
SBB     rmb,ib80 /3 d0 d1 i0NB3~5o—szap
SBB     rmw,iw81 /3 d0 d1 i0 i1NW4~6o—szap
SBB     rmw,ib83 /3 d0 d1 i0EW3~5o—szap
SBB     rmb,rb18 mr d0 d1 B2~4o—szap
SBB     rmw,rw19 mr d0 d1 W2~4o—szap



Usage
SBB     dest,src

Modifies flags
AF CF OF PF SF ZF



Subtracts the source from the destination, and subtracts 1 extra if

the Carry Flag is set. Results are returned in “dest”.

SCAS - Scan String (Byte, Word or Doubleword)








mnemonicsop xx xx xx xx xxswlenflags
SCASBAE B1o—szap
SCASWAF W1o—szap
SCASD             [32bit]66| AF D1+1o—szap



Usage
SCAS    string

SCASB


SCASW


SCASD nbsp;  (386+ only)

Modifies flags
AF CF OF PF SF ZF



Compares value at ES:DI (even if operand is specified) from the

accumulator and sets the flags similar to a subtraction. DI is

incremented/decremented based on the instruction format (or

operand size) and the state of the Direction Flag. Use with REP

prefixes.

SETAE/SETNB - Set if Above or Equal / Set if Not Below (unsigned, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETAE   rmb         [386]0F 93 mr d0 d1 3~5——–



Usage
SETAE   dest

SETNB   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Carry Flag is clear

otherwise sets the operand to 0.



*) SETAE/SETNB are different mnemonics for the same instruction

SETB/SETNAE - Set if Below / Set if Not Above or Equal (unsigned, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETB    rmb         [386]0F 92 mr d0 d1 3~5——–



Usage
SETB    dest

SETNAE  dest

Modifies flags
none



Sets the byte in the operand to 1 if the Carry Flag is set

otherwise sets the operand to 0.


*) SETB/SETAE are different mnemonics for the same instruction

SETBE/SETNA - Set if Below or Equal / Set if Not Above (unsigned, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETBE   rmb         [386]0F 96 mr d0 d1 3~5——–



Usage
SETBE   dest

SETNA   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Carry Flag or the Zero

Flag is set, otherwise sets the operand to 0.


*) SETBE/SETNA are different mnemonics for the same instruction

SETE/SETZ - Set if Equal / Set if Zero (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETZ    rmb         [386]0F 94 mr d0 d1 3~5——–



Usage
SETE    dest

SETZ    dest

Modifies flags
none



Sets the byte in the operand to 1 if the Zero Flag is set,

otherwise sets the operand to 0.


*) SETE/SETZ are different mnemonics for the same instruction

SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETNE   rmb         [386]0F 95 mr d0 d1 3~5——–



Usage
SETNE   dest

SETNZ   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Zero Flag is clear,

otherwise sets the operand to 0.


*) SETNE/SETNZ are different mnemonics for the same instruction

SETL/SETNGE - Set if Less / Set if Not Greater or Equal (signed, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETL    rmb         [386]0F 9C mr d0 d1 3~5——–



Usage
SETL    dest

SETNGE  dest

Modifies flags
none



Sets the byte in the operand to 1 if the Sign Flag is not equal

to the Overflow Flag, otherwise sets the operand to 0.


*) SETL/SETNGE are different mnemonics for the same instruction

SETGE/SETNL - Set if Greater or Equal / Set if Not Less (signed, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETGE   rmb         [386]0F 9D mr d0 d1 3~5——–



Usage
SETGE   dest

SETNL   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Sign Flag equals the

Overflow Flag, otherwise sets the operand to 0.


*) SETGE/SETNL are different mnemonics for the same instruction

SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (signed, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETLE   rmb         [386]0F 9E mr d0 d1 3~5——–



Usage
SETLE   dest

SETNG   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Zero Flag is set or the

Sign Flag is not equal to the Overflow Flag, otherwise sets the

operand to 0.


*) SETLE/SETNG are different mnemonics for the same instruction

SETG/SETNLE - Set if Greater / Set if Not Less or Equal (signed, 386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETG    rmb         [386]0F 9F mr d0 d1 3~5——–



Usage
SETG    dest

SETNLE  dest

Modifies flags
none



Sets the byte in the operand to 1 if the Zero Flag is clear or the

Sign Flag equals to the Overflow Flag, otherwise sets the operand to 0.


*) SETG/SETNLE are different mnemonics for the same instruction

SETS - Set if Signed (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETS    rmb         [386]0F 98 mr d0 d1 3~5——–



Usage
SETS    dest

Modifies flags
none



Sets the byte in the operand to 1 if the Sign Flag is set, otherwise

sets the operand to 0.

SETNS - Set if Not Signed (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETNS   rmb         [386]0F 99 mr d0 d1 3~5——–



Usage
SETNS   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Sign Flag is clear,

otherwise sets the operand to 0.

SETC - Set if Carry (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETC    rmb         [386]0F 92 mr d0 d1 3~5——–



Usage
SETC    dest

Modifies flags
none



Sets the byte in the operand to 1 if the Carry Flag is set,

otherwise sets the operand to 0.

SETNC - Set if Not Carry (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETNC   rmb         [386]0F 93 mr d0 d1 3~5——–



Usage
SETNC   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Carry Flag is clear,

otherwise sets the operand to 0.

SETO - Set if Overflow (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETO    rmb         [386]0F 90 mr d0 d1 3~5——–



Usage
SETO    dest

Modifies flags
none



Sets the byte in the operand to 1 if the Overflow Flag is set,

otherwise sets the operand to 0.

SETNO - Set if Not Overflow (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETNO   rmb         [386]0F 91 mr d0 d1 3~5——–



Usage
SETNO   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Overflow Flag is clear,

otherwise sets the operand to 0.


SETP/SETPE - Set if Parity / Set if Parity Even (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETP    rmb         [386]0F 9A mr d0 d1 3~5——–



Usage
SETP    dest

SETPE   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Parity Flag is set,

otherwise sets the operand to 0.


*) SETP/SETE are different mnemonics for the same instruction

SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+ only)






mnemonicsop xx xx xx xx xxswlenflags
SETNP   rmb         [386]0F 9B mr d0 d1 3~5——–



Usage
SETNP   dest

SETPO   dest

Modifies flags
none



Sets the byte in the operand to 1 if the Parity Flag is clear,

otherwise sets the operand to 0.


*) SETNP/SETPO are different mnemonics for the same instruction

SGDT - Store Global Descriptor Table (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
SGDT    m6          [286]0F 01 /0 d0 d1 3~5——–



Usage
SGDT    dest

Modifies flags
none



Stores the Global Descriptor Table (GDT) Register into the

specified operand.

SIDT - Store Interrupt Descriptor Table (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
SIDT    m6          [286]0F 01 /1 d0 d1 3~5——–



Usage
SIDT    dest

Modifies flags
none



Stores the Interrupt Descriptor Table (IDT) Register into the

specified operand.

SHR - Shift Logical Right











mnemonicsop xx xx xx xx xxswlenflags
SHR     rmb,1D0 /5 d0 d1 B2~4o——-
SHR     rmb,CLD2 /5 d0 d1 B2~4o——-
SHR     rmb,ib      [186]C0 /5 d0 d1 i0 B3~5o——-
SHR     rmw,1D1 /5 d0 d1 W2~4o——-
SHR     rmw,CLD3 /5 d0 d1 W2~4o——-
SHR     rmw,ib      [186]C1 /5 d0 d1 i0 W3~5o——-



Usage
SHR     dest,count

Modifies flags
CF OF PF SF ZF (AF undefined)



Shifts the destination right by “count” bits with zeroes shifted

in on the left. The Carry Flag contains the last bit shifted out.

SHLD/SHRD - Double Precision Shift (386+ only)









mnemonicsop xx xx xx xx xxswlenflags
SHLD    rmw,rw,CL   [386]0F A5 mr d0 d1 3~5o—szap
SHLD    rmw,rw,ib   [386]0F A4 mr d0 d1 i0 4~6o—szap
SHRD    rmw,rw,CL   [386]0F AD mr d0 d1 3~5o—szap
SHRD    rmw,rw,ib   [386]0F AC mr d0 d1 i0 4~6o—szap



Usage
SHLD    dest,src,count

SHRD    dest,src,count

Modifies flags
CF PF SF ZF (OF,AF undefined)



SHLD shifts “dest” to the left “count” times and the bit positions

opened are filled with the most significant bits of “src”. SHRD

shifts “dest” to the right “count” times and the bit positions

opened are filled with the least significant bits of the second

operand. Only the 5 lower bits of “count” are used.

SLDT - Store Local Descriptor Table (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
SLDT    mw          [286]0F 00 /0 d0 d1 3~5——–



Usage
SLDT    dest

Modifies flags
none



Stores the Local Descriptor Table (LDT) Register into the

specified operand.

SMSW - Store Machine Status Word (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
SMSW    rmw         [286]0F 01 /4 d0 d1 3~5——–



Usage
SMSW    dest

Modifies flags
none



Store Machine Status Word (MSW) into “dest”.

STC - Set Carry






mnemonicsop xx xx xx xx xxswlenflags
STCF9 1——–



Usage
STC

Modifies flags
CF



Sets the Carry Flag to 1.

STD - Set Direction Flag






mnemonicsop xx xx xx xx xxswlenflags
STDFD 1-1——



Usage
STD

Modifies flags
DF



Sets the Direction Flag to 1 causing string instructions to

auto-decrement SI and DI instead of auto-increment.

STI - Set Interrupt Flag (Enable Interrupts)






mnemonicsop xx xx xx xx xxswlenflags
STIFB 1–1—–



Usage
STI

Modifies flags
IF



Sets the Interrupt Flag to 1, enabling recognition of all CPU hardware interrupts.

STOS - Store String (Byte, Word or Doubleword)








mnemonicsop xx xx xx xx xxswlenflags
STOSBAA B1——–
STOSWAB W1——–
STOSD             [32bit]66| AB D1+1——–



Usage
STOS    dest

STOSB


STOSW


STOSD   (386+ only)

Modifies flags
None



Stores value in accumulator to location at ES:(E)DI (even if operand

is given). (E)DI is incremented/decremented based on the size of

the operand (or instruction format) and the state of the Direction

Flag. Use with REP prefixes.

STR - Store Task Register (286+ privileged)






mnemonicsop xx xx xx xx xxswlenflags
STR     rmw         [286]0F 01 /1 d0 d1 3~5——–



Usage
STR     dest

Modifies flags
None



Stores the current Task Register to the specified operand.

SUB - Subtract














mnemonicsop xx xx xx xx xxswlenflags
SUB     AL,ib2C i0 B2o—szap
SUB     AX,iw2D i0 i1 W3o—szap
SUB     rb,rmb2A mr d0 d1 B2~4o—szap
SUB     rw,rmw2B mr d0 d1 W2~4o—szap
SUB     rmb,ib80 /5 d0 d1 i0NB3~5o—szap
SUB     rmw,iw81 /5 d0 d1 i0 i1NW4~6o—szap
SUB     rmw,ib83 /5 d0 d1 i0EW3~5o—szap
SUB     rmb,rb28 mr d0 d1 B2~4o—szap
SUB     rmw,rw29 mr d0 d1 W2~4o—szap



Usage
SUB     dest,src

Modifies flags
AF CF OF PF SF ZF



The source is subtracted from the destination and the result is

stored in the destination.

TEST - Test For Bit Pattern











mnemonicsop xx xx xx xx xxswlenflags
TEST    AL,ibA8 i0 B20—szap
TEST    AX,iwA9 i0 i1 W30—szap
TEST    rmb,ibF6 /0 d0 d1 i0 B3~50—szap
TEST    rmw,iwF7 /0 d0 d1 i0 i1 W4~60—szap
TEST    rmb,rmb84 mr d0 d1 B2~40—szap
TEST    rmw,rmw85 mr d0 d1 W2~40—szap



Usage
TEST    dest,src

Modifies flags
CF OF PF SF ZF (AF undefined)



Performs a logical AND of the two operands updating the flags

register without saving the result.

VERR - Verify Read (286+ protected)






mnemonicsop xx xx xx xx xxswlenflags
VERR    rmw         [286]0F 00 /4 d0 d1 3~5—–z–



Usage
VERR    src

Modifies flags
ZF



Verifies the specified segment selector is valid and is readable

at the current privilege level. If the segment is readable,

the Zero Flag is set, otherwise it is cleared.

VERW - Verify Write (286+ protected)






mnemonicsop xx xx xx xx xxswlenflags
VERW    rmw         [286]0F 00 /5 d0 d1 3~5—–z–



Usage
VERW    src

Modifies flags
ZF



Verifies the specified segment selector is valid and is ratable

at the current privilege level. If the segment is writable,

the Zero Flag is set, otherwise it is cleared.

WAIT/FWAIT - Event Wait






mnemonicsop xx xx xx xx xxswlenflags
WAIT9B 1——–



Usage
WAIT

FWAIT

Modifies flags
None



CPU enters wait state until the coprocessor signals it has finished

it’s operation. This instruction is used to prevent the CPU from

accessing memory that may be temporarily in use by the coprocessor.

WAIT and FWAIT are identical.


WBINVD - Write-Back and Invalidate Cache






mnemonicsop xx xx xx xx xxswlenflags
WBINVD              [486]0F 09 2——–



Usage
WBINVD

Modifies flags
None



Flushes internal cache, then signals the external cache to write

back current data followed by a signal to flush the external cache.

XCHG - Exchange
















mnemonicsop xx xx xx xx xxswlenflags
XCHG    AX,CX91 1——–
XCHG    AX,DX92 1——–
XCHG    AX,BX93 1——–
XCHG    AX,SP94 1——–
XCHG    AX,BP95 1——–
XCHG    AX,SI96 1——–
XCHG    AX,DI97 1——–
XCHG    rb,rmb86 mr d0 d1 B2~4——–
XCHG    rmb,rb86 mr d0 d1 B2~4——–
XCHG    rmw,rw87 mr d0 d1 W2~4——–
XCHG    rw,rmw87 mr d0 d1 W2~4——–



Usage
XCHG    dest,src

Modifies flags
None



Exchanges contents of source and destination.

XLAT/XLATB - Translate






mnemonicsop xx xx xx xx xxswlenflags
XLATD7 1——–



Usage
XLAT    translation-table

XLATB   (masm 5.x)

Modifies flags
None



Replaces the byte in AL with byte from a user table addressed by

BX. The original value of AL is the index into the translate table.

XOR - Exclusive OR














mnemonicsop xx xx xx xx xxswlenflags
XOR     AL,ib34 i0 B20—szap
XOR     AX,iw35 i0 i1 W30—szap
XOR     rb,rmb32 mr d0 d1 B2~40—szap
XOR     rw,rmw33 mr d0 d1 W2~40—szap
XOR     rmb,ib80 /6 d0 d1 i0NB3~50—szap
XOR     rmw,iw81 /6 d0 d1 i0 i1NW4~60—szap
XOR     rmw,ib83 /6 d0 d1 i0EW3~50—szap
XOR     rmb,rb30 mr d0 d1 B2~40—szap
XOR     rmw,rw31 mr d0 d1 W2~40—szap



Usage
XOR     dest,src

Modifies flags
CF OF PF SF ZF (AF undefined)



Performs a bitwise exclusive OR of the operands and returns

the result in the destination.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值