Outils pour utilisateurs

Outils du site


back2root:archives:intel-80x88

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
back2root:archives:intel-80x88 [2024/11/29 21:43] – supprimée - modification externe (Date inconnue) 127.0.0.1back2root:archives:intel-80x88 [2024/11/29 21:43] (Version actuelle) – ↷ Nom de la page changé de back2root:archives:80x88 à back2root:archives:intel-80x88 frater
Ligne 1: Ligne 1:
 +====== 80x86 Integer Instruction Set (8088 - Pentium) ======
  
 +===== Legend: =====
 +
 +====  General ====
 +
 +^  acc    | AL, AX or EAX unless specified otherwise  |
 +^  reg    | any general register                      |
 +^  r8     | any 8-bit register                        |
 +^  r16    | any general purpose 16-bit register       |
 +^  r32    | any general purpose 32-bit register       |
 +^  imm    | immediate data                            |
 +^  imm8   | 8-bit immediate data                      |
 +^  imm16  | 16-bit immediate data                     |
 +^  mem    | memory address                            |
 +^  mem8   | address of 8-bit data item                |
 +^  mem16  | address of 16-bit data item               |
 +^  mem32  | address of 32-bit data item               |
 +^  mem48  | address of 48-bit data item               |
 +^  dest   | 16/32-bit destination                     |
 +^  short  | 8-bit destination                         |
 +====  Integer instruction timings: ====
 +
 +
 +^  n  | generally refers to a number of repeated counts                                                                                                        |
 +^  m  | in a jump or call;\\ 286: bytes in next instruction\\ 386/486: number of components\\ (each byte of opcode) + 1 (if immed data) + 1 (if displacement)  |
 +
 +<code>
 +EA = cycles to calculate the Effective Address
 +       8088/8086:
 +        base   = 5   BP+DI or BX+SI = 7   BP+DI+disp or BX+SI+disp = 11
 +        index  = 5   BX+DI or BP+SI = 8   BX+DI+disp or BP+SI+disp = 12
 +        disp   = 6   segment override = +2
 +       286 - 486:
 +        base+index+disp = +1    all others, no penalty
 +</code>
 +====  instruction length: ====
 +
 +The byte count includes the opcode length and length of any required displacement or immediate data. If the displacement is optional, it is shown as d() with the possible lengths in parentheses. If the immediate data is optional, it is shown as i() with the possible lengths in parentheses.
 +
 +==== pairing categories for Pentium: ====
 +
 +^  NP  | not pairable                      |
 +^  UV  | pairable in the U pipe or V pipe  |
 +^  PU  | pairable in the U pipe only       |
 +^  PV  | pairable in the V pipe only       |
 +
 +
 +===== Instruction formats, clock cycles and Pentium® Pairing info =====
 +
 +=== AAA ===
 +ASCII adjust after addition
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -         |  1      |  8     |  8    |  3    |  4    |  3    |  3   NP   |
 +
 +Example:        
 +
 +<code asm>        aaa</code>
 +=== AAD ===
 +ASCII adjust AX before division (second byte is divisor)
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -         |  2      |  60    |  15   |  14   |  19   |  14   |  10   NP  |
 +
 +Example:
 +
 +<code asm>        aad</code>
 +
 +
 +=== AAM ===
 +ASCII adjust AX after multiply (second byte is divisor)
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -         |  2      |  83    |  19   |  16   |  17   |  15   |  18   NP  |
 +
 +Example:
 +
 +<code asm>        aam</code>
 +
 +
 +=== AAS ===
 +ASCII adjust AL after subtraction
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -         |  1      |  8     |  7    |  3    |  4    |  3    |  3   NP   |
 +
 +Example:
 +
 +<code asm>        aas</code>
 +=== ADC ===
 +Integer add with carry
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   PU   |
 +|  mem, reg  |  2+d(0,2)            |  24+EA  |  10   |  7    |  7    |  3    |  3   PU   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  7    |  6    |  2    |  2   PU   |
 +|  reg, imm  |  2+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   PU   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  23+EA  |  16   |  7    |  7    |  3    |  3   PU*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   PU   |
 +
 +* : not pairable if there is a displacement and immediate
 +
 +Example:
 +
 +<code asm>        adc     eax, ebx</code>
 +
 +
 +=== ADD ===
 +Integer addition
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0,2)            |  24+EA  |  10   |  7    |  7    |  3    |  3   UV   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  7    |  6    |  2    |  2   UV   |
 +|  reg, imm  |  2+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  23+EA  |  16   |  7    |  7    |  3    |  3   UV*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +
 +* = not pairable if there is a displacement and immediate
 +
 +Example:
 +
 +<code asm>        add     eax, ebx</code>
 +
 +=== AND ===
 +Logical AND
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0,2)            |  24+EA  |  10   |  7    |  7    |  3    |  3   UV   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  7    |  6    |  2    |  2   UV   |
 +|  reg, imm  |  2+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  23+EA  |  16   |  7    |  7    |  3    |  3   UV*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +
 +* : not pairable if there is a displacement and immediate
 +
 +Example:
 +
 +<code asm>        and     eax, ebx</code>
 +
 +
 +=== ARPL ===
 +Adjust RPL field of selector (286+)
 +
 +^  operands  ^  bytes     ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2         |  10   |  20   |  9    |  7   NP   |
 +|  mem, reg  |  2+d(0-2)  |  11   |  21   |  9    |  7   NP   |
 +
 +Example:
 +
 +<code asm>        arpl    ax, bx</code>
 +
 +
 +=== BOUND ===
 +Check array index against bounds (186+)
 +
 +^  operands  ^  bytes  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, mem  |  4      |  35   |  13   |  10   |  7    |  8   NP   |
 +
 +Example:
 +
 +<code asm>        bound   bx, array</code>
 +
 +=== BSF ===
 +Bit scan forward (386+)
 +
 +^  operands  ^  bytes         ^  386    ^  486   ^  Pentium   ^
 +|  r16, r16  |  3             |  10+3n  |  6-42  |  6-34  NP  |
 +|  r32, r32  |  3             |  10+3n  |  6-42  |  6-42  NP  |
 +|  r16, m16  |  3+d(0,1,2)    |  10+3n  |  7-43  |  6-35  NP  |
 +|  r32, m32  |  3+d(0,1,2,4)  |  10+3n  |  7-43  |  6-43  NP  |
 +
 +Example:
 +
 +<code asm>        bsf     eax, [esi]</code>
 +=== BSR ===
 +Bit scan reverse (386+)
 +
 +^  operands  ^  bytes         ^  386    ^  486    ^  Pentium   ^
 +|  r16, r16  |  3             |  10+3n  |  6-103  |  7-39  NP  |
 +|  r32, r32  |  3             |  10+3n  |  7-104  |  7-71  NP  |
 +|  r16, m16  |  3+d(0,1,2)    |  10+3n  |  6-103  |  7-40  NP  |
 +|  r32, m32  |  3+d(0,1,2,4)  |  10+3n  |  7-104  |  7-72  NP  |
 +
 +Example:
 +<code asm>        bsr     eax, [esi]</code>
 +
 +
 +=== BSWAP ===
 +Byte swap (486+)
 +
 +^  operand  ^  bytes  ^  486  ^  Pentium  ^
 +|  r32      |  2      |  1    |  1   NP   |
 +
 +Example:
 +<code asm>        bswap   eax</code>
 +
 +=== BT ===
 +Bit test (386+)
 +
 +^  operands   ^  bytes              ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg   |  3                  |  3    |  3    |  4   NP   |
 +|  mem, reg   |  3+d(0,1,2,4)       |  12   |  8    |  9   NP   |
 +|  reg, imm8  |  3+i(1)             |  3    |  3    |  4   NP   |
 +|  mem, imm8  |  3+d(0,1,2,4)+i(1)  |  6    |  3    |  4   NP   |
 +
 +Example:
 +<code asm>        bt      eax, 4</code>
 +
 +
 +=== BTC ===
 +Bit test and complement (386+)
 +
 +^  operands   ^  bytes              ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg   |  3                  |  6    |  6    |  7   NP   |
 +|  mem, reg   |  3+d(0,1,2,4)       |  13   |  13   |  13   NP  |
 +|  reg, imm8  |  3+i(1)             |  6    |  6    |  7   NP   |
 +|  mem, imm8  |  3+d(0,1,2,4)+i(1)  |  8    |  8    |  8   NP   |
 +
 +Example:
 +<code asm>        btc     eax, 4</code>
 +
 +
 +=== BTR ===
 +Bit test and reset (386+)
 +
 +^  operands   ^  bytes              ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg   |  3                  |  6    |  6    |  7   NP   |
 +|  mem, reg   |  3+d(0,1,2,4)       |  13   |  13   |  13   NP  |
 +|  reg, imm8  |  3+i(1)             |  6    |  6    |  7   NP   |
 +|  mem, imm8  |  3+d(0,1,2,4)+i(1)  |  8    |  8    |  8   NP   |
 +
 +Example:
 +<code asm>        btr     eax, 4</code>
 +
 +
 +=== BTS ===
 +Bit test and set (386+)
 +
 +^  operands   ^  bytes              ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg   |  3                  |  6    |  6    |  7   NP   |
 +|  mem, reg   |  3+d(0,1,2,4)       |  13   |  13   |  13   NP  |
 +|  reg, imm8  |  3+i(1)             |  6    |  6    |  7   NP   |
 +|  mem, imm8  |  3+d(0,1,2,4)+i(1)  |  8    |  8    |  8   NP   |
 +
 +Example:
 +<code asm>        bts     eax, 4</code>
 +
 +
 +=== CALL ===
 +Call subroutine
 +
 +^  operand  ^  bytes     ^  8088   ^  186  ^  286   ^  386   ^  486  ^  Pentium  ^
 +|  near     |  3         |  23     |  14   |  7+m   |  7+m   |  3    |  1   PV   |
 +|  reg      |  2         |  20     |  13   |  7+m   |  7+m   |  5    |  2   NP   |
 +|  mem16    |  2+d(0-2)  |  29+EA  |  19   |  11+m  |  10+m  |  5    |  2   NP   |
 +|  far      |  5         |  36     |  23   |  13+m  |  17+m  |  18   |  4   NP   |
 +|  mem32    |  2+d(0-2)  |  53+EA  |  38   |  16+m  |  22+m  |  17   |  4   NP   |
 +
 +
 +**Protected Mode**
 +
 +^  operand  ^  bytes     ^  286   ^  386   ^  486  ^  Pentium   ^
 +|  far      |  5         |  26+m  |  34+m  |  20   |  4-13  NP  |
 +|  mem32    |  2+d(0-2)  |  29+m  |  38+m  |  20   |  5-14  NP  |
 +
 +cycles not shown for calls through call and task gates
 +
 +Example:
 +<code asm>        call    my_function</code>
 +
 +
 +=== CBW ===
 +Convert byte to word   (AL --> AX)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  2     |  2    |  2    |  3    |  3    |  3   NP   |
 +
 +Example:
 +<code asm>        cbw</code>
 +
 +
 +=== CWDE ===
 +Convert word to dword (386+)  (AX --> EAX)
 +
 +^  operand  ^  bytes  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  3    |  3    |  3   NP   |
 +
 +Example:
 +<code asm>        cwde</code>
 +
 +
 +=== CWD ===
 +Convert word to double  (AX --> DX:AX)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  5     |  4    |  2    |  2    |  3    |  2   NP   |
 +
 +Example:
 +<code asm>        cwd</code>
 +
 +
 +=== CDQ ===
 +Convert double to quad   (EAX --> EDX:EAX)
 +
 +^  operand  ^  bytes  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  2    |  3    |  2   NP   |
 +
 +Example:
 +<code asm>        cdq</code>
 +
 +
 +=== CLC ===
 +Clear the carry flag
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  2     |  2    |  2    |  2    |  2    |  2   NP   |
 +
 +Example:
 +<code asm>        clc</code>
 +
 +
 +=== CLD ===
 +Clear the direction flag (set to forward direction)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  2     |  2    |  2    |  2    |  2    |  2   NP   |
 +
 +Example:
 +<code asm>        cld</code>
 +
 +
 +=== CLI ===
 +Clear the interrupt flag (disable interrupts)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  2     |  2    |  3    |  3    |  5    |  7   NP   |
 +
 +Example:
 +<code asm>        cli</code>
 +
 +
 +=== CLTS ===
 +Clear task switched flag in CR0 (286+)
 +
 +^  operand  ^  bytes  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  2      |  2    |  5    |  7    |  10   NP  |
 +
 +Example:
 +<code asm>        clts</code>
 +
 +
 +=== CMC ===
 +Complement carry flag
 +
 +^  operand  ^ bytes  ^ 8088  ^ 186  ^ 286  ^ 386  ^ 486  ^ Pentium  ^
 +|  -        |  1     |  2    |  2   |  2   |  2   |  2   |  2   NP  |
 +
 +Example:
 +<code asm>        cmc</code>
 +
 +
 +=== CMP ===
 +Compare two operands
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0,2)            |  13+EA  |  10   |  7    |  5    |  2    |  2   UV   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  6    |  6    |  2    |  2   UV   |
 +|  reg, imm  |  2+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  14+EA  |  10   |  6    |  5    |  2    |  2   UV*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +
 +* : not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        cmp     eax, 3</code>
 +
 +
 +=== CMPS/CMPSB/CMPSW/CMPSD ===
 +Compare string operands
 +
 +^  variations  ^  bytes  ^  8088   ^  186    ^  286   ^  386   ^  486    ^  Pentium  ^
 +|  cmpsb       |  1      |  30     |  22     |  8     |  10    |  8      |  5   NP   |
 +|  cmpsw       |  1      |  -      |  -      |  -     |  10    |  8      |  5   NP   |
 +|  cmpsd       |  1      |  -      |  -      |  -     |  10    |  8      |  5   NP   |
 +|  repX cmpsb  |  2      |  9+30n  |  5+22n  |  5+9n  |  5+9n  |  7+7n*  |  9+4n NP  |
 +|  repX cmpsw  |  2      |  9+30n  |  5+22n  |  5+9n  |  5+9n  |  7+7n*  |  9+4n NP  |
 +|  repX cmpsd  |  2      |  -      |  -      |  -     |  5+9n  |  7+7n*  |  9+4n NP  |
 +//repX = repe, repz, repne or repnz//
 +
 +* : 5 if n = 0
 +
 +Example:
 +
 +<code asm>        repne cmpsb</code>
 +=== CMPXCHG ===
 +Compare and Exchange (486+)
 +
 +^  operands  ^  bytes     ^  486   ^  Pentium  ^
 +|  reg, reg  |  3         |  6     |  5   NP   |
 +|  mem, reg  |  3+d(0-2)  |  7-10  |  6   NP   |
 +
 +Example:
 +<code asm>        cmpxchg ebx, edx</code>
 +
 +
 +=== CMPXCHG8B ===
 +Compare and Exchange 8 bytes (Pentium+)
 +
 +^  operands  ^  bytes     ^  Pentium  ^
 +|  mem, reg  |  3+d(0-2)  |  10   NP  |
 +
 +Example:
 +<code asm>        cmpxchg8b [ebx], edx</code>
 +
 +
 +=== CPUID ===
 +CPU identification (Pentium+)
 +
 +^  operands  ^  bytes  ^  Pentium  ^
 +|  -         |  2      |  14   NP  |
 +
 +Example:
 +<code asm>        cpuid</code>
 +
 +
 +=== DAA ===
 +Decimal adjust AL after addition
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  4     |  4    |  3    |  4    |  2    |  3   NP   |
 +
 +Example:
 +<code asm>        daa</code>
 +
 +
 +=== DAS ===
 +Decimal adjust AL after subtraction
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -        |  1      |  4     |  4    |  3    |  4    |  2    |  3   NP   |
 +
 +Example:
 +<code asm>        das</code>
 +
 +
 +=== DEC ===
 +Decrement
 +
 +^  operand  ^  bytes     ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  r8       |  2         |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  r16      |  1         |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  r32      |  1         |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem      |  2+d(0,2)  |  23+EA  |  15   |  7    |  6    |  3    |  3   UV   |
 +
 +Example:
 +<code asm>        dec     eax</code>
 +
 +
 +=== DIV ===
 +Unsigned divide
 +
 +^  operand  ^  bytes     ^  8088        ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  r8       |  2         |  80-90       |  29   |  14   |  14   |  16   |  17   NP  |
 +|  r16      |  2         |  144-162     |  38   |  22   |  22   |  24   |  25   NP  |
 +|  r32      |  2         |  -           |  -    |  -    |  38   |  40   |  41   NP  |
 +|  mem8     |  2+d(0-2)  |  86-96+EA    |  35   |  17   |  17   |  16   |  17   NP  |
 +|  mem16    |  2+d(0-2)  |  150-168+EA  |  44   |  25   |  25   |  24   |  25   NP  |
 +|  mem32    |  2+d(0-2)  |  -           |  -    |  -    |  41   |  40   |  41   NP  |
 +
 +^  implied\\ dividend  ^     ^  operand  ^     ^  quotient  ^  remainder  ^
 +|  AX                  |  /  |  byte     |  =  |  AL        |  AH         |
 +|  DX:AX               |  /  |  word     |  =  |  AX        |  DX         |
 +|  EDX:EAX             |  /  |  dword    |  =  |  EAX       |  EDX        |
 +
 +Example:
 +<code asm>        div     ebx</code>
 +
 +
 +=== ENTER ===
 +Make stack frame for procedure parameters (186+)
 +
 +^      operands  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^    486  ^   Pentium  ^
 +|      imm16, 0  |   3  |   -   |   15    |  11    |  10   |   14   |   11 NP  |
 +|      imm16, 1  |   4  |   -   |   25    |  15    |  12   |   17   |   15 NP  |
 +|      imm16, imm8  |  4  |   -  |  22+16n  |  12+4n  |  15+4n  |  17+3i  |  15+2i NP  |
 +                        n = imm8-1;  i = imm8
 +
 +Example:
 +<code asm>        enter   1, 0</code>
 +
 +
 +=== ESC ===
 +Escape
 +
 +escape opcodes D8 - DF are used by floating point instructions
 +
 +
 +
 +=== HLT ===
 +Halt
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -         |  1      |  2     |  2    |  2    |  5    |  4    |  4 NP     |
 +
 +Example:
 +<code asm>        hlt</code>
 +
 +
 +=== IDIV ===
 +Signed divide
 +
 +^  operand  ^  bytes     ^  8088        ^  186    ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  r8       |  2         |  101-112     |  44-52  |  17   |  19   |  19   |  22   NP  |
 +|  r16      |  2         |  165-184     |  53-61  |  25   |  27   |  27   |  30   NP  |
 +|  r32      |  2         |  -           |  -      |  -    |  43   |  43   |  46   NP  |
 +|  mem8     |  2+d(0-2)  |  107-118+EA  |  50-58  |  20   |  22   |  20   |  22   NP  |
 +|  mem16    |  2+d(0-2)  |  171-190+EA  |  59-67  |  28   |  30   |  28   |  30   NP  |
 +|  mem32    |  2+d(0-2)  |  -           |  -      |  -    |  46   |  44   |  46   NP  |
 +
 +^  implied\\   dividend  ^  operand  ^  quotient  ^  remainder  ^
 +|  AX                    |  byte     |  AL        |  AH         |
 +|  DX:AX                 |  word     |  AX        |  DX         |
 +|  EDX:EAX               |  dword    |  EAX       |  EDX        |
 +
 +
 +Example:
 +<code asm>        idiv    ebx</code>
 +
 +
 +=== IMUL ===
 +Signed multiply
 +
 +**Accumulator Multiplies**
 +
 +^  operand  ^  bytes     ^  8088        ^  186    ^  286  ^  386    ^  486    ^  Pentium  ^
 +|  r8       |  2         |  80-98       |  25-28  |  13   |  9-14   |  13-18  |  11   NP  |
 +|  r16      |  2         |  128-154     |  34-37  |  21   |  9-22   |  13-26  |  11   NP  |
 +|  r32      |  2         |  -           |  -      |  -    |  9-38   |  13-42  |  10   NP  |
 +|  mem8     |  2+d(0-2)  |  86-104+EA   |  32-34  |  16   |  12-17  |  13-18  |  11   NP  |
 +|  mem16    |  2+d(0-2)  |  134-160+EA  |  40-43  |  24   |  12-25  |  13-26  |  11   NP  |
 +|  mem32    |  2+d(0-2)  |  -           |  -      |  -    |  12-41  |  13-42  |  10   NP  |
 +
 +^  implied\\   multiplicand  ^  operand\\ (multiplier)  ^  result   ^
 +|  AL                        |  byte                    |  AX       |
 +|  AX                        |  word                    |  DX:AX    |
 +|  EAX                       |  dword                   |  EDX:EAX  |
 +
 +Example:
 +<code asm>        imul    ebx</code>
 +
 +
 +**2 and 3 operand Multiplies**
 +
 +^  operands     ^  bytes               ^  186    ^  286  ^  386          ^  486          ^  Pentium  ^
 +|  r16, imm     |  2+i(1,2)            |  -      |  21   |  9-14 / 9-22    |  13-18 / 13-26  |  10   NP  |
 +|  r32, imm     |  2+i(1,2)            |  -      |  -    |  9-38         |  13-42        |  10   NP  |
 +|  r16,r16,imm  |  2+i(1,2)            |  22/29  |  21   |  9-14 / 9-22    |  13-18 / 13-26  |  10   NP  |
 +|  r32,r32,imm  |  2+i(1,2)            |  -      |  -    |  9-38         |  13-42        |  10   NP  |
 +|  r16,m16,imm  |  2+d(0-2)\\ +i(1,2)  |  25/32  |  24   |  12-17 / 12-25  |  13-18 / 13-26  |  10   NP  |
 +|  r32,m32,imm  |  2+d(0-2)+i          |  (1,2)  |  -    |  12-41        |  13-42        |  10   NP  |
 +|  r16, r16     |  2+i(1,2)            |  -      |  -    |  9-22         |  13-18 / 13-26  |  10   NP  |
 +|  r32, r32     |  2+i(1,2)            |  -      |  -    |  9-38         |  13-42        |  10   NP  |
 +|  r16, m16     |  2+d(0-2)+i          |  (1,2)  |  -    |  12-25        |  13-18 / 13-26  |  10   NP  |
 +|  r32, m32     |  2+d(0-2)+i          |  (1,2)  |  -    |  12-41        |  13-42        |  10   NP  |
 +
 +
 +<code>
 +all forms: dest, src                          cycles for:   byte/word
 +               or                                             dword
 +           dest, src1, src2
 +</code>
 +
 +Example:
 +<code asm>        imul    eax, ebx, 10</code>
 +
 +
 +=== IN ===
 +Input from port
 +
 +^    operands  ^  bytes  ^  8088  ^  186   ^  286  ^   386  ^   486  ^   Pentium  ^
 +|    al, imm8  |   2     |  14    |  10    |   5   |   12   |   14   |    7   NP  |
 +|    ax, imm8  |   2     |  14    |  10    |   5   |   12   |   14   |    7   NP  |
 +|    eax, imm8  |   2    |    -   |   -    |   -   |   12   |   14   |    7   NP  |
 +|    al, dx    |   1     |  12    |   8    |   5   |   13   |   14   |    7   NP  |
 +|    ax, dx    |   1     |  12    |   8    |   5   |   13   |   14   |    7   NP  |
 +|    eax, dx   |   1     |    -   |   -    |   -   |   13   |   14   |    7   NP  |
 +
 +**Protected mode**
 +
 +^   operands   ^  bytes   ^                        386  ^   486  ^   Pentium  ^
 +|   acc, imm   |   2      |                     6/26/26 |  9/29/27  |  4/21/19 NP  |
 +|   acc, dx    |   1      |                    7/27/27  |  8/28/27  |  4/21/19 NP  |
 +
 +cycles for: CPL <= IOPL / CPL > IOPL / V86
 +
 +
 +Example:
 +
 +<code asm>         in      al, dx</code>
 +=== INC ===
 +Increment
 +
 +^    operand   ^  bytes  ^  8088  ^  186  ^   286  ^  386  ^   486  ^   Pentium  ^
 +|    r8        |   2     |   3   |    3   |    2   |    2   |    1   |    1   UV  |
 +|    r16       |   1     |   3   |    3   |    2   |    2   |    1   |    1   UV  |
 +|    r32       |   1     |   3   |    3   |    2   |    2   |    1   |    1   UV  |
 +|    mem       |  2+d(0,2)  |  23+EA  |   15  |     7   |    6   |    3   |    3   UV  |
 +
 +Example:
 +
 +<code asm>        inc     ebx</code>
 +
 +
 +=== INS/INSB/INSW/INSD ===
 +Input from port to string
 +
 +^  variations  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  insb        |  1      |  -     |  14   |  5    |  15   |  17   |  9    NP  |
 +|  insw        |  1      |  -     |  14   |  5    |  15   |  17   |  9    NP  |
 +|  insd        |  1      |  -     |  -    |  -    |  15   |  17   |  9    NP  |
 +
 +**Protected Mode**
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^  286  ^  386      ^  486       ^  Pentium     ^
 +|  -        |  1      |  -     |  -    |  -    |  9/29/29  |  10/32/30  |  6/24/22 NP  |
 +
 +cycles for: CPL <= IOPL / CPL > IOPL / V86
 +
 +Example:
 +<code asm>        rep insb</code>
 +
 +
 +=== INT ===
 +Call interrupt procedure
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286   ^  386  ^  486  ^  Pentium  ^
 +|  3         |  1      |  72    |  45   |  23+m  |  33   |  26   |  13 NP  |
 +|  imm8      |  2      |  71    |  47   |  23+m  |  37   |  30   |  16 NP  |
 +
 +**Protected mode**
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286        ^  386    ^  486    ^  Pentium   ^
 +|  -         |  1      |  -     |  -    |  (40-78)+m  |  59-99  |  44-71  |  27-82 NP  |
 +
 +Example:
 +<code asm>        int     21h</code>
 +
 +
 +
 +=== INTO ===
 +Call interrupt procedure if overflow
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^   486   ^  Pentium  ^
 +|    -      |    1    |  4/73  |  4/48  |  3/24+m  |  3/35  |  3/28  |  4/13 NP  |
 +
 +**Protected mode**
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^   486   ^  Pentium  ^
 +|    -      |    1    |   -    |   -   |  (40-78)+m   |  59-99  |  44-71  |  27-56 NP  |
 +
 +Task switch clocks not shown
 +
 +Example:
 +<code asm>        into</code>
 +
 +
 +=== INVD ===
 +Invalidate data cache (486+)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^   486   ^  Pentium  ^
 +|     -     |    2    |  -    |   -    |   -     |  -    |   4    |  15   NP  |
 +
 +Example:
 +<code asm>        invd</code>
 +
 +
 +=== INVLPG ===
 +Invalidate TLB entry (486+)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^   486   ^  Pentium  ^
 +|    mem32  |   5     |   -    |   -   |    -    |   -   |    12   |   25   NP  |
 +
 +Example:
 +<code asm>        invlpg  [eax]</code>
 +
 +
 +=== IRET ===
 +Return from interrupt
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^   486   ^  Pentium  ^
 +|    -      |   1     |  44   |   28    |  17+m  |  22    |  15   |  8-27  NP  |
 +
 +Task switch clocks not shown
 +
 +Example:
 +<code asm>        iret</code>
 +
 +
 +=== IRETD ===
 +32-bit return from interrupt (386+)
 +
 +^  operand  ^  bytes  ^  8088  ^  186  ^   286   ^  386  ^   486   ^  Pentium  ^
 +|     -      |    1   |    -   |   -   |    -    |  22  |    15  |  10-27  NP  |
 +
 +Task switch clocks not shown
 +
 +Example:
 +<code asm>        iretd</code>
 +
 +
 +=== Jcc ===
 +Jump on condition code
 +
 +^  operand  ^  bytes  ^  8088    ^  186     ^  286      ^  386      ^  486    ^  Pentium  ^
 +|  near8    |  2      |  4 / 16  |  4 / 13  |  3 / 7+m  |  3 / 7+m  |  1 / 3  |  1    PV  |
 +|  near16   |  3      |  -       |  -       |  -        |  3 / 7+m  |  1 / 3  |  1    PV  |
 +//cycles for:  no jump/jump//
 +
 +**conditional jump instructions:**
 +^  ja   | jump if above             ^  jnbe  | jump if not below or equal    |
 +^  jae  | jump if above or equal    ^  jnb   | jump if not below             |
 +^  jb   | jump if below             ^  jnae  | jump if not above or equal    |
 +^  jbe  | jump if below or equal    ^  jna   | jump if not above             |
 +^  jg   | jump if greater           ^  jnle  | jump if not less or equal     |
 +^  jge  | jump if greater or equal  ^  jnl   | jump if not less              |
 +^  jl   | jump if less              ^  jnge  | jump if not greater or equal  |
 +|                                                                         ||||
 +^  jle  | jump if less or equal     ^  jng   | jump if not greater           |
 +^  je   | jump if equal             ^  jz    | jump if zero                  |
 +^  jne  | jump if not equal         ^  jnz   | jump if not zero              |
 +|                                                                         ||||
 +^  jc   | jump if carry             ^  jnc   | jump if not carry             |
 +^  js   | jump if sign              ^  jns   | jump if not sign              |
 +^  jnp  | jump if no parity (odd)   ^  jpo   | jump if parity odd            |
 +^  jo   | jump if overflow          ^  jno   | jump if not overflow          |
 +^  jp   | jump if parity (even)     ^  jpe   | jump if parity even           |
 +Example:        
 +
 +<code asm>jne     not_equal</code>
 +
 +
 +=== JCXZ/JECXZ ===
 +Jump if CX/ECX = 0
 +
 +^  operand  ^  bytes  ^  8088    ^  186     ^  286      ^  386      ^  486    ^  Pentium    ^
 +|  dest     |  2      |  6 / 18  |  5 / 16  |  4 / 8+m  |  5 / 9+m  |  5 / 8  |  5 / 6  NP  |
 +|  dest     |  2      |  -       |  -       |  -        |  5 / 9+m  |  5 / 8  |  5 / 6  NP  |
 +//cycles for:  no jump/jump//
 +
 +Example:
 +<code asm>        jcxz    cx_is_zero</code>
 +
 +
 +=== JMP ===
 +Unconditional jump
 +
 +^  operand  ^  bytes     ^  8088   ^  186  ^  286   ^  386   ^  486  ^  Pentium  ^
 +|  short    |  2         |  15     |  13   |  7+m   |  7+m   |  3    |  1 PV     |
 +|  near     |  3         |  15     |  13   |  7+m   |  7+m   |  3    |  1 PV     |
 +|  far      |  5         |  15     |  13   |  11+m  |  12+m  |  17   |  3 NP     |
 +|  r16      |  2         |  11     |  11   |  7+m   |  7+m   |  5    |  2 NP     |
 +|  mem16    |  2+d(0,2)  |  18+EA  |  17   |  11+m  |  10+m  |  5    |  2 NP     |
 +|  mem32    |  2+d(4)    |  24+EA  |  26   |  15+m  |  12+m  |  13   |  4 NP     |
 +|                                                                         ||||||||
 +|  r32      |  2         |  -      |  -    |  -     |  7+m   |  5    |  2 NP     |
 +|  mem32    |  2+d(0,2)  |  -      |  -    |  -     |  10+m  |  5    |  2 NP     |
 +|  mem48    |  2+d(6)    |  -      |  -    |  -     |  12+m  |  13   |  4 NP     |
 +//cycles for jumps through call gates not shown//
 +
 +Example:
 +<code asm>        jmp     target_address</code>
 +
 +
 +=== LAHF ===
 +Load flags into AH
 +
 +^  operand  ^  bytes     ^  8088   ^  186  ^  286   ^  386   ^  486  ^  Pentium  ^
 +|     -     |     1    |   4    |   2   |    2    |   2    |   3   |    2 NP  |
 +
 +Example:
 +<code asm>        lahf</code>
 +
 +
 +=== LAR [UPDATE] ===
 +Load access rights byte (286+)
 +
 +    operands    bytes                   286     386     486     Pentium
 +    r16, r16     3                      14      15      11       8   NP
 +    r32, r32     3                       -      15      11       8   NP
 +    r16, m16     3                      16      16      11       8   NP
 +    r32, m32     3                       -      16      11       8   NP
 +
 +Example:
 +<code asm>        lar     eax, ebx</code>
 +
 +
 +=== LDS ===
 +Load far pointer
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, mem   2+d(2)   24+EA   18       7       7       6       4   NP
 +
 +Example:
 +<code asm>        lds     si, ptr_1</code>
 +
 +
 +=== LES ===
 +Load far pointer
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, mem   2+d(2)   24+EA   18       7       7       6       4   NP
 +
 +Example:
 +<code asm>        les     di, ptr_2</code>
 +
 +
 +=== LFS ===
 +Load far pointer (386+)
 +
 +    operands    bytes                           386     486     Pentium
 +    reg, mem   3+d(2,4)                          7       6       4   NP
 +
 +Example:
 +<code asm>        lfs     si, ptr_3</code>
 +
 +
 +=== LGS ===
 +Load far pointer (386+)
 +
 +    operands    bytes                           386     486     Pentium
 +    reg, mem   3+d(2,4)                          7       6       4   NP
 +
 +Example:
 +<code asm>        lgs     si, ptr_4</code>
 +
 +
 +=== LSS ===
 +Load stack segment and offset
 +
 +    operands    bytes                           386     486     Pentium
 +    reg, mem   3+d(2,4)                          7       6       4   NP
 +
 +Example:
 +<code asm>        lss     bp, ptr_5</code>
 +
 +
 +=== LEA ===
 +Load effective address
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    r16, mem    2+d(2)  2+EA     6       3       2      1-2      1   UV
 +    r32, mem    2+d(2)   -       -       -       2      1-2      1   UV
 +
 +Example:
 +<code asm>        lea     eax, [eax+ebx*2+3]</code>
 +
 +
 +=== LEAVE ===
 +High level procedure exit (186+)
 +
 +                bytes           186     286     386     486     Pentium
 +                 1               8       5       4       5       3   NP
 +
 +Example:
 +<code asm>        leave</code>
 +
 +
 +=== LGDT ===
 +Load global descriptor table register (286+)
 +
 +    operand     bytes                   286     386     486     Pentium
 +     mem48       5                      11      11      11       6   NP
 +
 +Example:
 +<code asm>        lgdt    descriptor[ebx]</code>
 +
 +
 +=== LIDT === 
 +Load interrupt descriptor table register (286+)
 +
 +    operand     bytes                   286     386     486     Pentium
 +     mem48       5                      12      11      11       6   NP
 +
 +Example:
 +<code asm>        lidt    descriptor[ebx]</code>
 +
 +
 +=== LLDT ===
 +Load local descriptor table register (286+)
 +
 +    operand     bytes                   286     386     486     Pentium
 +     r16         3                      17      20      11       9   NP
 +     mem16     3+d(0-2)                 19      24      11       9   NP
 +
 +Example:
 +<code asm>        lldt    ax</code>
 +
 +
 +=== LMSW === 
 +Load machine status word (286+)
 +
 +    operand     bytes                   286     386     486     Pentium
 +     r16         3                       3      10      13       8   NP
 +     mem16     3+d(0-2)                  6      13      13       8   NP
 +
 +Example:
 +<code asm>        lmsw    ax</code>
 +
 +
 +=== LOCK ===
 +Lock bus on next instruction (prefix)
 +
 +                bytes   8088    186     286     386     486     Pentium
 +                 1       2       2       0       0       1       1   NP
 +
 +  (Note: xchg always is locked whether it is specified or not)
 +
 +
 +Example:
 +<code asm>        lock    mov     mem, 1</code>
 +
 +
 +=== LODS/LODSB/LODSW/LODSD ===
 +Load string operand
 +
 +    variations  bytes   8088    186     286     386     486     Pentium
 +    lodsb        1      16      10       5       5       5       2   NP
 +    lodsw        1      16      10       5       5       5       2   NP
 +    lodsd        1       -       -       -       5       5       2   NP
 +
 +Example:
 +<code asm>        lodsb</code>
 +
 +
 +=== LOOP === 
 +Loop control with CX counter
 +
 +      operand   bytes   8088    186     286     386     486     Pentium
 +      short      2      5/17    5/15    4/8+m   11+m    6/7     5/6  NP
 +
 +loopw short   (uses CX in 32-bit mode)
 +loopd short   (uses ECX in 16-bit mode)
 +
 +
 +Example:
 +<code asm>        loop    loop_start</code>
 +
 +
 +=== LOOPE/LOOPZ ===
 +Loop while equal (or zero)
 +
 +      operand   bytes   8088    186     286     386     486     Pentium
 +      short      2      6/18    5/16    4/8     11+m    6/9     7/8  NP
 +
 +loopew short  (uses CX in 32-bit mode)
 +loopzw short  (uses CX in 32-bit mode)
 +looped short  (uses ECX in 16-bit mode)
 +loopzd short  (uses ECX in 16-bit mode)
 +
 +
 +Example:
 +<code asm>        loope   loop_start</code>
 +
 +
 +=== LOOPNE/LOOPNZ ===
 +Loop while not equal (or not zero)
 +
 +        operand bytes   8088    186     286     386     486     Pentium
 +        short    2      5/19    5/16    4/8     11+m    6/9     7/8  NP
 +
 +loopnew short  (uses CX in 32-bit mode)
 +loopnzw short  (uses CX in 32-bit mode)
 +loopned short  (uses ECX in 16-bit mode)
 +loopnzd short  (uses ECX in 16-bit mode)
 +
 +Example:
 +<code asm>        loopne  loop_start</code>
 +
 +
 +=== LSL ===
 +Load segment limit (286+)
 +
 +    operands    bytes                   286     386     486     Pentium
 +    r16, r16     3                      14      20/25   10       8   NP
 +    r32, r32     3                       -      20/25   10       8
 +    r16, m16   3+d(0,2)                 16      21/26   10       8
 +    r32, m32   3+d(0,2)                  -      21/26   10       8
 +
 +Example:
 +<code asm>        lsl     eax, ebx</code>
 +
 +
 +=== LTR ===
 +Load task register (286+)
 +
 +    operand     bytes                   286     386     486     Pentium
 +    r16          3                      17      23      20      10   NP
 +    mem16      3+d(0,2)                 19      27      20      10
 +
 +Example:
 +<code asm>        ltr     ax</code>
 +
 +
 +=== MOV === 
 +Move data
 +
 +^  operands  ^  bytes               ^  8088   ^  186    ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  2      |  2      | 2     |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0-2)            |  13+EA  |  9      |  3    |  2    |  1    |  1   UV   |
 +|  reg, mem  |  2+d(0-2)            |  12+EA  |  12     |  5    |  4    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0-2)\\ +i(1,2)  |  14+EA  |  12-13  |  3    |  2    |  1    |  1   UV*  |
 +|  reg, imm  |  2+i(1,2)            |  4      |  3-4    |  2    |  2    |  1    |  1   UV   |
 +|  acc, mem  |  3                   |  14     |  8      |  5    |  4    |  1    |  1   UV   |
 +|  mem, acc  |  3                   |  14     |  9      |  3    |  2    |  1    |  1   UV   |
 +
 +//* : not pairable if there is a displacement and immediate//
 +
 +Example:   
 +<code asm>
 +    mov     eax, ebx
 +</code>
 +
 +**Segment Register Moves**
 +
 +**Real Mode**
 +
 +^  operands  ^  bytes     ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium    ^
 +|  seg, r16  |  2         |  2      |  2    |  2    |  2    |  3    |  2-11   NP  |
 +|  seg, m16  |  2+d(0,2)  |  12+EA  |  9    |  5    |  5    |  3    |  3-12   NP  |
 +|  r16, seg  |  2         |  2      |  2    |  2    |  2    |  3    |  1    NP    |
 +|  m16, seg  |  2+d(0,2)  |  13+EA  |  11   |  3    |  2    |  3    |  1    NP    |
 +
 +
 +Example:        
 +
 +<code asm>mov     ds, ax</code>
 +
 +
 +** Protected Mode Differences**
 +
 +^  operands  ^  bytes     ^  286  ^  386  ^  486  ^  Pentium    ^
 +|  seg, r16  |  2         |  17   |  18   |  9    |  2-11*  NP  |
 +|  seg, m16  |  2+d(0,2)  |  19   |  19   |  9    |  3-12*  NP  |
 +
 +** MOVE to/from special registers (386+) **
 +
 +^  operands   ^  bytes  ^  386     ^  486    ^  Pentium    ^
 +|  r32, cr32  |  3      |  6       |  4      |  4    NP    |
 +|  cr32, r32  |  3      |  4/10*   |  4/16*  |  12/22* NP  |
 +|  r32, dr32  |  3      |  14/22*  |  10     |  2/12* NP   |
 +|  dr32, r32  |  3      |  16/22*  |  11     |  11/12* NP  |
 +|  r32, tr32  |  3      |  12      |  3/4*   |  -    NP    |
 +|  tr32, r32  |  3      |  12      |  4/6*   |  -    NP    |
 +
 +//* : cycles depend on which special register//
 +
 +Example:
 +
 +<code asm>        mov     cr0, eax</code>
 +
 +
 +=== MOVS/MOVSB/MOVSW/MOVSD ===
 +Move data from string to string
 +
 +    variations  bytes   8088    186     286     386     486     Pentium
 +    movsb        1      18       9       5       7       7       4   NP
 +    movsw        1      26       9       5       7       7       4   NP
 +    movsd        1       -       -       -       7       7       4   NP
 +    rep movsb    2      9+17n   8+8n    5+4n    7+4n   12+3n*   3+n  NP
 +    rep movsw    2      9+25n   8+8n    5+4n    7+4n   12+3n*   3+n  NP
 +    rep movsd    2       -       -       -      7+4n   12+3n*   3+n  NP
 +
 +                        * = 5 if n=0, 13 if n=1
 +                 (n = count of bytes, words or dwords)
 +
 +Example:
 +<code asm>        rep movsb</code>
 +
 +
 +=== MOVSX ===
 +Move with sign-extend (386+)
 +
 +      operands  bytes                           386     486     Pentium
 +      reg, reg   3                               3       3       3   NP
 +      reg, mem   3+d(0,1,2,4)                    6       3       3   NP
 +
 +        (Note: destination reg is 16 or 32-bits; source is 8 or 16 bits)
 +
 +Example:
 +<code asm>        movsx   ebx, ax</code>
 +
 +
 +=== MOVZX ===
 +Move with zero-extend (386+)
 +
 +      operands  bytes                           386     486     Pentium
 +      reg, reg   3                               3       3       3   NP
 +      reg, mem   3+d(0,1,2,4)                    6       3       3   NP
 +
 +        (Note: destination reg is 16 or 32-bits; source is 8 or 16 bits)
 +
 +Example:
 +<code asm>        movzx   ebx, ax</code>
 +
 +
 +=== MUL ===
 +Unsigned multiply
 +
 +    operand     bytes   8088     186    286     386     486     Pentium
 +    r8           2     70-77    26-28   13      9-14   13-18    11   NP
 +    r16          2    118-133   35-37   21      9-22   13-26    11   NP
 +    r32          2       -        -      -      9-38   13-42    10   NP
 +    mem8    2+d(0-2)  76-83+EA  32-34   16     12-17   13-18    11   NP
 +    mem16   2+d(0-2) 124-139+EA 41-43   24     12-25   13-26    11   NP
 +    mem32   2+d(0-2)     -        -      -     12-41   13-42    10   NP
 +
 +     implied      operand      result
 +   multiplicand (multiplier)
 +        AL    *  byte       =  AX
 +        AX    *  word       =  DX:AX
 +        EAX   *  dword      =  EDX:EAX
 +
 +Example:
 +<code asm>        mul     ebx</code>
 +
 +
 +=== NEG ===
 +Two's complement negation
 +
 +    operand     bytes   8088    186     286     386     486     Pentium
 +    reg          2       3       3       2       2       1       1   NP
 +    mem       2+d(0-2)  24+EA   13       7       6       3       3   NP
 +
 +Example:
 +<code asm>        neg     eax</code>
 +
 +
 +=== NOP ===
 +No operation
 +
 +                bytes   8088    186     286     386     486     Pentium
 +                 1       3       3       3       3       1       1   UV
 +
 +Example:
 +<code asm>        nop</code>
 +
 +
 +=== NOT ===
 +One's complement negation
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg          2       3       3       2       2       1       1   NP
 +    mem       2+d(0-2)  24+EA   13       7       6       3       3   NP
 +
 +Example:
 +<code asm>        not     eax</code>
 +
 +
 +=== OR ===
 +Logical inclusive or
 +
 +   operands     bytes   8088    186     286     386     486     Pentium
 +   reg, reg      2       3       3       2       2       1       1   UV
 +   mem, reg   2+d(0,2)  24+EA   10       7       7       3       3   UV
 +   reg, mem   2+d(0,2)  13+EA   10       7       6       2       2   UV
 +   reg, imm   2+i(1,2)   4       4       3       2       1       1   UV
 +   mem, imm   2+d(0,2)  23+EA   16       7       7       3       3   UV*
 +               +i(1,2)
 +   acc, imm   1+i(1,2)   4       4       3       2       1       1   UV
 +
 +        * = not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        or      eax, ebx</code>
 +
 +
 +=== OUT ===
 +Output to port
 +
 +^    operands  ^  bytes  ^  8088  ^  186  ^   286  ^   386  ^   486   ^  Pentium  ^
 +|    imm8, al  |   2    |  14    |   9    |   3   |   10  |    16   |   12   NP  |
 +|    imm8, ax  |   2    |  14    |   9    |   3   |   10  |    16   |   12   NP  |
 +|    imm8, eax  |  2    |   -    |   -    |   -   |   10  |    16   |   12   NP  |
 +|    dx, al     |  1    |  12    |   7    |   3   |   11  |    16   |   12   NP  |
 +|    dx, ax     |  1    |  12    |   7    |   3   |   11  |    16   |   12   NP  |
 +|    dx, eax    |  1    |   -    |   -    |   -   |   11  |    16   |   12   NP  |
 +
 +**Protected Mode**
 +
 +^    operands   ^  bytes         ^                  386   ^  486   ^  Pentium  ^
 +|    imm8, acc  |   2            |                4/24/24  |  11/31/29  |  9/26/24 NP  |
 +|    dx, acc    |   1            |               5/25/25  |   10/30/29  |  9/26/24 NP  |
 +
 +cycles for: CPL <= IOPL / CPL > IOPL / V86
 +
 +Example:        
 +
 +<code asm>
 +out     dx, al</code>
 +=== OUTS/OUTSB/OUTSW/OUTSD ===
 +Output string to port
 +
 +    variations  bytes           186     286     386     486     Pentium
 +    outsb        1              14       5      14      17      13   NP
 +    outsw        1              14       5      14      17      13   NP
 +    outsd        1               -       -      14      17      13   NP
 +
 +**Protected mode**
 +
 +                bytes                           386     486     Pentium
 +                 1                           8/28/28 10/32/30 10/27/25 NP
 +
 +               cycles for: CPL <= IOPL / CPL > IOPL / V86
 +
 +Example:
 +<code asm>        rep outsw</code>
 +
 +
 +=== POP ===
 +Pop a word/dword from the stack
 +
 +    operand     bytes   8088    186     286     386     486     Pentium
 +    reg          1      12      10       5       4       1       1   UV
 +    mem       2+d(0-2)  25+EA   20       5       5       6       3   NP
 +    seg          1      12       8       5       7       3       3   NP
 +    FS/GS        2       -       -       -       7       3       3   NP
 +
 +**Protected mode**
 +
 +    operand     bytes                   286     386     486     Pentium
 +    CS/DS/ES     1                      20      21       9     3-12  NP
 +    SS           1                      20      21       9     8-17  NP
 +    FS/GS        2                       -      21       9     3-12  NP
 +
 +Example:
 +<code asm>        pop     eax</code>
 +
 +
 +=== POPA/POPAD ===
 +Pop all (186+)/Pop all double (386+)
 +
 +    variations  bytes           186     286     386     486     Pentium
 +    popa         1              51      19      24       9       5   NP
 +    popad        1               -       -      24       9       5   NP
 +
 +  popa  = pop di, si, bp, sp, bx, dx, cx, ax
 +  popad = pop edi, esi, ebp, esp, ebx, edx, ecx, eax
 +          (sp and esp are discarded)
 +
 +Example:
 +<code asm>        popa</code>
 +
 +
 +=== POPF/POPFD ===
 +Pop flags/Pop flags double (386+)
 +
 +    variations  bytes   8088    186     286     386     486     Pentium
 +    popf         1      12       8       5       5       9       6   NP
 +    popfd        1       -       -       -       5       9       6   NP
 +
 +**Protected mode**
 +
 +                bytes                   286     386     486     Pentium
 +    popf         1                       5       5       6       4   NP
 +    popfd        1                       -       5       6       4   NP
 +
 +Example:
 +<code asm>        popf</code>
 +
 +
 +=== PUSH ===
 +push a word/dword to the stack
 +
 +     operand    bytes   8088    186     286     386     486     Pentium
 +     reg         1      15      10       3       2       1       1   UV
 +     mem      2+d(0-2)  24+EA   16       5       5       4       2   NP
 +     seg         1      14       9       3       2       3       1   NP
 +     imm     1+i(1,2)    -       -       3       2       1       1   NP
 +     FS/GS       2       -       -       -       2       3       1   NP
 +
 +Example:
 +<code asm>        push    eax</code>
 +
 +
 +=== PUSHA/PUSHAD ===
 +Push all (186+)/Push all double (386+)
 +
 +    variations  bytes           186     286     386     486     Pentium
 +    pusha        1              36      17      18      11       5   NP
 +    pushad       1               -       -      18      11       5   NP
 +
 +  pusha  = push ax, cx, dx, bx, sp, bp, si, di,
 +  pushad = push eax, ecx, edx, ebx, esp, ebp, esi, edi
 +
 +Example:
 +<code asm>        pusha</code>
 +
 +=== PUSHF/PUSHFD ===
 +Push flags/Push flags double (386+)
 +
 +    variations  bytes   8088    186     286     386     486     Pentium
 +    pushf        1      14       9       3       4       4       9   NP
 +    pushfd       1       -       -       -       4       4       9   NP
 +
 +**Protected mode**
 +
 +                bytes                   286     386     486     Pentium
 +    pushf        1                       3       4       3       3   NP
 +    pushfd       1                       -       4       3       3   NP
 +
 +Example:
 +<code asm>        pushf</code>
 +
 +
 +=== RCL ===
 +Rotate bits left with CF
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, 1       2       2       2       2       9       3       1   PU
 +    mem, 1    2+d(0,2)  23+EA   15       7      10       4       3   PU
 +    reg, cl      2       8+4n    5+n    5+n      9      8-30    7-24 NP
 +    mem, cl   2+d(0,2) 28+EA+4n 17+n    8+n     10      9-31    9-26 NP
 +    reg, imm     3       -       5+n    5+n      9      8-30    8-25 NP
 +    mem, imm  3+d(0,2)   -      17+n    8+n     10      9-31   10-27 NP
 +
 +Example:
 +<code asm>        rcl     eax, 16</code>
 +
 +
 +=== RCR ===
 +Rotate bits right with CF
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, 1       2       2       2       2       9       3       1   PU
 +    mem, 1    2+d(0,2)  23+EA   15       7      10       4       3   PU
 +    reg, cl      2       8+4n    5+n    5+n      9      8-30    7-24 NP
 +    mem, cl   2+d(0,2) 28+EA+4n 17+n    8+n     10      9-31    9-26 NP
 +    reg, imm     3       -       5+n    5+n      9      8-30    8-25 NP
 +    mem, imm  3+d(0,2)   -      17+n    8+n     10      9-31   10-27 NP
 +
 +Example:
 +<code asm>        rcr     eax, 16</code>
 +
 +
 +=== ROL ===
 +Rotate bits left
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, 1       2       2       2       2       3       3       1   PU
 +    mem, 1    2+d(0,2)  23+EA   15       7       7       4       3   PU
 +    reg, cl      2       8+4n    5+n    5+n      3       3       4   NP
 +    mem, cl   2+d(0,2) 28+EA+4n 17+n    8+n      7       4       4   NP
 +    reg, imm     3       -       5+n    5+n      3       2       1   PU
 +    mem, imm  3+d(0,2)   -      17+n    8+n      7       4       3   PU*
 +
 +       * = not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        rol     eax, 16</code>
 +
 +
 +=== ROR ===
 +Rotate bits right
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, 1       2       2       2       2       3       3       1   PU
 +    mem, 1    2+d(0,2)  23+EA   15       7       7       4       3   PU
 +    reg, cl      2       8+4n    5+n    5+n      3       3       4   NP
 +    mem, cl   2+d(0,2) 28+EA+4n 17+n    8+n      7       4       4   NP
 +    reg, imm     3       -       5+n    5+n      3       2       1   PU
 +    mem, imm  3+d(0,2)   -      17+n    8+n      7       4       3   PU*
 +
 +       * = not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        ror     eax, 16</code>
 +
 +
 +=== RDMSR ===
 +Read from model specific register (Pentium+)
 +
 +                bytes                                           Pentium
 +                2                                              20-24 NP
 +
 +Example:
 +<code asm>        rdmsr</code>
 +
 +
 +=== REP ===
 +Repeat string operation
 +
 +  See:  MOVS (rep movs)         move block
 +  See:  STOS (rep stos)         fill block
 +
 +
 +=== REPE ===
 +Repeat while equal (or zero) string operation
 +
 +  See:  CMPS (repe cmps)        find non-matching memory items
 +  See:  CMPS (repe scas)        find non-acc matching byte in memory
 +
 +
 +=== REPNE ===
 +Repeat while not equal (or not zero) string operation
 +
 +  See:  CMPS (repne cmps)       find first matching memory items
 +  See:  SCAS (repne scas)       find first matching memory item to acc
 +
 +
 +=== RET/RETN/RETF ===
 +Return from procedure
 +
 +   variations/
 +   operands     bytes   8088    186     286     386     486     Pentium
 +   retn         1       20      16      11+m    10+m     5       2   NP
 +   retn imm16   1+d(2)  24      18      11+m    10+m     5       3   NP
 +   retf         1       34      22      15+m    18+m    13       4   NP
 +   retf imm16   1+d(2)  33      25      15+m    18+m    14       4   NP
 +
 +RET is coded by the assembler as near or far based on the procedure declaration and program model, as:
 +
 +<code>
 +      RETN (return near)
 +      RETF (return far)
 +</code>
 +
 +Example:
 +<code asm>        ret</code>
 +
 +**Protected mode**
 +
 +    variations/
 +    operands    bytes                   286     386     486     Pentium
 +    retf        1                     25+m/55  32+m/62 18/33  4-13/23 NP
 +    retf imm16  1+d(2)                25+m/55  32+m/68 17/33  4-13/23 NP
 +
 +cycles for: same privilege level/lower privilege level
 +=== RSM === 
 +Resume from system management mode (Pentium+)
 +
 +                bytes                                           Pentium
 +                 2                                              83   NP
 +
 +Example:
 +<code asm>        rsm</code>
 +
 +
 +=== SAL/SHL/SAR/SHR === 
 +Shift bits
 +
 +   operands     bytes   8088    186     286     386     486     Pentium
 +   reg, 1        2       2       2       2       3       3       1   PU
 +   mem, 1     2+d(0,2)  23+EA   15       7       7       4       3   PU
 +   reg, cl       2       8+4n    5+n    5+n      3       3       4   NP
 +   mem, cl    2+d(0,2) 28+EA+4n 17+n    8+n      7       4       4   NP
 +   reg, imm      3       -       5+n    5+n      3       2       1   PU
 +   mem, imm   3+d(0,2)   -      17+n    8+n      7       4       3   PU*
 +
 +       * = not pairable if there is a displacement and immediate
 +
 +   sal = shift arithmetic left         sar =  shift arithmetic right
 +   shl = shift left (same as sal)      shr =  shift right
 +
 +Example:
 +<code asm>        shl     eax, 1</code>
 +
 +
 +=== SAHF ===
 +Store AH into flags
 +
 +                bytes   8088    186     286     386     486     Pentium
 +                 1       4       3       2       3       2       2   NP
 +
 +Example:
 +<code asm>        sahf</code>
 +
 +
 +=== SBB ===
 +Integer subtraction with borrow
 +
 +    operands    bytes   8088    186     286     386     486     Pentium
 +    reg, reg     2       3       3       2       2       1       1   PU
 +    mem, reg  2+d(0,2)  24+EA   10       7       7       3       3   PU
 +    reg, mem  2+d(0,2)  13+EA   10       7       6       2       2   PU
 +    reg, imm  2+i(1,2)   4       4       3       2       1       1   PU
 +    mem, imm  2+d(0,2)  23+EA   16       7       7       3       3   PU*
 +               +i(1,2)
 +    acc, imm  1+i(1,2)   4       4       3       2       1       1   PU
 +
 +       * = not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        sbb     eax, ebx</code>
 +
 +
 +=== SCAS/SCASB/SCASW/SCASD ===
 +Scan string data
 +
 +    variations  bytes   8088    186     286     386     486     Pentium
 +    scasb        1      19      15       7       7       6       4   NP
 +    scasw        1      19      15       7       7       6       4   NP
 +    scasd        1       -       -       -       7       6       4   NP
 +    repX scasb   2      9+15n   5+15n   5+8n    5+8n    7+5n*   8+4n NP
 +    repX scasw   2      9+19n   5+15n   5+8n    5+8n    7+5n*   8+4n NP
 +    repX scasd   2       -       -       -      5+8n    7+5n*   8+4n NP
 +
 +    repX = repe or repz or repne or repnz
 +
 +                     * = 5 if n=0
 +                     (n = count of bytes, words or dwords)
 +
 +
 +Example:
 +<code asm>        repne   scasb</code>
 +
 +=== SET ===
 +Set byte to 1 on condition else set to 0 (386+)
 +
 +      operand   bytes                           386     486     Pentium
 +      r8         3                               4      4/3     1/2  NP
 +      mem8     3+d(0-2)                          5      3/4     1/2  NP
 +
 +                        Cycles are for:  true/false
 +
 +  setCC = one of:
 +
 +     seta    setae   setb    setbe   setc    sete
 +     setg    setge   setl    setle   setna   setnae
 +     setnb   setnbe  setnc   setne   setng   setnge
 +     setnl   setnle  setno   setnp   setns   setnz
 +     seto    setp    setpe   setpo   sets    setz
 +
 +Example:
 +<code asm>        setne   al</code>
 +
 +
 +=== SGDT ===
 +Store global descriptor table register (286+)
 +
 +     operand    bytes                   286     386     486     Pentium
 +     mem48       5                      11       9      10       4   NP
 +
 +Example:
 +<code asm>        sgdt    descriptor[ebx]</code>
 +
 +
 +=== SIDT ===
 +Store interrupt descriptor table register (286+)
 +
 +     operand    bytes                   286     386     486     Pentium
 +     mem48       5                      12       9      10       4   NP
 +
 +Example:
 +<code asm>        sidt    descriptor[ebx]</code>
 +
 +
 +=== SHLD ===
 +Double precision shift left (386+)
 +
 +     operands        bytes                      386     486     Pentium
 +     reg, reg, imm    4                          3       2       4   NP
 +     mem, reg, imm   4+d(0-2)                    7       3       4   NP
 +     reg, reg, cl     4                          3       3       4   NP
 +     mem, reg, cl    4+d(0-2)                    7       4       5   NP
 +
 +Example:
 +<code asm>        shld    eax, ebx, 16</code>
 +
 +
 +=== SHRD ===
 +Double precision shift right (386+)
 +
 +     operands        bytes                      386     486     Pentium
 +     reg, reg, imm    4                          3       2       4   NP
 +     mem, reg, imm   4+d(0-2)                    7       3       4   NP
 +     reg, reg, cl     4                          3       3       4   NP
 +     mem, reg, cl    4+d(0-2)                    7       4       5   NP
 +
 +Example:
 +<code asm>        shrd    eax, ebx, 16</code>
 +
 +
 +=== SLDT ===
 +Store local descriptor table register (286+)
 +
 +     operands   bytes                   286     386     486     Pentium
 +     r16         3                       2       2       2       2   NP
 +     mem16     3+d(0-2)                  3       2       3       2   NP
 +
 +Example:
 +<code asm>        sldt    ax</code>
 +
 +
 +=== SMSW ===
 +Store machine status word (286+)
 +
 +     operands   bytes                   286     386     486     Pentium
 +     r16         3                       2       2       2       4   NP
 +     mem16     3+d(0-2)                  3       3       3       4   NP
 +
 +Example:
 +<code asm>        smsw    ax</code>
 +
 +
 +=== STC ===
 +Set the carry flag
 +
 +                bytes   8088    186     286     386     486     Pentium
 +                 1       2       2       2       2       2       2   NP
 +
 +Example:
 +<code asm>        stc</code>
 +
 +
 +=== STD ===
 +Set direction flag (set to reverse string direction)
 +
 +                bytes   8088    186     286     386     486     Pentium
 +                 1       2       2       2       2       2       2   NP
 +
 +Example:
 +<code asm>        std</code>
 +
 +
 +=== STI ===
 +Set interrupt flag (enable)
 +
 +                bytes   8088    186     286     386     486     Pentium
 +                 1       2       2       2       3       5       7   NP
 +
 +Example:
 +<code asm>        sti</code>
 +
 +
 +=== STOS/STOSB/STOSW/STOSD ===
 +Store string data
 +
 +^  variations  ^  bytes  ^  8088   ^  186   ^  286   ^  386   ^  486    ^  Pentium  ^
 +|  stosb       |  1      |  11     |  10    |  3     |  4     |  5      |  3   NP   |
 +|  stosw       |  1      |  15     |  10    |  3     |  4     |  5      |  3   NP   |
 +|  stosd       |  1      |  -      |  -     |  -     |  4     |  5      |  3   NP   |
 +|  rep stosb   |  2      |  9+10n  |  6+9n  |  4+3n  |  5+5n  |  7+4n*  |  3+n  NP  |
 +|  rep stosw   |  2      |  9+14n  |  6+9n  |  4+3n  |  5+5n  |  7+4n*  |  3+n  NP  |
 +|  rep stosd   |  2      |  -      |  -     |  -     |  5+5n  |  7+4n*  |  3+n  NP  |
 +
 +* = 5 if n=0, 13 if n=1
 +
 +(n = count of bytes, words or dwords)
 +
 +Example:
 +<code asm>        rep     stosd</code>
 +
 +
 +=== STR ===
 +Store task register (286+)
 +
 +^  operand  ^  bytes     ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  r16      |  3         |  2    |  2    |  2    |  2   NP   |
 +|  mem16    |  3+d(0-2)  |  3    |  2    |  3    |  2   NP   |
 +
 +Example:
 +<code asm>        str     bx</code>
 +
 +
 +=== SUB ===
 +Integer subtraction
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0,2)            |  24+EA  |  10   |  7    |  7    |  3    |  3   UV   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  7    |  6    |  2    |  2   UV   |
 +|  reg, imm  |  2+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  23+EA  |  16   |  7    |  7    |  3    |  3   UV*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +
 +* : not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        sub     eax, ebx</code>
 +
 +
 +=== TEST ===
 +Logical compare
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0,2)            |  13+EA  |  10   |  6    |  5    |  2    |  2   UV   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  6    |  5    |  2    |  2   UV   |
 +|  reg, imm  |  2+i(1,2)            |  5      |  4    |  3    |  2    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  11+EA  |  10   |  6    |  5    |  2    |  2   UV*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +
 +* : not pairable if there is a displacement and immediate
 +
 +Example:
 +
 +<code asm>       sub     eax, ebx</code>
 +=== VERR ===
 +Verify a segment for reading (286+)
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium    ^
 +|     r16    |     3   |   -    |   -   |   14  |   10  |  11   |    7   NP  |
 +|     mem16  |  3+d(0,2)  |  -  |   -  |    16  |  11   |   11  |     7   NP  |
 +
 +Example:
 +<code asm>        verr    ax</code>
 +
 +
 +=== VERW ===
 +Verify a segment for writing (286+)
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium    ^
 +|     r16    |     3   |    -   |   -   |   14  |   15  |  11   |    7   NP  |
 +|     mem16  |  3+d(0,2)  |  -  |   -   |   16  |   16  |  11   |    7   NP  |
 +
 +Example:
 +<code asm>        verr    ax</code>
 +
 +
 +=== WAIT ===
 +Wait for co-processor
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium    ^
 +|      -     |    1    |   4    |   6   |    3  |   6   |   1-3 |     1   NP  |
 +
 +Example:
 +<code asm>        wait</code>
 +
 +
 +=== WBINVD ===
 +Write-back and invalidate data cache (486+)
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium    ^
 +|  -         |  2      |  -     |  -    |  -    |  -    |  5    |  2000+  NP  |
 +
 +Example:
 +<code asm>        wbinvd</code>
 +
 +
 +=== WRMSR ===
 +Write to model specific register (PENTIUM+)
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium   ^
 +|  -         |  2      |  -     |  -    |  -    |  -    |  -    |  30-45 NP  |
 +
 +Example:
 +<code asm>        wrmsr</code>
 +
 +
 +=== XADD ===
 +Exchange and add (486+)
 +
 +^  operands  ^  bytes     ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  3         |  -     |  -    |  -    |  -    |  3    |  3   NP   |
 +|  mem, reg  |  3+d(0-2)  |  -     |  -    |  -    |  -    |  4    |  4   NP   |
 +
 +Example:
 +<code asm>        xadd    eax, ebx</code>
 +
 +
 +=== XCHG ===
 +Exchange register/memory with register
 +
 +^  operands  ^  bytes     ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2         |  4      |  4    |  3    |  3    |  3    |  3   NP   |
 +|  reg, mem  |  2+d(0-2)  |  25+EA  |  17   |  5    |  5    |  5    |  3   NP   |
 +|  mem, reg  |  2+d(0-2)  |  25+EA  |  17   |  5    |  5    |  5    |  3   NP   |
 +|  acc, reg  |  1         |  3      |  3    |  3    |  3    |  3    |  2   NP   |
 +|  reg, acc  |  1         |  3      |  3    |  3    |  3    |  3    |  2   NP   |
 +
 +in above: acc = AX or EAX only
 +
 +
 +Example:
 +<code asm>        xchg    ax, dx</code>
 +
 +=== XLAT/XLATB ===
 +Table look-up translation
 +
 +^  operands  ^  bytes  ^  8088  ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  -         |  1      |  11    |  11   |  5    |  5    |  4    |  4   NP   |
 +
 +Example:
 +<code asm>        xlat</code>
 +
 +
 +=== XOR ===
 +Logical exclusive or
 +
 +^  operands  ^  bytes               ^  8088   ^  186  ^  286  ^  386  ^  486  ^  Pentium  ^
 +|  reg, reg  |  2                   |  3      |  3    |  2    |  2    |  1    |  1   UV   |
 +|  mem, reg  |  2+d(0,2)            |  24+EA  |  10   |  7    |  7    |  3    |  3   UV   |
 +|  reg, mem  |  2+d(0,2)            |  13+EA  |  10   |  7    |  6    |  2    |  2   UV   |
 +|  reg, imm  |  2+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +|  mem, imm  |  2+d(0,2)\\ +i(1,2)  |  23+EA  |  16   |  7    |  7    |  3    |  3   UV*  |
 +|  acc, imm  |  1+i(1,2)            |  4      |  4    |  3    |  2    |  1    |  1   UV   |
 +
 +* : not pairable if there is a displacement and immediate
 +
 +Example:
 +<code asm>        xor     eax, ebx</code>