home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Library / 80x86_OpCodesReferences / opcodes.txt < prev    next >
Text File  |  2000-05-25  |  113KB  |  2,027 lines

  1.  
  2.  
  3. Intel 8086 Family Architecture. . . . . . . . . . . . . . . . . . . . .   3
  4. Instruction Clock Cycle Calculation . . . . . . . . . . . . . . . . . .   3
  5. 8088/8086  Effective Address (EA) Calculation . . . . . . . . . . . . .   3
  6. Task State Calculation. . . . . . . . . . . . . . . . . . . . . . . . .   4
  7. FLAGS - Intel 8086 Family Flags Register. . . . . . . . . . . . . . . .   4
  8. MSW - Machine Status Word (286+ only) . . . . . . . . . . . . . . . . .   5
  9. 8086/80186/80286/80386/80486 Instruction Set. . . . . . . . . . . . . .   6
  10.      AAA - Ascii Adjust for Addition. . . . . . . . . . . . . . . . . .   6
  11.      AAD - Ascii Adjust for Division. . . . . . . . . . . . . . . . . .   6
  12.      AAM - Ascii Adjust for Multiplication. . . . . . . . . . . . . . .   6
  13.      AAS - Ascii Adjust for Subtraction . . . . . . . . . . . . . . . .   6
  14.      ADC - Add With Carry . . . . . . . . . . . . . . . . . . . . . . .   7
  15.      ADD - Arithmetic Addition. . . . . . . . . . . . . . . . . . . . .   7
  16.      AND - Logical And. . . . . . . . . . . . . . . . . . . . . . . . .   7
  17.      ARPL - Adjusted Requested Privilege Level of Selector (286+ PM). .   7
  18.      BOUND - Array Index Bound Check (80188+) . . . . . . . . . . . . .   8
  19.      BSF - Bit Scan Forward (386+). . . . . . . . . . . . . . . . . . .   8
  20.      BSR - Bit Scan Reverse  (386+) . . . . . . . . . . . . . . . . . .   8
  21.      BSWAP - Byte Swap       (486+) . . . . . . . . . . . . . . . . . .   8
  22.      BT - Bit Test           (386+) . . . . . . . . . . . . . . . . . .   9
  23.      BTC - Bit Test with Compliment (386+). . . . . . . . . . . . . . .   9
  24.      BTR - Bit Test with Reset (386+) . . . . . . . . . . . . . . . . .   9
  25.      BTS - Bit Test and Set  (386+) . . . . . . . . . . . . . . . . . .   9
  26.      CALL - Procedure Call. . . . . . . . . . . . . . . . . . . . . . .  10
  27.      CBW - Convert Byte to Word . . . . . . . . . . . . . . . . . . . .  10
  28.      CDQ - Convert Double to Quad (386+). . . . . . . . . . . . . . . .  10
  29.      CLC - Clear Carry. . . . . . . . . . . . . . . . . . . . . . . . .  11
  30.      CLD - Clear Direction Flag . . . . . . . . . . . . . . . . . . . .  11
  31.      CLI - Clear Interrupt Flag (disable) . . . . . . . . . . . . . . .  11
  32.      CLTS - Clear Task Switched Flag (286+ privileged). . . . . . . . .  11
  33.      CMC - Complement Carry Flag. . . . . . . . . . . . . . . . . . . .  11
  34.      CMP - Compare. . . . . . . . . . . . . . . . . . . . . . . . . . .  12
  35.      CMPS - Compare String (Byte, Word or Doubleword) . . . . . . . . .  12
  36.      CMPXCHG - Compare and Exchange . . . . . . . . . . . . . . . . . .  12
  37.      CWD - Convert Word to Doubleword . . . . . . . . . . . . . . . . .  12
  38.      CWDE - Convert Word to Extended Doubleword (386+). . . . . . . . .  13
  39.      DAA - Decimal Adjust for Addition. . . . . . . . . . . . . . . . .  13
  40.      DAS - Decimal Adjust for Subtraction . . . . . . . . . . . . . . .  13
  41.      DEC - Decrement. . . . . . . . . . . . . . . . . . . . . . . . . .  13
  42.      DIV - Divide . . . . . . . . . . . . . . . . . . . . . . . . . . .  13
  43.      ENTER - Make Stack Frame  (80188+) . . . . . . . . . . . . . . . .  14
  44.      ESC - Escape . . . . . . . . . . . . . . . . . . . . . . . . . . .  14
  45.      HLT - Halt CPU . . . . . . . . . . . . . . . . . . . . . . . . . .  14
  46.      IDIV - Signed Integer Division . . . . . . . . . . . . . . . . . .  14
  47.      IMUL - Signed Multiply . . . . . . . . . . . . . . . . . . . . . .  15
  48.      IN - Input Byte or Word From Port. . . . . . . . . . . . . . . . .  15
  49.      INC - Increment. . . . . . . . . . . . . . . . . . . . . . . . . .  16
  50.      INS - Input String from Port  (80188+) . . . . . . . . . . . . . .  16
  51.      INT - Interrupt. . . . . . . . . . . . . . . . . . . . . . . . . .  16
  52.      INTO - Interrupt on Overflow . . . . . . . . . . . . . . . . . . .  17
  53.      INVD - Invalidate Cache  (486+). . . . . . . . . . . . . . . . . .  17
  54.      INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+) . .  17
  55.      IRET/IRETD - Interrupt Return. . . . . . . . . . . . . . . . . . .  17
  56.      Jxx - Jump Instructions Table. . . . . . . . . . . . . . . . . . .  18
  57.      JCXZ/JECXZ - Jump if Register (E)CX is Zero. . . . . . . . . . . .  18
  58.      JMP - Unconditional Jump . . . . . . . . . . . . . . . . . . . . .  19
  59.      LAHF - Load Register AH From Flags . . . . . . . . . . . . . . . .  19
  60.      LAR - Load Access Rights (286+ protected). . . . . . . . . . . . .  19
  61.      LDS - Load Pointer Using DS. . . . . . . . . . . . . . . . . . . .  20
  62.      LEA - Load Effective Address . . . . . . . . . . . . . . . . . . .  20
  63.      LEAVE - Restore Stack for Procedure Exit (80188+). . . . . . . . .  20
  64.      LES - Load Pointer Using ES. . . . . . . . . . . . . . . . . . . .  20
  65.      LFS - Load Pointer Using FS (386+) . . . . . . . . . . . . . . . .  21
  66.      LGDT - Load Global Descriptor Table (286+ privileged). . . . . . .  21
  67.      LIDT - Load Interrupt Descriptor Table (286+ privileged) . . . . .  21
  68.      LGS - Load Pointer Using GS (386+) . . . . . . . . . . . . . . . .  21
  69.      LLDT - Load Local Descriptor Table (286+ privileged) . . . . . . .  22
  70.      LMSW - Load Machine Status Word (286+ privileged). . . . . . . . .  22
  71.      LOCK - Lock Bus. . . . . . . . . . . . . . . . . . . . . . . . . .  22
  72.      LODS - Load String (Byte, Word or Double). . . . . . . . . . . . .  22
  73.      LOOP - Decrement CX and Loop if CX Not Zero. . . . . . . . . . . .  23
  74.      LOOPE/LOOPZ - Loop While Equal / Loop While Zero . . . . . . . . .  23
  75.      LOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not Equal . . . .  23
  76.      LSL - Load Segment Limit (286+ protected). . . . . . . . . . . . .  23
  77.      LSS - Load Pointer Using SS (386+) . . . . . . . . . . . . . . . .  24
  78.      LTR - Load Task Register (286+ privileged) . . . . . . . . . . . .  24
  79.      MOV - Move Byte or Word. . . . . . . . . . . . . . . . . . . . . .  24
  80.      MOVS - Move String (Byte or Word). . . . . . . . . . . . . . . . .  25
  81.      MOVSX - Move with Sign Extend (386+) . . . . . . . . . . . . . . .  25
  82.      MOVZX - Move with Zero Extend (386+) . . . . . . . . . . . . . . .  25
  83.      MUL - Unsigned Multiply. . . . . . . . . . . . . . . . . . . . . .  25
  84.      NEG - Two's Complement Negation. . . . . . . . . . . . . . . . . .  26
  85.      NOP - No Operation (90h) . . . . . . . . . . . . . . . . . . . . .  26
  86.      NOT - One's Compliment Negation (Logical NOT). . . . . . . . . . .  26
  87.      OR - Inclusive Logical OR. . . . . . . . . . . . . . . . . . . . .  26
  88.      OUT - Output Data to Port. . . . . . . . . . . . . . . . . . . . .  27
  89.      OUTS - Output String to Port  (80188+) . . . . . . . . . . . . . .  27
  90.      POP - Pop Word off Stack . . . . . . . . . . . . . . . . . . . . .  27
  91.      POPA/POPAD - Pop All Registers onto Stack  (80188+). . . . . . . .  28
  92.      POPF/POPFD - Pop Flags off Stack . . . . . . . . . . . . . . . . .  28
  93.      PUSH - Push Word onto Stack. . . . . . . . . . . . . . . . . . . .  28
  94.      PUSHA/PUSHAD - Push All Registers onto Stack  (80188+) . . . . . .  28
  95.      PUSHF/PUSHFD - Push Flags onto Stack . . . . . . . . . . . . . . .  29
  96.      RCL - Rotate Through Carry Left. . . . . . . . . . . . . . . . . .  29
  97.      RCR - Rotate Through Carry Right . . . . . . . . . . . . . . . . .  29
  98.      REP - Repeat String Operation. . . . . . . . . . . . . . . . . . .  30
  99.      REPE/REPZ - Repeat Equal / Repeat Zero . . . . . . . . . . . . . .  30
  100.      REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero . . . . . . . . .  30
  101.      RET/RETF - Return From Procedure . . . . . . . . . . . . . . . . .  31
  102.      ROL - Rotate Left. . . . . . . . . . . . . . . . . . . . . . . . .  31
  103.      ROR - Rotate Right . . . . . . . . . . . . . . . . . . . . . . . .  31
  104.      SAHF - Store AH Register into FLAGS. . . . . . . . . . . . . . . .  32
  105.      SAL/SHL - Shift Arithmetic Left / Shift Logical Left . . . . . . .  32
  106.      SAR - Shift Arithmetic Right . . . . . . . . . . . . . . . . . . .  32
  107.      SBB - Subtract with Borrow/Carry . . . . . . . . . . . . . . . . .  33
  108.      SCAS - Scan String  (Byte, Word or Doubleword) . . . . . . . . . .  33
  109.      SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+). . .  33
  110.      SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+). . .  33
  111.      SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+). . .  34
  112.      SETE/SETZ - Set if Equal / Set if Zero (386+). . . . . . . . . . .  34
  113.      SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+). . . . . .  34
  114.      SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+) . .  34
  115.      SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+) . .  35
  116.      SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+)  35
  117.      SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+) . .  35
  118.      SETS - Set if Signed (386+). . . . . . . . . . . . . . . . . . . .  35
  119.      SETNS - Set if Not Signed (386+) . . . . . . . . . . . . . . . . .  36
  120.      SETC - Set if Carry (386+) . . . . . . . . . . . . . . . . . . . .  36
  121.      SETNC - Set if Not Carry (386+). . . . . . . . . . . . . . . . . .  36
  122.      SETO - Set if Overflow (386+). . . . . . . . . . . . . . . . . . .  36
  123.      SETNO - Set if Not Overflow (386+) . . . . . . . . . . . . . . . .  36
  124.      SETP/SETPE - Set if Parity / Set if Parity Even  (386+). . . . . .  37
  125.      SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+). . . . .  37
  126.      SGDT - Store Global Descriptor Table (286+ privileged) . . . . . .  37
  127.      SIDT - Store Interrupt Descriptor Table (286+ privileged). . . . .  37
  128.      SHL - Shift Logical Left . . . . . . . . . . . . . . . . . . . . .  37
  129.      SHR - Shift Logical Right. . . . . . . . . . . . . . . . . . . . .  38
  130.      SHLD/SHRD - Double Precision Shift (386+). . . . . . . . . . . . .  38
  131.      SLDT - Store Local Descriptor Table (286+ privileged). . . . . . .  38
  132.      SMSW - Store Machine Status Word (286+ privileged) . . . . . . . .  38
  133.      STC - Set Carry. . . . . . . . . . . . . . . . . . . . . . . . . .  39
  134.      STD - Set Direction Flag . . . . . . . . . . . . . . . . . . . . .  39
  135.      STI - Set Interrupt Flag  (Enable Interrupts). . . . . . . . . . .  39
  136.      STOS - Store String  (Byte, Word or Doubleword). . . . . . . . . .  39
  137.      STR - Store Task Register (286+ privileged). . . . . . . . . . . .  39
  138.      SUB - Subtract . . . . . . . . . . . . . . . . . . . . . . . . . .  40
  139.      TEST - Test For Bit Pattern. . . . . . . . . . . . . . . . . . . .  40
  140.      VERR - Verify Read (286+ protected). . . . . . . . . . . . . . . .  40
  141.      VERW - Verify Write (286+ protected) . . . . . . . . . . . . . . .  40
  142.      WAIT/FWAIT - Event Wait. . . . . . . . . . . . . . . . . . . . . .  41
  143.      WBINVD - Write-Back and Invalidate Cache (486+). . . . . . . . . .  41
  144.      XCHG - Exchange. . . . . . . . . . . . . . . . . . . . . . . . . .  41
  145.      XLAT/XLATB - Translate . . . . . . . . . . . . . . . . . . . . . .  41
  146.      XOR - Exclusive OR . . . . . . . . . . . . . . . . . . . . . . . .  42
  147.  
  148.  
  149. Intel 8086 Family Architecture
  150.         General Purpose Registers               Segment Registers
  151.         AH/AL  AX  (EAX)  Accumulator            CS     Code Segment
  152.         BH/BL  BX  (EBX)  Base                   DS     Data Segment
  153.         CH/CL  CX  (ECX)  Counter                SS     Stack Segment
  154.         DH/DL  DX  (EDX)  Data                   ES     Extra Segment
  155.                                                 (FS)    386 and newer
  156.         (Exx) indicates 386+ 32 bit register    (GS)    386 and newer
  157.         Pointer Registers                       Stack Registers
  158.         SI (ESI)  Source Index                  SP (ESP)  Stack Pointer
  159.         DI (EDI)  Destination Index             BP (EBP)  Base Pointer
  160.         IP        Instruction Pointer
  161.         Status Registers
  162.         FLAGS Status Flags   (see FLAGS)
  163.         Special Registers (386+ only)
  164.         CR0     Control Register 0        DR0    Debug Register 0
  165.         CR2     Control Register 2        DR1    Debug Register 1
  166.         CR3     Control Register 3        DR2    Debug Register 2
  167.                                           DR3    Debug Register 3
  168.         TR4     Test Register 4           DR6    Debug Register 6
  169.         TR5     Test Register 5           DR7    Debug Register 7
  170.         TR6     Test Register 6
  171.         TR7     Test Register 7
  172.         
  173.         Register          Default Segment    Valid Overrides
  174.         BP                      SS              DS, ES, CS
  175.         SI or DI                DS              ES, SS, CS
  176.         DI strings              ES              None
  177.         SI strings              DS              ES, SS, CS
  178.         - see  CPU   DETECTING  Instruction Timing
  179. Instruction Clock Cycle Calculation
  180.         Some instructions require additional clock cycles due to a "Next
  181.         Instruction Component" identified by a "+m" in the instruction
  182.         clock cycle listings.  This is due to the prefetch queue being
  183.         purge on a control transfers.   Below is the general rule for
  184.         calculating "m":
  185.         88/86 not applicable
  186.         286  "m" is the number of bytes in the next instruction
  187.         386  "m" is the number of components in the next instruction
  188.                 (the instruction coding (each byte), plus the data and
  189.                 the displacement are all considered components)
  190. 8088/8086  Effective Address (EA) Calculation
  191.                    Description                            Clock Cycles
  192.         Displacement                                            6
  193.         Base or Index (BX,BP,SI,DI)                             5
  194.         Displacement+(Base or Index)                            9
  195.         Base+Index (BP+DI,BX+SI)                                7
  196.         Base+Index (BP+SI,BX+DI)                                8
  197.         Base+Index+Displacement (BP+DI,BX+SI)                  11
  198.         Base+Index+Displacement (BP+SI+disp,BX+DI+disp)        12
  199.         - add 4 cycles for word operands at odd addresses
  200.         - add 2 cycles for segment override
  201.         - 80188/80186 timings differ from those of the 8088/8086/80286
  202.  
  203. Task State Calculation
  204.         "TS" is defined as switching from VM/486 or 80286 TSS to one of
  205.         the following:
  206.                         ┌───────────────────────────────────────┐
  207.                         │               New Task                │
  208.                         ├───────┬───────┬───────┬───────┬───────┤
  209.         ┌───────────────┤486 TSS│486 TSS│386 TSS│386 TSS│286 TSS│
  210.         │   Old Task    │ (VM=0)│ (VM=1)│ (VM=0)│ (VM=1)│       │
  211.         └───────────────┼───────┼───────┼───────┼───────┼───────┤
  212.         386 TSS (VM=0)  │       │       │  309  │  226  │  282  │
  213.                         ├───────┼───────┼───────┼───────┼───────┤
  214.         386 TSS (VM=1)  │       │       │  314  │  231  │  287  │
  215.                         ├───────┼───────┼───────┼───────┼───────┤
  216.         386 CPU/286 TSS │       │       │  307  │  224  │  280  │
  217.                         ├───────┼───────┼───────┼───────┼───────┤
  218.         486 CPU/286 TSS │  199  │  177  │       │       │  180  │
  219.                         └───────┴───────┴───────┴───────┴───────┘
  220.                              
  221.         Miscellaneous
  222.         - all timings are for best case and do not take into account wait
  223.           states, instruction alignment, the state of the prefetch queue,
  224.           DMA refresh cycles, cache hits/misses or exception processing.
  225.         - to convert clocks to nanoseconds divide one microsecond by the
  226.           processor speed in MegaHertz:
  227.    
  228.           (1000MHz/(n MHz)) = X nanoseconds
  229.         - see   8086 Architecture
  230. FLAGS - Intel 8086 Family Flags Register
  231.       │11│10│F│E│D│C│B│A│9│8│7│6│5│4│3│2│1│0│
  232.         │  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───  CF Carry Flag
  233.         │  │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───  1
  234.         │  │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───  PF Parity Flag
  235.         │  │ │ │ │ │ │ │ │ │ │ │ │ │ └───  0
  236.         │  │ │ │ │ │ │ │ │ │ │ │ │ └───  AF Auxiliary Flag
  237.         │  │ │ │ │ │ │ │ │ │ │ │ └───  0
  238.         │  │ │ │ │ │ │ │ │ │ │ └───  ZF Zero Flag
  239.         │  │ │ │ │ │ │ │ │ │ └───  SF Sign Flag
  240.         │  │ │ │ │ │ │ │ │ └───  TF Trap Flag  (Single Step)
  241.         │  │ │ │ │ │ │ │ └───  IF Interrupt Flag
  242.         │  │ │ │ │ │ │ └───  DF Direction Flag
  243.         │  │ │ │ │ │ └───  OF Overflow flag
  244.         │  │ │ │ └─┴───  IOPL I/O Privilege Level  (286+ only)
  245.         │  │ │ └─────  NT Nested Task Flag  (286+ only)
  246.         │  │ └─────  0
  247.         │  └─────  RF Resume Flag (386+ only)
  248.         └──────  VM  Virtual Mode Flag (386+ only)
  249.         - see   PUSHF  POPF  STI  CLI  STD  CLD
  250.  
  251. MSW - Machine Status Word (286+ only)
  252.       │31│30-5│4│3│2│1│0│  Machine Status Word
  253.         │   │  │ │ │ │ └──── Protection Enable (PE)
  254.         │   │  │ │ │ └───── Math Present (MP)
  255.         │   │  │ │ └────── Emulation (EM)
  256.         │   │  │ └─────── Task Switched (TS)
  257.         │   │  └──────── Extension Type (ET)
  258.         │   └────────── Reserved
  259.         └───────────── Paging (PG)
  260.         Bit 0   PE      Protection Enable, switches processor between
  261.                         protected and real mode
  262.         Bit 1   MP      Math Present, controls function of the WAIT
  263.                         instruction
  264.         Bit 2   EM      Emulation, indicates whether coprocessor functions
  265.                         are to be emulated
  266.         Bit 3   TS      Task Switched, set and interrogated by coprocessor
  267.                         on task switches and when interpretting coprocessor
  268.                         instructions
  269.         Bit 4   ET      Extension Type, indicates type of coprocessor in
  270.                         system
  271.         Bits 5-30       Reserved
  272.         bit 31  PG      Paging, indicates whether the processor uses page
  273.                         tables to translate linear addresses to physical
  274.                         addresses
  275.         - see   SMSW  LMSW
  276.  
  277. 8086/80186/80286/80386/80486 Instruction Set
  278. AAA - Ascii Adjust for Addition
  279.         Usage:  AAA
  280.         Modifies flags: AF CF (OF,PF,SF,ZF undefined)
  281.         Changes contents of AL to valid unpacked decimal.  The high order
  282.         nibble is zeroed.
  283.                                  Clocks                 Size
  284.         Operands         808x  286   386   486          Bytes
  285.         none              8     3     4     3             1
  286. AAD - Ascii Adjust for Division
  287.         Usage:  AAD
  288.         Modifies flags: SF ZF PF (AF,CF,OF undefined)
  289.         Used before dividing unpacked decimal numbers.   Multiplies AH by
  290.         10 and the adds result into AL.  Sets AH to zero.  This instruction
  291.         is also known to have an undocumented behavior.
  292.         AL := 10*AH+AL
  293.         AH := 0
  294.                                  Clocks                 Size
  295.         Operands         808x  286   386   486          Bytes
  296.         none              60    14    19    14            2
  297. AAM - Ascii Adjust for Multiplication
  298.         Usage:  AAM
  299.         Modifies flags: PF SF ZF (AF,CF,OF undefined)
  300.         AH := AL / 10
  301.         AL := AL mod 10
  302.         Used after multiplication of two unpacked decimal numbers, this
  303.         instruction adjusts an unpacked decimal number.  The high order
  304.         nibble of each byte must be zeroed before using this instruction.
  305.         This instruction is also known to have an undocumented behavior.
  306.                                  Clocks                 Size
  307.         Operands         808x  286   386   486          Bytes
  308.         none              83    16    17    15            2
  309. AAS - Ascii Adjust for Subtraction
  310.         Usage:  AAS
  311.         Modifies flags: AF CF (OF,PF,SF,ZF undefined)
  312.         Corrects result of a previous unpacked decimal subtraction in AL.
  313.         High order nibble is zeroed.
  314.                                  Clocks                 Size
  315.         Operands         808x  286   386   486          Bytes
  316.         none              8     3     4     3             1
  317.  
  318. ADC - Add With Carry
  319.         Usage:  ADC     dest,src
  320.         Modifies flags: AF CF OF SF PF ZF
  321.         Sums two binary operands placing the result in the destination.
  322.         If CF is set, a 1 is added to the destination.
  323.                                 Clocks                  Size
  324.         Operands         808x  286   386   486          Bytes
  325.         reg,reg           3     2     2     1             2
  326.         mem,reg         16+EA   7     7     3            2-4  (W88=24+EA)
  327.         reg,mem          9+EA   7     6     2            2-4  (W88=13+EA)
  328.         reg,immed         4     3     2     1            3-4
  329.         mem,immed       17+EA   7     7     3            3-6  (W88=23+EA)
  330.         accum,immed       4     3     2     1            2-3
  331. ADD - Arithmetic Addition
  332.         Usage:  ADD     dest,src
  333.         Modifies flags: AF CF OF PF SF ZF
  334.         Adds "src" to "dest" and replacing the original contents of "dest".
  335.         Both operands are binary.
  336.                                  Clocks                 Size
  337.         Operands         808x  286   386   486          Bytes
  338.         reg,reg           3     2     2     1             2
  339.         mem,reg         16+EA   7     7     3            2-4  (W88=24+EA)
  340.         reg,mem          9+EA   7     6     2            2-4  (W88=13+EA)
  341.         reg,immed         4     3     2     1            3-4
  342.         mem,immed       17+EA   7     7     3            3-6  (W88=23+EA)
  343.         accum,immed       4     3     2     1            2-3
  344. AND - Logical And
  345.         Usage:  AND     dest,src
  346.         Modifies flags: CF OF PF SF ZF (AF undefined)
  347.         Performs a logical AND of the two operands replacing the destination
  348.         with the result.
  349.                                 Clocks                  Size
  350.         Operands         808x  286   386   486          Bytes
  351.         reg,reg           3     2     2     1             2
  352.         mem,reg         16+EA   7     7     3            2-4  (W88=24+EA)
  353.         reg,mem          9+EA   7     6     1            2-4  (W88=13+EA)
  354.         reg,immed         4     3     2     1            3-4
  355.         mem,immed       17+EA   7     7     3            3-6  (W88=23+EA)
  356.         accum,immed       4     3     2     1            2-3
  357. ARPL - Adjusted Requested Privilege Level of Selector (286+ PM)
  358.         Usage:  ARPL    dest,src
  359.         (286+ protected mode)
  360.         Modifies flags: ZF
  361.         Compares the RPL bits of "dest" against "src".  If the RPL bits
  362.         of "dest" are less than "src", the destination RPL bits are set
  363.         equal to the source RPL bits and the Zero Flag is set.  Otherwise
  364.         the Zero Flag is cleared.
  365.                                 Clocks                  Size
  366.         Operands         808x  286   386   486          Bytes
  367.         reg,reg           -     10    20    9             2
  368.         mem,reg           -     11    21    9             4
  369.  
  370. BOUND - Array Index Bound Check (80188+)
  371.         Usage:  BOUND   src,limit
  372.         Modifies flags: None
  373.         Array index in source register is checked against upper and lower
  374.         bounds in memory source.  The first word located at "limit" is
  375.         the lower boundary and the word at "limit+2" is the upper array bound.
  376.         Interrupt 5 occurs if the source value is less than or higher than
  377.         the source.
  378.                                  Clocks                 Size
  379.         Operands         808x  286   386   486          Bytes
  380.         reg16,mem32       -   nj=13 nj=10   7             2
  381.         reg32,mem64       -   nj=13 nj=10   7             2
  382.         - nj = no jump taken
  383. BSF - Bit Scan Forward (386+)
  384.         Usage:  BSF     dest,src
  385.         Modifies flags: ZF
  386.         Scans source operand for first bit set.  Sets ZF if a bit is found
  387.         set and loads the destination with an index to first set bit.  Clears
  388.         ZF is no bits are found set.  BSF scans forward across bit pattern
  389.         (0-n) while BSR scans in reverse (n-0).
  390.                                  Clocks                 Size
  391.         Operands         808x  286   386   486          Bytes
  392.         reg,reg           -     -   10+3n  6-42           3
  393.         reg,mem           -     -   10+3n  7-43          3-7
  394.         reg32,reg32       -     -   10+3n  6-42          3-7
  395.         reg32,mem32       -     -   10+3n  7-43          3-7
  396. BSR - Bit Scan Reverse  (386+)
  397.         Usage:  BSR     dest,src
  398.         Modifies flags: ZF
  399.         Scans source operand for first bit set.  Sets ZF if a bit is found
  400.         set and loads the destination with an index to first set bit.  Clears
  401.         ZF is no bits are found set.  BSF scans forward across bit pattern
  402.         (0-n) while BSR scans in reverse (n-0).
  403.                                  Clocks                 Size
  404.         Operands         808x  286   386   486          Bytes
  405.         reg,reg           -     -   10+3n  6-103          3
  406.         reg,mem           -     -   10+3n  7-104         3-7
  407.         reg32,reg32       -     -   10+3n  6-103         3-7
  408.         reg32,mem32       -     -   10+3n  7-104         3-7
  409. BSWAP - Byte Swap       (486+)
  410.         Usage:  BSWAP   reg32
  411.         Modifies flags: none
  412.         Changes the byte order of a 32 bit register from big endian to
  413.         little endian or vice versa.   Result left in destination register
  414.         is undefined if the operand is a 16 bit register.
  415.                                  Clocks                 Size
  416.         Operands         808x  286   386   486          Bytes
  417.         reg32             -     -     -     1             2
  418.  
  419. BT - Bit Test           (386+)
  420.         Usage:  BT      dest,src
  421.         Modifies flags: CF
  422.         The destination bit indexed by the source value is copied into the
  423.         Carry Flag.
  424.                                  Clocks                 Size
  425.         Operands         808x  286   386   486          Bytes
  426.         reg16,immed8      -     -     3     3            4-8
  427.         mem16,immed8      -     -     6     6            4-8
  428.         reg16,reg16       -     -     3     3            3-7
  429.         mem16,reg16       -     -     12    12           3-7
  430. BTC - Bit Test with Compliment (386+)
  431.         Usage:  BTC     dest,src
  432.         Modifies flags: CF
  433.         The destination bit indexed by the source value is copied into the
  434.         Carry Flag after being complimented (inverted).
  435.                                  Clocks                 Size
  436.         Operands         808x  286   386   486          Bytes
  437.         reg16,immed8      -     -     6     6            4-8
  438.         mem16,immed8      -     -     8     8            4-8
  439.         reg16,reg16       -     -     6     6            3-7
  440.         mem16,reg16       -     -     13    13           3-7
  441. BTR - Bit Test with Reset (386+)
  442.         Usage:  BTR     dest,src
  443.         Modifies flags: CF
  444.         The destination bit indexed by the source value is copied into the
  445.         Carry Flag and then cleared in the destination.
  446.                                  Clocks                 Size
  447.         Operands         808x  286   386   486          Bytes
  448.         reg16,immed8      -     -     6     6            4-8
  449.         mem16,immed8      -     -     8     8            4-8
  450.         reg16,reg16       -     -     6     6            3-7
  451.         mem16,reg16       -     -     13    13           3-7
  452. BTS - Bit Test and Set  (386+)
  453.         Usage:  BTS     dest,src
  454.         Modifies flags: CF
  455.         The destination bit indexed by the source value is copied into the
  456.         Carry Flag and then set in the destination.
  457.                                  Clocks                 Size
  458.         Operands         808x  286   386   486          Bytes
  459.         reg16,immed8      -     -     6     6            4-8
  460.         mem16,immed8      -     -     8     8            4-8
  461.         reg16,reg16       -     -     6     6            3-7
  462.         mem16,reg16       -     -     13    13           3-7
  463.  
  464. CALL - Procedure Call
  465.         Usage:  CALL    destination
  466.         Modifies flags: None
  467.         Pushes Instruction Pointer (and Code Segment for far calls) onto
  468.         stack and loads Instruction Pointer with the address of proc-name.
  469.         Code continues with execution at CS:IP.
  470.                                                          Clocks
  471.                    Operands                     808x   286     386     486
  472.         rel16 (near, IP relative)                19     7      7+m      3
  473.         rel32 (near, IP relative)                -      -      7+m      3
  474.         reg16 (near, register indirect)          16     7      7+m      5
  475.         reg32 (near, register indirect)          -      -      7+m      5
  476.         mem16 (near, memory indirect)            -     21+EA    11    10+m      5
  477.         mem32 (near, memory indirect)            -      -     10+m      5
  478.         ptr16:16 (far, full ptr supplied)        28     13    17+m      18
  479.         ptr16:32 (far, full ptr supplied)        -      -     17+m      18
  480.         ptr16:16 (far, ptr supplied, prot. mode) -      26    34+m      20
  481.         ptr16:32 (far, ptr supplied, prot. mode) -      -     34+m      20
  482.         m16:16 (far, indirect)                 37+EA    16    22+m      17
  483.         m16:32 (far, indirect)                   -      -     22+m      17
  484.         m16:16 (far, indirect, prot. mode)       -      29    38+m      20
  485.         m16:32 (far, indirect, prot. mode)       -      -     38+m      20
  486.         ptr16:16 (task, via TSS or task gate)    -     177     TS     37+TS
  487.         m16:16 (task, via TSS or task gate)      -   180/185  5+TS    37+TS
  488.         m16:32 (task)                            -      -      TS     37+TS
  489.         m16:32 (task)                            -      -     5+TS    37+TS
  490.         ptr16:16 (gate, same privilege)          -      41    52+m      35
  491.         ptr16:32 (gate, same privilege)          -      -     52+m      35
  492.         m16:16 (gate, same privilege)            -      44    56+m      35
  493.         m16:32 (gate, same privilege)            -      -     56+m      35
  494.         ptr16:16 (gate, more priv, no parm)      -      82    86+m      69
  495.         ptr16:32 (gate, more priv, no parm)      -      -     86+m      69
  496.         m16:16 (gate, more priv, no parm)        -      83    90+m      69
  497.         m16:32 (gate, more priv, no parm)        -      -     90+m      69
  498.         ptr16:16 (gate, more priv, x parms)      -    86+4x  94+4x+m  77+4x
  499.         ptr16:32 (gate, more priv, x parms)      -      -    94+4x+m  77+4x
  500.         m16:16 (gate, more priv, x parms)        -    90+4x  98+4x+m  77+4x
  501.         m16:32 (gate, more priv, x parms)        -      -    98+4x+m  77+4x
  502. CBW - Convert Byte to Word
  503.         Usage:  CBW
  504.         Modifies flags: None
  505.         Converts byte in AL to word Value in AX by extending sign of AL
  506.         throughout register AH.
  507.                                  Clocks                 Size
  508.         Operands         808x  286   386   486          Bytes
  509.         none              2     2     3     3             1
  510. CDQ - Convert Double to Quad (386+)
  511.         Usage:  CDQ
  512.         Modifies flags: None
  513.         Converts signed DWORD in EAX to a signed quad word in EDX:EAX by
  514.         extending the high order bit of EAX throughout EDX
  515.                                  Clocks                 Size
  516.         Operands         808x  286   386   486          Bytes
  517.         none              -     -     2     3             1
  518.  
  519. CLC - Clear Carry
  520.         Usage:  CLC
  521.         Modifies flags: CF
  522.         Clears the Carry Flag.
  523.                                  Clocks                 Size
  524.         Operands         808x  286   386   486          Bytes
  525.         none              2     2     2     2             1
  526. CLD - Clear Direction Flag
  527.         Usage:  CLD
  528.         Modifies flags: DF
  529.         Clears the Direction Flag causing string instructions to increment
  530.         the SI and DI index registers.
  531.                                  Clocks                 Size
  532.         Operands         808x  286   386   486          Bytes
  533.         none              2     2     2     2             1
  534. CLI - Clear Interrupt Flag (disable)
  535.         Usage:  CLI
  536.         Modifies flags: IF
  537.         Disables the maskable hardware interrupts by clearing the Interrupt
  538.         flag.  NMI's and software interrupts are not inhibited.
  539.                                  Clocks                 Size
  540.         Operands         808x  286   386   486          Bytes
  541.         none              2     2     3     5             1
  542. CLTS - Clear Task Switched Flag (286+ privileged)
  543.         Usage:  CLTS
  544.         Modifies flags: None
  545.         Clears the Task Switched Flag in the Machine Status Register.  This
  546.         is a privileged operation and is generally used only by operating
  547.         system code.
  548.                                  Clocks                 Size
  549.         Operands         808x  286   386   486          Bytes
  550.         none              -     2     5     7             2
  551. CMC - Complement Carry Flag
  552.         Usage:  CMC
  553.         Modifies flags: CF
  554.         Toggles (inverts) the Carry Flag
  555.                                  Clocks                 Size
  556.         Operands         808x  286   386   486          Bytes
  557.         none              2     2     2     2             1
  558.  
  559. CMP - Compare
  560.         Usage:  CMP     dest,src
  561.         Modifies flags: AF CF OF PF SF ZF
  562.         Subtracts source from destination and updates the flags but does
  563.         not save result.  Flags can subsequently be checked for conditions.
  564.                                  Clocks                 Size
  565.         Operands         808x  286   386   486          Bytes
  566.         reg,reg           3     2     2     1             2
  567.         mem,reg          9+EA   7     5     2            2-4  (W88=13+EA)
  568.         reg,mem          9+EA   6     6     2            2-4  (W88=13+EA)
  569.         reg,immed         4     3     2     1            3-4
  570.         mem,immed       10+EA   6     5     2            3-6  (W88=14+EA)
  571.         accum,immed       4     3     2     1            2-3
  572. CMPS - Compare String (Byte, Word or Doubleword)
  573.         Usage:  CMPS    dest,src
  574.                 CMPSB
  575.                 CMPSW
  576.                 CMPSD   (386+)
  577.         Modifies flags: AF CF OF PF SF ZF
  578.         Subtracts destination value from source without saving results.
  579.         Updates flags based on the subtraction and  the index registers
  580.         (E)SI and (E)DI are incremented or decremented depending on the
  581.         state of the Direction Flag.  CMPSB inc/decrements the index
  582.         registers by 1, CMPSW inc/decrements by 2, while CMPSD increments
  583.         or decrements by 4.  The REP prefixes can be used to process
  584.         entire data items.
  585.                                  Clocks                 Size
  586.         Operands         808x  286   386   486          Bytes
  587.         dest,src          22    8     10    8             1  (W88=30)
  588. CMPXCHG - Compare and Exchange
  589.         Usage:  CMPXCHG dest,src  (486+)
  590.         Modifies flags: AF CF OF PF SF ZF
  591.         Compares the accumulator (8-32 bits) with "dest".  If equal the
  592.         "dest" is loaded with "src", otherwise the accumulator is loaded
  593.         with "dest".
  594.                                  Clocks                 Size
  595.         Operands         808x  286   386   486          Bytes
  596.         reg,reg           -     -     -     6             2
  597.         mem,reg           -     -     -     7             2
  598.         - add 3 clocks if the "mem,reg" comparison fails
  599. CWD - Convert Word to Doubleword
  600.         Usage:  CWD
  601.         Modifies flags: None
  602.         Extends sign of word in register AX throughout register DX forming
  603.         a doubleword quantity in DX:AX.
  604.                                  Clocks                 Size
  605.         Operands         808x  286   386   486          Bytes
  606.         none              5     2     2     3             1
  607.  
  608. CWDE - Convert Word to Extended Doubleword (386+)
  609.         Usage:  CWDE
  610.         Modifies flags: None
  611.         Converts a signed word in AX to a signed doubleword in EAX by
  612.         extending the sign bit of AX throughout EAX.
  613.                                  Clocks                 Size
  614.         Operands         808x  286   386   486          Bytes
  615.         none              -     -     3     3             1
  616. DAA - Decimal Adjust for Addition
  617.         Usage:  DAA
  618.         Modifies flags: AF CF PF SF ZF (OF undefined)
  619.         Corrects result (in AL) of a previous BCD addition operation.
  620.         Contents of AL are changed to a pair of packed decimal digits.
  621.                                  Clocks                 Size
  622.         Operands         808x  286   386   486          Bytes
  623.         none              4     3     4     2             1
  624. DAS - Decimal Adjust for Subtraction
  625.         Usage:  DAS
  626.         Modifies flags: AF CF PF SF ZF (OF undefined)
  627.         Corrects result (in AL) of a previous BCD subtraction operation.
  628.         Contents of AL are changed to a pair of packed decimal digits.
  629.                                  Clocks                 Size
  630.         Operands         808x  286   386   486          Bytes
  631.         none              4     3     4     2             1
  632. DEC - Decrement
  633.         Usage:  DEC     dest
  634.         Modifies flags: AF OF PF SF ZF
  635.         Unsigned binary subtraction of one from the destination.
  636.                                  Clocks                 Size
  637.         Operands         808x  286   386   486          Bytes
  638.         reg8              3     2     2     1             2
  639.         mem             15+EA   7     6     3            2-4
  640.         reg16/32          3     2     2     1             1
  641. DIV - Divide
  642.         Usage:  DIV     src
  643.         Modifies flags: (AF,CF,OF,PF,SF,ZF undefined)
  644.         Unsigned binary division of accumulator by source.  If the source
  645.         divisor is a byte value then AX is divided by "src" and the quotient
  646.         is placed in AL and the remainder in AH.  If source operand is a word
  647.         value, then DX:AX is divided by "src" and the quotient is stored in AX
  648.         and the remainder in DX.
  649.                                  Clocks                 Size
  650.         Operands         808x  286   386   486          Bytes
  651.         reg8             80-90  14    14    16            2
  652.         reg16           144-162 22    22    24            2
  653.         reg32              -    -     38    40            2
  654.         mem8        (86-96)+EA  17    17    16           2-4
  655.         mem16     (150-168)+EA  25    25    24           2-4  (W88=158-176+EA)
  656.         mem32              -    -     41    40           2-4
  657.  
  658. ENTER - Make Stack Frame  (80188+)
  659.         Usage:  ENTER   locals,level
  660.         Modifies flags: None
  661.         Modifies stack for entry to procedure for high level language.
  662.         Operand "locals" specifies the amount of storage to be allocated
  663.         on the stack.   "Level" specifies the nesting level of the routine.
  664.         Paired with the LEAVE instruction, this is an efficient method of
  665.         entry and exit to procedures.
  666.                                      Clocks                     Size
  667.         Operands         808x    286       386       486        Bytes
  668.         immed16,0         -       11       10         14          4
  669.         immed16,1         -       15       12         17          4
  670.         immed16,immed8    -   12+4(n-1) 15+4(n-1)    17+3n        4
  671. ESC - Escape
  672.         Usage:  ESC     immed,src
  673.         Modifies flags: None
  674.         Provides access to the data bus for other resident processors.
  675.         The CPU treats it as a NOP but places memory operand on bus.
  676.                                  Clocks                 Size
  677.         Operands         808x  286   386   486          Bytes
  678.         immed,reg         2   9-20    ?                   2
  679.         immed,mem         2   9-20    ?                  2-4
  680. HLT - Halt CPU
  681.         Usage:   HLT
  682.         Modifies flags: None
  683.         Halts CPU until RESET line is activated, NMI or maskable interrupt
  684.         received.  The CPU becomes dormant but retains the current CS:IP
  685.         for later restart.
  686.                                  Clocks                 Size
  687.         Operands         808x  286   386   486          Bytes
  688.         none              2     2     5     4             1
  689. IDIV - Signed Integer Division
  690.         Usage:   IDIV   src
  691.         Modifies flags: (AF,CF,OF,PF,SF,ZF undefined)
  692.         Signed binary division of accumulator by source.  If source is a
  693.         byte value, AX is divided by "src" and the quotient is stored in
  694.         AL and the remainder in AH.  If source is a word value, DX:AX is
  695.         divided by "src", and the quotient is stored in AL and the
  696.         remainder in DX.
  697.                                  Clocks                 Size
  698.         Operands         808x  286   386   486          Bytes
  699.         reg8          101-112   17    19    19            2
  700.         reg16         165-184   25    27    27            2
  701.         reg32            -      -     43    43            2
  702.         mem8     (107-118)+EA   20    22    20           2-4
  703.         mem16    (171-190)+EA   38    30    28           2-4  (W88=175-194)
  704.         mem32            -      -     46    44           2-4
  705.  
  706. IMUL - Signed Multiply
  707.         Usage:  IMUL    src
  708.                 IMUL    src,immed        (286+)
  709.                 IMUL    dest,src,immed8  (286+)
  710.                 IMUL    dest,src         (386+)
  711.         Modifies flags: CF OF (AF,PF,SF,ZF undefined)
  712.         Signed multiplication of accumulator by "src" with result placed
  713.         in the accumulator.  If the source operand is a byte value, it
  714.         is multiplied by AL and the result stored in AX.  If the source
  715.         operand is a word value it is multiplied by AX and the result is
  716.         stored in DX:AX.  Other variations of this instruction allow
  717.         specification of source and destination registers as well as a
  718.         third immediate factor.
  719.                                   Clocks                Size
  720.         Operands         808x   286   386   486         Bytes
  721.         reg8             80-98   13   9-14  13-18         2
  722.         reg16           128-154  21   9-22  13-26         2
  723.         reg32              -     -    9-38  12-42         2
  724.         mem8             86-104  16  12-17  13-18        2-4
  725.         mem16           134-160  24  12-25  13-26        2-4
  726.         mem32              -     -   12-41  13-42        2-4
  727.         reg16,reg16        -     -    9-22  13-26        3-5
  728.         reg32,reg32        -     -    9-38  13-42        3-5
  729.         reg16,mem16        -     -   12-25  13-26        3-5
  730.         reg32,mem32        -     -   12-41  13-42        3-5
  731.         reg16,immed        -     21   9-22  13-26         3
  732.         reg32,immed        -     21   9-38  13-42        3-6
  733.         reg16,reg16,immed  -     2    9-22  13-26        3-6
  734.         reg32,reg32,immed  -     21   9-38  13-42        3-6
  735.         reg16,mem16,immed  -     24  12-25  13-26        3-6
  736.         reg32,mem32,immed  -     24  12-41  13-42        3-6
  737. IN - Input Byte or Word From Port
  738.         Usage:  IN      accum,port
  739.         Modifies flags: None
  740.         A byte, word or dword is read from "port" and placed in AL, AX or
  741.         EAX respectively.  If the port number is in the range of 0-255
  742.         it can be specified as an immediate, otherwise the port number
  743.         must be specified in DX.  Valid port ranges on the PC are 0-1024,
  744.         though values through 65535 may be specified and recognized by
  745.         third party vendors and PS/2's.
  746.                                  Clocks                 Size
  747.         Operands         808x  286   386    486         Bytes
  748.         accum,immed8    10/14   5     12     14           2
  749.         accum,immed8 (PM)            6/26  8/28/27        2
  750.         accum,DX         8/12   5     13     14           1
  751.         accum,DX (PM)                7/27  8/28/27        1
  752.         - 386+ protected mode timings depend on privilege levels.
  753.           first number is the timing if:    CPL ≤ IOPL
  754.           second number is the timing if:   CPL > IOPL or in VM 86 mode (386)
  755.                                             CPL ≥ IOPL  (486)
  756.           third number is the timing when:    virtual mode on 486 processor
  757.         - 486 virtual mode always requires 27 cycles
  758.  
  759. INC - Increment
  760.         Usage:  INC     dest
  761.         Modifies flags: AF OF PF SF ZF
  762.         Adds one to destination unsigned binary operand.
  763.                                  Clocks                 Size
  764.         Operands         808x  286   386   486          Bytes
  765.         reg8              3     2     2     1             2
  766.         reg16             3     2     2     1             1
  767.         reg32             3     2     2     1             1
  768.         mem             15+EA   7     6     3            2-4  (W88=23+EA)
  769. INS - Input String from Port  (80188+)
  770.         Usage:  INS     dest,port
  771.                 INSB
  772.                 INSW
  773.                 INSD    (386+)
  774.         Modifies flags: None
  775.         Loads data from port to the destination ES:(E)DI  (even if a
  776.         destination operand is supplied).  (E)DI is adjusted by the size
  777.         of the operand and increased if the Direction Flag is cleared and
  778.         decreased if the Direction Flag is set.  For INSB, INSW, INSD no
  779.         operands are allowed and the size is determined by the mnemonic.
  780.                                  Clocks                 Size
  781.         Operands         808x  286   386    486         Bytes
  782.         dest,port         -     5     15     17           1
  783.         dest,port (PM)    -     5    9/29 10/32/30        1
  784.         none              -     5     15     17           1
  785.         none (PM)         -     5    9/29 10/32/30        1
  786.         - 386+ protected mode timings depend on privilege levels.
  787.           first number is the timing if:    CPL ≤ IOPL
  788.           second number is the timing if:   CPL > IOPL
  789.           third number is the timing if:    virtual mode on 486 processor
  790. INT - Interrupt
  791.         Usage:  INT     num
  792.         Modifies flags: TF IF
  793.         Initiates a software interrupt by pushing the flags, clearing the
  794.         Trap and Interrupt Flags, pushing CS followed by IP and loading
  795.         CS:IP with the value found in the interrupt vector table.  Execution
  796.         then begins at the location addressed by the new CS:IP
  797.                                                Clocks           Size
  798.             Operands                    808x  286   386   486   Bytes
  799.  3 (constant)                          52/72  23+m   33    26     2
  800.  3 (prot. mode, same priv.)              -    40+m   59    44     2       
  801.  3 (prot. mode, more priv.)              -    78+m   99    71     2
  802.  3 (from VM86 to PL 0)                   -     -    119    82     2
  803.  3 (prot. mode via task gate)            -   167+m   TS  37+TS    2
  804.  immed8                                51/71  23+m   37    30     1
  805.  immed8 (prot. mode, same priv.)         -    40+m   59    44     1
  806.  immed8 (prot. mode, more priv.)         -    78+m   99    71     1
  807.  immed8 (from VM86 to PL 0)              -     -    119    86     1
  808.  immed8 (prot. mode, via task gate)      -   167+m   TS  37+TS    1
  809.  
  810. INTO - Interrupt on Overflow
  811.         Usage:  INTO
  812.         Modifies flags: IF TF
  813.         If the Overflow Flag is set this instruction generates an INT 4
  814.         which causes the code addressed by 0000:0010 to be executed.
  815.                                           Clocks           Size
  816.         Operands                808x    286   386   486    Bytes
  817.         none: jump             53/73   24+m    35    28      1
  818.               no jump            4       3     3     3
  819.         (prot. mode, same priv.) -       -     59    46      1
  820.         (prot. mode, more priv.) -       -     99    73      1
  821.         (from VM86 to PL 0)      -       -    119    84      1
  822.         (prot. mode, via task gate)      -     TS  39+TS     1
  823. INVD - Invalidate Cache  (486+)
  824.         Usage:  INVD
  825.         Modifies flags: none
  826.         Flushes CPU internal cache.  Issues special function bus cycle
  827.         which indicates to flush external caches.   Data in write-back
  828.         external caches is lost.
  829.         
  830.                                   Clocks                Size
  831.         Operands         808x   286   386   486         Bytes
  832.         none              -      -     -     4            2
  833. INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+)
  834.         Usage:  INVLPG
  835.         Modifies flags: none
  836.         Invalidates a single page table entry in the Translation
  837.         Look-Aside Buffer.  Intel warns that this instruction may be
  838.         implemented differently on future processors.
  839.         
  840.                                   Clocks                Size
  841.         Operands         808x   286   386   486         Bytes
  842.         none              -      -     -     12           2
  843.         - timing is for TLB entry hit only.
  844. IRET/IRETD - Interrupt Return
  845.         Usage:  IRET
  846.                 IRETD  (386+)
  847.         Modifies flags: AF CF DF IF PF SF TF ZF
  848.         Returns control to point of interruption by popping IP, CS
  849.         and then the Flags from the stack and continues execution at
  850.         this location.  CPU exception interrupts will return to the
  851.         instruction that cause the exception because the CS:IP placed
  852.         on the stack during the interrupt is the address of the offending
  853.         instruction.
  854.                                          Clocks                 Size
  855.             Operands            808x   286   386   486          Bytes
  856.     iret                       32/44  17+m    22    15            1
  857.     iret  (prot. mode)           -    31+m    38    15            1
  858.     iret  (to less privilege)    -    55+m    82    36            1
  859.     iret  (different task, NT=1) -   169+m    TS  TS+32           1
  860.     iretd                        -      -   22/38   15            1
  861.     iretd (to less privilege)    -      -     82    36            1
  862.     iretd (to VM86 mode)         -      -     60    15            1
  863.     iretd (different task, NT=1) -      -     TS  TS+32           1
  864.     - 386 timings are listed as real-mode/protected-mode
  865.  
  866. Jxx - Jump Instructions Table
  867.         Mnemonic              Meaning                    Jump Condition
  868.           JA     Jump if Above                         CF=0 and ZF=0
  869.           JAE    Jump if Above or Equal                CF=0
  870.           JB     Jump if Below                         CF=1
  871.           JBE    Jump if Below or Equal                CF=1 or ZF=1
  872.           JC     Jump if Carry                         CF=1
  873.           JCXZ   Jump if CX Zero                       CX=0
  874.           JE     Jump if Equal                         ZF=1
  875.           JG     Jump if Greater (signed)              ZF=0 and SF=OF
  876.           JGE    Jump if Greater or Equal (signed)     SF=OF
  877.           JL     Jump if Less (signed)                 SF != OF
  878.           JLE    Jump if Less or Equal (signed)        ZF=1 or SF != OF
  879.           JMP    Unconditional Jump                    unconditional
  880.           JNA    Jump if Not Above                     CF=1 or ZF=1
  881.           JNAE   Jump if Not Above or Equal            CF=1
  882.           JNB    Jump if Not Below                     CF=0
  883.           JNBE   Jump if Not Below or Equal            CF=0 and ZF=0
  884.           JNC    Jump if Not Carry                     CF=0
  885.           JNE    Jump if Not Equal                     ZF=0
  886.           JNG    Jump if Not Greater (signed)          ZF=1 or SF != OF
  887.           JNGE   Jump if Not Greater or Equal (signed) SF != OF
  888.           JNL    Jump if Not Less (signed)             SF=OF
  889.           JNLE   Jump if Not Less or Equal (signed)    ZF=0 and SF=OF
  890.           JNO    Jump if Not Overflow (signed)         OF=0
  891.           JNP    Jump if No Parity                     PF=0
  892.           JNS    Jump if Not Signed (signed)           SF=0
  893.           JNZ    Jump if Not Zero                      ZF=0
  894.           JO     Jump if Overflow (signed)             OF=1
  895.           JP     Jump if Parity                        PF=1
  896.           JPE    Jump if Parity Even                   PF=1
  897.           JPO    Jump if Parity Odd                    PF=0
  898.           JS     Jump if Signed (signed)               SF=1
  899.           JZ     Jump if Zero                          ZF=1
  900.                                  Clocks                 Size
  901.         Operands         808x  286   386   486          Bytes
  902.         Jx: jump          16   7+m   7+m    3             2
  903.             no jump        4    3     3     1
  904.         Jx  near-label     -    -    7+m    3             4
  905.             no jump        -    -     3     1
  906.         - It's a good programming practice to organize code so the
  907.           expected case is executed without a jump since the actual
  908.           jump takes longer to execute than falling through the test.
  909.         - see   JCXZ  and  JMP  for their respective timings
  910. JCXZ/JECXZ - Jump if Register (E)CX is Zero
  911.         Usage:  JCXZ    label
  912.                 JECXZ   label  (386+)
  913.         Modifies flags: None
  914.         Causes execution to branch to "label" if register CX is zero.  Uses
  915.         unsigned comparision.
  916.                                  Clocks                 Size
  917.         Operands         808x  286   386   486          Bytes
  918.         label:  jump      18   8+m   9+m    8             2
  919.                 no jump    6    4     5     5
  920.  
  921. JMP - Unconditional Jump
  922.         Usage:  JMP     target
  923.         Modifies flags: None
  924.         Unconditionally transfers control to "label".  Jumps by default
  925.         are within -32768 to 32767 bytes from the instruction following
  926.         the jump.  NEAR and SHORT jumps cause the IP to be updated while FAR
  927.         jumps cause CS and IP to be updated.
  928.                                                         Clocks
  929.                    Operands                     808x  286    386   486
  930.         rel8  (relative)                        15    7+m    7+m    3
  931.         rel16 (relative)                        15    7+m    7+m    3
  932.         rel32 (relative)                         -     -     7+m    3
  933.         reg16 (near, register indirect)         11    7+m    7+m    5
  934.         reg32 (near, register indirect)          -     -     7+m    5
  935.         mem16 (near, mem indirect)             18+EA  11+m  10+m    5
  936.         mem32 (near, mem indirect)             24+EA  15+m  10+m    5
  937.         ptr16:16 (far, dword immed)              -     -    12+m    17
  938.         ptr16:16 (far, PM dword immed)           -     -    27+m    19
  939.         ptr16:16 (call gate, same priv.)         -    38+m  45+m    32
  940.         ptr16:16 (via TSS)                       -   175+m   TS   42+TS
  941.         ptr16:16 (via task gate)                 -   180+m   TS   43+TS
  942.         mem16:16 (far, indirect)                 -     -    43+m    13
  943.         mem16:16 (far, PM indirect)              -     -    31+m    18
  944.         mem16:16 (call gate, same priv.)         -    41+m  49+m    31
  945.         mem16:16 (via TSS)                       -   178+m  5+TS  41+TS
  946.         mem16:16 (via task gate)                 -   183+m  5+TS  42+TS
  947.         ptr16:32 (far, 6 byte immed)             -     -    12+m    13
  948.         ptr16:32 (far, PM 6 byte immed)          -     -    27+m    18
  949.         ptr16:32 (call gate, same priv.)         -     -    45+m    31
  950.         ptr16:32 (via TSS)                       -     -     TS   42+TS
  951.         ptr16:32 (via task state)                -     -     TS   43+TS
  952.         m16:32 (far, address at dword)           -     -    43+m    13
  953.         m16:32 (far, address at dword)           -     -    31+m    18
  954.         m16:32 (call gate, same priv.)           -     -    49+m    31
  955.         m16:32 (via TSS)                         -     -    5+TS  41+TS
  956.         m16:32 (via task state)                  -     -    5+TS  42+TS
  957. LAHF - Load Register AH From Flags
  958.         Usage:  LAHF
  959.         Modifies flags: None
  960.         Copies bits 0-7 of the flags register into AH.  This includes flags
  961.         AF, CF, PF, SF and ZF other bits are undefined.
  962.         AH := SF ZF xx AF xx PF xx CF
  963.                                  Clocks                 Size
  964.         Operands         808x  286   386   486          Bytes
  965.         none              4     2     2     3             1
  966. LAR - Load Access Rights (286+ protected)
  967.         Usage:  LAR     dest,src
  968.         Modifies flags: ZF
  969.         The high byte of the of the destination register is overwritten by
  970.         the value of the access rights byte and the low order byte is zeroed
  971.         depending on the selection in the source operand.  The Zero Flag is
  972.         set if the load operation is successful.
  973.                                  Clocks                 Size
  974.         Operands         808x  286   386   486          Bytes
  975.         reg16,reg16       -     14    15    11            3
  976.         reg32,reg32       -     -     15    11            3
  977.         reg16,mem16       -     16    16    11           3-7
  978.         reg32,mem32       -     -     16    11           3-7
  979.  
  980. LDS - Load Pointer Using DS
  981.         Usage:  LDS     dest,src
  982.         Modifies flags: None
  983.         Loads 32-bit pointer from memory source to destination register
  984.         and DS.  The offset is placed in the destination register and the
  985.         segment is placed in DS.  To use this instruction the word at the
  986.         lower memory address must contain the offset and the word at the
  987.         higher address must contain the segment.  This simplifies the loading
  988.         of far pointers from the stack and the interrupt vector table.
  989.                                  Clocks                 Size
  990.         Operands         808x  286   386   486          Bytes
  991.         reg16,mem32     16+EA   7     7     6            2-4
  992.         reg,mem (PM)      -     -     22    12           5-7
  993. LEA - Load Effective Address
  994.         Usage:  LEA     dest,src
  995.         Modifies flags: None
  996.         Transfers offset address of "src" to the destination register.
  997.                                  Clocks                 Size
  998.         Operands         808x  286   386   486          Bytes
  999.         reg,mem          2+EA   3     2     1            2-4
  1000.         - the MOV instruction can often save clock cycles when used in
  1001.           place of LEA on 8088 processors
  1002. LEAVE - Restore Stack for Procedure Exit (80188+)
  1003.         Usage:  LEAVE
  1004.         Modifies flags: None
  1005.         Releases the local variables created by the previous ENTER
  1006.         instruction by restoring SP and BP to their condition before
  1007.         the procedure stack frame was initialized.
  1008.                                  Clocks                 Size
  1009.         Operands         808x  286   386   486          Bytes
  1010.         none              -     5     4     5             1
  1011. LES - Load Pointer Using ES
  1012.         Usage:  LES     dest,src
  1013.         Modifies flags: None
  1014.         Loads 32-bit pointer from memory source to destination register
  1015.         and ES.  The offset is placed in the destination register and the
  1016.         segment is placed in ES.  To use this instruction the word at the
  1017.         lower memory address must contain the offset and the word at the
  1018.         higher address must contain the segment.  This simplifies the loading
  1019.         of far pointers from the stack and the interrupt vector table.
  1020.                                  Clocks                 Size
  1021.         Operands         808x  286   386   486          Bytes
  1022.         reg,mem         16+EA   7     7     6            2-4  (W88=24+EA)
  1023.         reg,mem (PM)      -     -     22    12           5-7
  1024.  
  1025. LFS - Load Pointer Using FS (386+)
  1026.         Usage:  LFS     dest,src
  1027.         Modifies flags: None
  1028.         Loads 32-bit pointer from memory source to destination register
  1029.         and FS.  The offset is placed in the destination register and the
  1030.         segment is placed in FS.  To use this instruction the word at the
  1031.         lower memory address must contain the offset and the word at the
  1032.         higher address must contain the segment.  This simplifies the loading
  1033.         of far pointers from the stack and the interrupt vector table.
  1034.                                  Clocks                 Size
  1035.         Operands         808x  286   386   486          Bytes
  1036.         reg,mem           -     -     7     6            5-7
  1037.         reg,mem (PM)      -     -     22    12           5-7
  1038. LGDT - Load Global Descriptor Table (286+ privileged)
  1039.         Usage:  LGDT    src
  1040.         Modifies flags: None
  1041.         Loads a value from an operand into the Global Descriptor Table
  1042.         (GDT) register.
  1043.                                  Clocks                 Size
  1044.         Operands         808x  286   386   486          Bytes
  1045.         mem64             -     11    11    11            5
  1046. LIDT - Load Interrupt Descriptor Table (286+ privileged)
  1047.         Usage:  LIDT    src
  1048.         Modifies flags: None
  1049.         Loads a value from an operand into the Interrupt Descriptor Table
  1050.         (IDT) register.
  1051.                                  Clocks                 Size
  1052.         Operands         808x  286   386   486          Bytes
  1053.         mem64             -     12    11    11            5
  1054. LGS - Load Pointer Using GS (386+)
  1055.         Usage:  LGS     dest,src
  1056.         Modifies flags: None
  1057.         Loads 32-bit pointer from memory source to destination register
  1058.         and GS.  The offset is placed in the destination register and the
  1059.         segment is placed in GS.  To use this instruction the word at the
  1060.         lower memory address must contain the offset and the word at the
  1061.         higher address must contain the segment.  This simplifies the loading
  1062.         of far pointers from the stack and the interrupt vector table.
  1063.                                  Clocks                 Size
  1064.         Operands         808x  286   386   486          Bytes
  1065.         reg,mem           -     -     7     6            5-7
  1066.         reg,mem (PM)      -     -     22    12           5-7
  1067.  
  1068. LLDT - Load Local Descriptor Table (286+ privileged)
  1069.         Usage:  LLDT    src
  1070.         Modifies flags: None
  1071.         Loads a value from an operand into the Local Descriptor Table 
  1072.         Register (LDTR).
  1073.                                  Clocks                 Size
  1074.         Operands         808x  286   386   486          Bytes
  1075.         reg16             -     17    20    11            3
  1076.         mem16             -     19    24    11            5
  1077. LMSW - Load Machine Status Word (286+ privileged)
  1078.         Usage:  LMSW    src
  1079.         Modifies flags: None
  1080.         Loads the Machine Status Word (MSW) from data found at "src"
  1081.                                  Clocks                 Size
  1082.         Operands         808x  286   386   486          Bytes
  1083.         reg16             -     3     10    13            3
  1084.         mem16             -     6     13    13            5
  1085. LOCK - Lock Bus
  1086.         Usage:  LOCK
  1087.                 LOCK: (386+ prefix)
  1088.         Modifies flags: None
  1089.         This instruction is a prefix that causes the CPU assert bus lock
  1090.         signal during the execution of the next instruction.  Used to
  1091.         avoid two processors from updating the same data location.  The
  1092.         286 always asserts lock during an XCHG with memory operands.  This
  1093.         should only be used to lock the bus prior to XCHG, MOV, IN and
  1094.         OUT instructions.
  1095.                                  Clocks                 Size
  1096.         Operands         808x  286   386   486          Bytes
  1097.         none              2     0     0     1             1
  1098. LODS - Load String (Byte, Word or Double)
  1099.         Usage:  LODS    src
  1100.                 LODSB
  1101.                 LODSW
  1102.                 LODSD  (386+)
  1103.         Modifies flags: None
  1104.         Transfers string element addressed by DS:SI (even if an operand is
  1105.         supplied) to the accumulator.   SI is incremented based on the size
  1106.         of the operand or based on the instruction used.  If the Direction
  1107.         Flag is set SI is decremented, if the Direction Flag is clear SI
  1108.         is incremented.  Use with REP prefixes.
  1109.                                  Clocks                 Size
  1110.         Operands         808x  286   386   486          Bytes
  1111.         src             12/16   5     5     5             1
  1112.  
  1113. LOOP - Decrement CX and Loop if CX Not Zero
  1114.         Usage:  LOOP    label
  1115.         Modifies flags: None
  1116.         Decrements CX by 1 and transfers control to "label" if CX is not
  1117.         Zero.  The "label" operand must be within -128 or 127 bytes of the
  1118.         instruction following the loop instruction
  1119.                                  Clocks                 Size
  1120.         Operands         808x  286   386   486          Bytes
  1121.         label:  jump      18   8+m  11+m    6             2
  1122.                 no jump    5    4     ?     2
  1123. LOOPE/LOOPZ - Loop While Equal / Loop While Zero
  1124.         Usage:  LOOPE   label
  1125.                 LOOPZ   label
  1126.         Modifies flags: None
  1127.         Decrements CX by 1 (without modifying the flags) and transfers
  1128.         control to "label" if CX != 0 and the Zero Flag is set.  The
  1129.         "label" operand must be within -128 or 127 bytes of the instruction
  1130.         following the loop instruction.
  1131.                                  Clocks                 Size
  1132.         Operands         808x  286   386   486          Bytes
  1133.         label:  jump      18   8+m  11+m    9             2
  1134.                 no jump    5    4     ?     6
  1135. LOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not Equal
  1136.         Usage:  LOOPNZ  label
  1137.                 LOOPNE  label
  1138.         Modifies flags: None
  1139.         Decrements CX by 1 (without modifying the flags) and transfers
  1140.         control to "label" if CX != 0 and the Zero Flag is clear.  The
  1141.         "label" operand must be within -128 or 127 bytes of the instruction
  1142.         following the loop instruction.
  1143.                                  Clocks                 Size
  1144.         Operands         808x  286   386   486          Bytes
  1145.         label:  jump      19   8+m  11+m    9             2
  1146.                 no jump    5    4     ?     6
  1147. LSL - Load Segment Limit (286+ protected)
  1148.         Usage:  LSL     dest,src
  1149.         Modifies flags: ZF
  1150.         Loads the segment limit of a selector into the destination register
  1151.         if the selector is valid and visible at the current privilege level.
  1152.         If loading is successful the Zero Flag is set, otherwise it is
  1153.         cleared.
  1154.                                  Clocks                 Size
  1155.         Operands         808x  286   386   486          Bytes
  1156.         reg16,reg16       -     14  20/25   10            3
  1157.         reg32,reg32       -     -   20/25   10            3
  1158.         reg16,mem16       -     16  21/26   10            5
  1159.         reg32,mem32       -     -   21/26   10            5
  1160.         - 386 times are listed "byte granular" / "page granular"
  1161.  
  1162. LSS - Load Pointer Using SS (386+)
  1163.         Usage:  LSS     dest,src
  1164.         Modifies flags: None
  1165.         Loads 32-bit pointer from memory source to destination register
  1166.         and SS.  The offset is placed in the destination register and the
  1167.         segment is placed in SS.  To use this instruction the word at the
  1168.         lower memory address must contain the offset and the word at the
  1169.         higher address must contain the segment.  This simplifies the loading
  1170.         of far pointers from the stack and the interrupt vector table.
  1171.                                  Clocks                 Size
  1172.         Operands         808x  286   386   486          Bytes
  1173.         reg,mem           -     -     7     6            5-7
  1174.         reg,mem (PM)      -     -     22    12           5-7
  1175. LTR - Load Task Register (286+ privileged)
  1176.         Usage:  LTR     src
  1177.         Modifies flags: None
  1178.         Loads the current task register with the value specified in "src".
  1179.                                  Clocks                 Size
  1180.         Operands         808x  286   386   486          Bytes
  1181.         reg16             -     17    23    20            3
  1182.         mem16             -     19    27    20            5
  1183. MOV - Move Byte or Word
  1184.         Usage:  MOV     dest,src
  1185.         Modifies flags: None
  1186.         Copies byte or word from the source operand to the destination
  1187.         operand.  If the destination is SS interrupts are disabled except
  1188.         on early buggy 808x CPUs.  Some CPUs disable interrupts if the
  1189.         destination is any of the segment registers
  1190.                                  Clocks                 Size
  1191.         Operands         808x  286   386   486          Bytes
  1192.         reg,reg           2     2     2     1             2
  1193.         mem,reg          9+EA   3     2     1            2-4  (W88=13+EA)
  1194.         reg,mem          8+EA   5     4     1            2-4  (W88=12+EA)
  1195.         mem,immed       10+EA   3     2     1            3-6  (W88=14+EA)
  1196.         reg,immed         4     2     2     1            2-3
  1197.         mem,accum         10    3     2     1             3   (W88=14)
  1198.         accum,mem         10    5     4     1             3   (W88=14)
  1199.         segreg,reg16      2     2     2     3             2
  1200.         segreg,mem16     8+EA   5     5     9            2-4  (W88=12+EA)
  1201.         reg16,segreg      2     2     2     3             2
  1202.         mem16,segreg     9+EA   3     2     3            2-4  (W88=13+EA)
  1203.         reg32,CR0/CR2/CR3 -     -     6     4
  1204.         CR0,reg32         -     -     10    16
  1205.         CR2,reg32         -     -     4     4             3
  1206.         CR3,reg32         -     -     5     4             3
  1207.         reg32,DR0/DR1/DR2/DR3   -     22   10             3
  1208.         reg32,DR6/DR7     -     -     22   10             3
  1209.         DR0/DR1/DR2/DR3,reg32   -     22   11             3
  1210.         DR6/DR7,reg32     -     -     16   11             3
  1211.         reg32,TR6/TR7     -     -     12    4             3
  1212.         TR6/TR7,reg32     -     -     12    4             3
  1213.         reg32,TR3                           3
  1214.         TR3,reg32                           6
  1215.         - when the 386 special registers are used all operands are 32 bits
  1216.  
  1217. MOVS - Move String (Byte or Word)
  1218.         Usage:  MOVS    dest,src
  1219.                 MOVSB
  1220.                 MOVSW
  1221.                 MOVSD  (386+)
  1222.         Modifies flags: None
  1223.         Copies data from addressed by DS:SI (even if operands are given) to
  1224.         the location ES:DI destination and updates SI and DI based on the
  1225.         size of the operand or instruction used.  SI and DI are incremented
  1226.         when the Direction Flag is cleared and decremented when the Direction
  1227.         Flag is Set.  Use with REP prefixes.
  1228.                                  Clocks                 Size
  1229.         Operands         808x  286   386   486          Bytes
  1230.         dest,src          18    5     7     7             1   (W88=26)
  1231. MOVSX - Move with Sign Extend (386+)
  1232.         Usage:  MOVSX   dest,src
  1233.         Modifies flags: None
  1234.         Copies the value of the source operand to the destination register
  1235.         with the sign extended.
  1236.                                  Clocks                 Size
  1237.         Operands         808x  286   386   486          Bytes
  1238.         reg,reg           -     -     3     3             3
  1239.         reg,mem           -     -     6     3            3-7
  1240. MOVZX - Move with Zero Extend (386+)
  1241.         Usage:  MOVZX   dest,src
  1242.         Modifies flags: None
  1243.         Copies the value of the source operand to the destination register
  1244.         with the zeroes extended.
  1245.                                  Clocks                 Size
  1246.         Operands         808x  286   386   486          Bytes
  1247.         reg,reg           -     -     3     3             3
  1248.         reg,mem           -     -     6     3            3-7
  1249. MUL - Unsigned Multiply
  1250.         Usage:  MUL     src
  1251.         Modifies flags: CF OF (AF,PF,SF,ZF undefined)
  1252.         Unsigned multiply of the accumulator by the source.  If "src" is
  1253.         a byte value, then AL is used as the other multiplicand and the
  1254.         result is placed in AX.  If "src" is a word value, then AX is
  1255.         multiplied by "src" and DX:AX receives the result.  If "src" is
  1256.         a double word value, then EAX is multiplied by "src" and EDX:EAX
  1257.         receives the result.  The 386+ uses an early out algorithm which
  1258.         makes multiplying any size value in EAX as fast as in the 8 or 16
  1259.         bit registers.
  1260.                                  Clocks                 Size
  1261.         Operands         808x  286   386   486          Bytes
  1262.         reg8            70-77   13   9-14  13-18          2
  1263.         reg16          118-113  21   9-22  13-26          2
  1264.         reg32             -     -    9-38  13-42         2-4
  1265.         mem8        (76-83)+EA  16  12-17  13-18         2-4
  1266.         mem16     (124-139)+EA  24  12-25  13-26         2-4
  1267.         mem32             -     -   12-21  13-42         2-4
  1268.  
  1269. NEG - Two's Complement Negation
  1270.         Usage:  NEG     dest
  1271.         Modifies flags: AF CF OF PF SF ZF
  1272.         Subtracts the destination from 0 and saves the 2s complement of
  1273.         "dest" back into "dest".
  1274.                                  Clocks                 Size
  1275.         Operands         808x  286   386   486          Bytes
  1276.         reg               3     2     2     1             2
  1277.         mem             16+EA   7     6     3            2-4  (W88=24+EA)
  1278. NOP - No Operation (90h)
  1279.         Usage:  NOP
  1280.         Modifies flags: None
  1281.         This is a do nothing instruction.  It results in occupation of both
  1282.         space and time and is most useful for patching code segments.
  1283.         (This is the original XCHG AL,AL instruction)
  1284.                                  Clocks                 Size
  1285.         Operands         808x  286   386   486          Bytes
  1286.         none              3     3     3     1             1
  1287. NOT - One's Compliment Negation (Logical NOT)
  1288.         Usage:  NOT     dest
  1289.         Modifies flags: None
  1290.         Inverts the bits of the "dest" operand forming the 1s complement.
  1291.                                  Clocks                 Size
  1292.         Operands         808x  286   386   486          Bytes
  1293.         reg               3     2     2     1             2
  1294.         mem             16+EA   7     6     3            2-4  (W88=24+EA)
  1295. OR - Inclusive Logical OR
  1296.         Usage:  OR      dest,src
  1297.         Modifies flags: CF OF PF SF ZF (AF undefined)
  1298.         Logical inclusive OR of the two operands returning the result in
  1299.         the destination.  Any bit set in either operand will be set in the
  1300.         destination.
  1301.                                  Clocks                 Size
  1302.         Operands         808x  286   386   486          Bytes
  1303.         reg,reg           3     2     2     1             2
  1304.         mem,reg         16+EA   7     7     3            2-4  (W88=24+EA)
  1305.         reg,mem          9+EA   7     6     2            2-4  (W88=13+EA)
  1306.         reg,immed         4     3     2     1            3-4
  1307.         mem8,immed8     17+EA   7     7     3            3-6
  1308.         mem16,immed16   25+EA   7     7     3            3-6
  1309.         accum,immed       4     3     2     1            2-3
  1310.  
  1311. OUT - Output Data to Port
  1312.         Usage:  OUT     port,accum
  1313.         Modifies flags: None
  1314.         Transfers byte in AL,word in AX or dword in EAX to the specified
  1315.         hardware port address.  If the port number is in the range of 0-255
  1316.         it can be specified as an immediate.  If greater than 255 then the
  1317.         port number must be specified in DX.  Since the PC only decodes 10
  1318.         bits of the port address, values over 1023 can only be decoded by
  1319.         third party vendor equipment and also map to the port range 0-1023.
  1320.                                  Clocks                 Size
  1321.         Operands         808x  286   386    486         Bytes
  1322.         immed8,accum    10/14   3     10     16           2
  1323.         immed8,accum (PM) -     -    4/24 11/31/29        2
  1324.         DX,accum         8/12   3     11     16           1
  1325.         DX,accum (PM)     -     -    5/25 10/30/29        1
  1326.         - 386+ protected mode timings depend on privilege levels.
  1327.           first number is the timing when:    CPL ≤ IOPL
  1328.           second number is the timing when:   CPL > IOPL
  1329.           third number is the timing when:    virtual mode on 486 processor
  1330. OUTS - Output String to Port  (80188+)
  1331.         Usage:  OUTS    port,src
  1332.                 OUTSB
  1333.                 OUTSW
  1334.                 OUTSD   (386+)
  1335.         Modifies flags: None
  1336.         Transfers a byte, word or doubleword from "src" to the hardware
  1337.         port specified in DX.  For instructions with no operands the "src"
  1338.         is located at DS:SI and SI is incremented or decremented by the
  1339.         size of the operand or the size dictated by the instruction format.
  1340.         When the Direction Flag is set SI is decremented, when clear, SI is
  1341.         incremented.  If the port number is in the range of 0-255 it can
  1342.         be specified as an immediate.  If greater than 255 then the port
  1343.         number must be specified in DX.  Since the PC only decodes 10 bits
  1344.         of the port address, values over 1023 can only be decoded by third
  1345.         party vendor equipment and also map to the port range 0-1023.
  1346.                                  Clocks                 Size
  1347.         Operands         808x  286   386    486         Bytes
  1348.         port,src          -     5     14     17           1
  1349.         port,src (PM)     -     -    8/28 10/32/30        1
  1350.         - 386+ protected mode timings depend on privilege levels.
  1351.           first number is the timing when:    CPL ≤ IOPL
  1352.           second number is the timing when:   CPL > IOPL
  1353.           third number is the timing when:    virtual mode on 486 processor
  1354. POP - Pop Word off Stack
  1355.         Usage:  POP     dest
  1356.         Modifies flags: None
  1357.         Transfers word at the current stack top (SS:SP) to the destination
  1358.         then increments SP by two to point to the new stack top.  CS is not
  1359.         a valid destination.
  1360.                                  Clocks                 Size
  1361.         Operands         808x  286   386   486          Bytes
  1362.         reg16             8     5     4     4             1
  1363.         reg32             4     -     -     4             1
  1364.         segreg            8     5     7     3             1
  1365.         mem16           17+EA   5     5     6            2-4
  1366.         mem32             5     -     -     6            2-4
  1367.  
  1368. POPA/POPAD - Pop All Registers onto Stack  (80188+)
  1369.         Usage:  POPA
  1370.                 POPAD  (386+)
  1371.         Modifies flags: None
  1372.         Pops the top 8 words off the stack into the 8 general purpose 16/32
  1373.         bit registers.   Registers are popped in the following order: (E)DI,
  1374.         (E)SI, (E)BP, (E)SP, (E)DX, (E)CX and (E)AX.  The (E)SP value popped
  1375.         from the stack is actually discarded.
  1376.                                  Clocks                 Size
  1377.         Operands         808x  286   386   486          Bytes
  1378.         none              -     19    24    9             1
  1379. POPF/POPFD - Pop Flags off Stack
  1380.         Usage:  POPF
  1381.                 POPFD  (386+)
  1382.         Modifies flags: all flags
  1383.         Pops word/doubleword from stack into the Flags Register and then
  1384.         increments SP by 2 (for POPF) or 4 (for POPFD).
  1385.                                  Clocks                 Size
  1386.         Operands         808x  286   386   486          Bytes
  1387.         none             8/12   5     5     9             1  (W88=12)
  1388.         none  (PM)        -     -     5     6             1
  1389. PUSH - Push Word onto Stack
  1390.         Usage:  PUSH    src
  1391.                 PUSH    immed   (80188+ only)
  1392.         Modifies flags: None
  1393.         Decrements SP by the size of the operand (two or four, byte values
  1394.         are sign extended) and transfers one word from source to the stack
  1395.         top (SS:SP).
  1396.                                  Clocks                 Size
  1397.         Operands         808x  286   386   486          Bytes
  1398.         reg16           11/15   3     2     1             1
  1399.         reg32             -     -     2     1             1
  1400.         mem16           16+EA   5     5     4            2-4  (W88=24+EA)
  1401.         mem32             -     -     5     4            2-4
  1402.         segreg          10/14   3     2     3             1
  1403.         immed             -     3     2     1            2-3
  1404. PUSHA/PUSHAD - Push All Registers onto Stack  (80188+)
  1405.         Usage:  PUSHA
  1406.                 PUSHAD  (386+)
  1407.         Modifies flags: None
  1408.         Pushes all general purpose registers onto the stack in the following
  1409.         order: (E)AX, (E)CX, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI.  The
  1410.         value of SP is the value before the actual push of SP.
  1411.                                  Clocks                 Size
  1412.         Operands         808x  286   386   486          Bytes
  1413.         none              -     19    24    11            1
  1414.  
  1415. PUSHF/PUSHFD - Push Flags onto Stack
  1416.         Usage:  PUSHF
  1417.                 PUSHFD  (386+)
  1418.         Modifies flags: None
  1419.         Transfers the Flags Register onto the stack.  PUSHF saves a 16 bit
  1420.         value while PUSHFD saves a 32 bit value.
  1421.                                  Clocks                 Size
  1422.         Operands         808x  286   386   486          Bytes
  1423.         none            10/14   3     4     4             1
  1424.         none  (PM)        -     -     4     3             1
  1425. RCL - Rotate Through Carry Left
  1426.         Usage:  RCL     dest,count
  1427.         Modifies flags: CF OF
  1428.            ┌─┐     ┌───────────────┐
  1429.         ┌─■│C│<■──■│7 <────────── 0│<─┐
  1430.         │  └─┘     └───────────────┘  │
  1431.         └─────────────────────────────┘
  1432.         Rotates the bits in the destination to the left "count" times with
  1433.         all data pushed out the left side re-entering on the right.  The
  1434.         Carry Flag holds the last bit rotated out.
  1435.                                  Clocks                 Size
  1436.         Operands         808x  286   386   486          Bytes
  1437.         reg,1             2     2     9     3            2
  1438.         mem,1           15+EA   7     10    4           2-4  (W88=23+EA)
  1439.         reg,CL           8+4n  5+n    9    8-30          2
  1440.         mem,CL        20+EA+4n 8+n    10   9-31         2-4  (W88=28+EA+4n)
  1441.         reg,immed8        -    5+n     9   8-30          3
  1442.         mem,immed8        -    8+n    10   9-31         3-5
  1443. RCR - Rotate Through Carry Right
  1444.         Usage:  RCR     dest,count
  1445.         Modifies flags: CF OF
  1446.            ┌───────────────┐     ┌─┐
  1447.         ┌─>│7 ■─────────> 0│■───>│C│■─┐
  1448.         │  └───────────────┘     └─┘  │
  1449.         └─────────────────────────────┘
  1450.         Rotates the bits in the destination to the right "count" times with
  1451.         all data pushed out the right side re-entering on the left.  The
  1452.         Carry Flag holds the last bit rotated out.
  1453.                                  Clocks                 Size
  1454.         Operands         808x  286   386   486          Bytes
  1455.         reg,1             2     2     9     3            2
  1456.         mem,1           15+EA   7     10    4           2-4   (W88=23+EA)
  1457.         reg,CL           8+4n  5+n    9    8-30          2
  1458.         mem,CL        20+EA+4n 8+n    10   9-31         2-4   (W88=28+EA+4n)
  1459.         reg,immed8        -    5+n    9    8-30          3
  1460.         mem,immed8        -    8+n    10   9-31         3-5
  1461.  
  1462. REP - Repeat String Operation
  1463.         Usage:  REP
  1464.         Modifies flags: None
  1465.         Repeats execution of string instructions while CX != 0.  After
  1466.         each string operation, CX is decremented and the Zero Flag is
  1467.         tested.  The combination of a repeat prefix and a segment override
  1468.         on CPU's before the 386 may result in errors if an interrupt occurs
  1469.         before CX=0.  The following code shows code that is susceptible to
  1470.         this and how to avoid it:
  1471.          again:  rep movs  byte ptr ES:[DI],ES:[SI]   ; vulnerable instr.
  1472.                      jcxz  next              ; continue if REP successful
  1473.                      loop  again             ; interrupt goofed count
  1474.          next:
  1475.                                  Clocks                 Size
  1476.         Operands         808x  286   386   486          Bytes
  1477.         none              2     2     2                   1
  1478. REPE/REPZ - Repeat Equal / Repeat Zero
  1479.         Usage:  REPE
  1480.                 REPZ
  1481.         Modifies flags: None
  1482.         Repeats execution of string instructions while CX != 0 and the Zero
  1483.         Flag is set.  CX is decremented and the Zero Flag tested after
  1484.         each string operation.   The combination of a repeat prefix and a
  1485.         segment override on processors other than the 386 may result in
  1486.         errors if an interrupt occurs before CX=0.
  1487.                                  Clocks                 Size
  1488.         Operands         808x  286   386   486          Bytes
  1489.         none              2     2     2                   1
  1490. REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero
  1491.         Usage:  REPNE
  1492.                 REPNZ
  1493.         Modifies flags: None
  1494.         Repeats execution of string instructions while CX != 0 and the Zero
  1495.         Flag is clear.   CX is decremented and the Zero Flag tested after
  1496.         each string operation.   The combination of a repeat prefix and a
  1497.         segment override on processors other than the 386 may result in
  1498.         errors if an interrupt occurs before CX=0.
  1499.                                  Clocks                 Size
  1500.         Operands         808x  286   386   486          Bytes
  1501.         none              2     2     2                   1
  1502.  
  1503. RET/RETF - Return From Procedure
  1504.         Usage:  RET     nBytes
  1505.                 RETF    nBytes
  1506.                 RETN    nBytes
  1507.         Modifies flags: None
  1508.         Transfers control from a procedure back to the instruction address
  1509.         saved on the stack.  "n bytes" is an optional number of bytes to
  1510.         release.  Far returns pop the IP followed by the CS, while near
  1511.         returns pop only the IP register.
  1512.                                  Clocks                 Size
  1513.         Operands         808x  286    386   486         Bytes
  1514.         retn            16/20  11+m  10+m    5            1
  1515.         retn immed      20/24  11+m  10+m    5            3
  1516.         retf            26/34  15+m  18+m    13           1
  1517.         retf (PM, same priv.)   -    32+m    18           1
  1518.         retf (PM, lesser priv.) -      68    33           1
  1519.         retf immed      25/33  15+m  18+m    14           3
  1520.         retf immed (PM, same priv.)  32+m    17           1
  1521.         retf immed (PM, lesser priv.)  68    33           1
  1522. ROL - Rotate Left
  1523.         Usage:  ROL     dest,count
  1524.         Modifies flags: CF OF
  1525.         ┌─┐     ┌───────────────┐
  1526.         │C│<■┬─■│7 <────────── 0│<─┐
  1527.         └─┘  │  └───────────────┘  │
  1528.              └─────────────────────┘
  1529.         Rotates the bits in the destination to the left "count" times with
  1530.         all data pushed out the left side re-entering on the right.  The
  1531.         Carry Flag will contain the value of the last bit rotated out.
  1532.                                  Clocks                 Size
  1533.         Operands         808x  286   386   486          Bytes
  1534.         reg,1             2     2     3     3             2
  1535.         mem,1           15+EA   7     7     4            2-4  (W88=23+EA)
  1536.         reg,CL           8+4n  5+n    3     3             2
  1537.         mem,CL        20+EA+4n 8+n    7     4            2-4  (W88=28+EA+4n)
  1538.         reg,immed8        -    5+n    3     2             3
  1539.         mem,immed8        -    8+n    7     4            3-5
  1540. ROR - Rotate Right
  1541.         Usage:  ROR     dest,count
  1542.         Modifies flags: CF OF
  1543.            ┌───────────────┐     ┌─┐
  1544.         ┌─>│7 ■─────────> 0│■─┬─>│C│   
  1545.         │  └───────────────┘  │  └─┘   
  1546.         └─────────────────────┘        
  1547.         Rotates the bits in the destination to the right "count" times with
  1548.         all data pushed out the right side re-entering on the left.  The
  1549.         Carry Flag will contain the value of the last bit rotated out.
  1550.                                  Clocks                 Size
  1551.         Operands         808x  286   386   486          Bytes
  1552.         reg,1             2     2     3     3             2
  1553.         mem,1           15+EA   7     7     4            2-4  (W88=23+EA)
  1554.         reg,CL           8+4n  5+n    3     3             2
  1555.         mem,CL        20+EA+4n 8+n    7     4            2-4  (W88=28+EA+4n)
  1556.         reg,immed8        -    5+n    3     2             3
  1557.         mem,immed8        -    8+n    7     4            3-5
  1558.  
  1559. SAHF - Store AH Register into FLAGS
  1560.         Usage:  SAHF
  1561.         Modifies flags: AF CF PF SF ZF
  1562.         Transfers bits 0-7 of AH into the Flags Register.  This includes
  1563.         AF, CF, PF, SF and ZF.
  1564.                                  Clocks                 Size
  1565.         Operands         808x  286   386   486          Bytes
  1566.         none              4     2     3     2             1
  1567. SAL/SHL - Shift Arithmetic Left / Shift Logical Left
  1568.         Usage:  SAL     dest,count
  1569.                 SHL     dest,count
  1570.         Modifies flags: CF OF PF SF ZF (AF undefined)
  1571.         ┌─┐     ┌───────────────┐     ┌─┐
  1572.         │C│<───■│7 <────────── 0│<───■│0│
  1573.         └─┘     └───────────────┘     └─┘
  1574.         Shifts the destination left by "count" bits with zeroes shifted
  1575.         in on right.  The Carry Flag contains the last bit shifted out.
  1576.                                  Clocks                 Size
  1577.         Operands         808x  286   386   486          Bytes
  1578.         reg,1             2     2     3     3            2
  1579.         mem,1           15+EA   7     7     4           2-4  (W88=23+EA)
  1580.         reg,CL           8+4n  5+n    3     3            2
  1581.         mem,CL        20+EA+4n 8+n    7     4           2-4  (W88=28+EA+4n)
  1582.         reg,immed8        -    5+n    3     2            3
  1583.         mem,immed8        -    8+n    7     4           3-5
  1584. SAR - Shift Arithmetic Right
  1585.         Usage:  SAR     dest,count
  1586.         Modifies flags: CF OF PF SF ZF (AF undefined)
  1587.            ┌───────────────┐     ┌─┐
  1588.         ┌─■│7 ──────────> 0│───■>│C│
  1589.         │  └───────────────┘     └─┘
  1590.         └───^
  1591.         Shifts the destination right by "count" bits with the current sign
  1592.         bit replicated in the leftmost bit.  The Carry Flag contains the
  1593.         last bit shifted out.
  1594.                                  Clocks                 Size
  1595.         Operands         808x  286   386   486          Bytes
  1596.         reg,1             2     2     3     3             2
  1597.         mem,1           15+EA   7     7     4            2-4  (W88=23+EA)
  1598.         reg,CL           8+4n  5+n    3     3             2
  1599.         mem,CL        20+EA+4n 8+n    7     4            2-4  (W88=28+EA+4n)
  1600.         reg,immed8        -    5+n    3     2             3
  1601.         mem,immed8        -    8+n    7     4            3-5
  1602.  
  1603. SBB - Subtract with Borrow/Carry
  1604.         Usage:  SBB     dest,src
  1605.         Modifies flags: AF CF OF PF SF ZF
  1606.         Subtracts the source from the destination, and subtracts 1 extra if
  1607.         the Carry Flag is set.   Results are returned in "dest".
  1608.                                  Clocks                 Size
  1609.         Operands         808x  286   386   486          Bytes
  1610.         reg,reg           3     2     2     1             2
  1611.         mem,reg         16+EA   7     6     3            2-4  (W88=24+EA)
  1612.         reg,mem          9+EA   7     7     2            2-4  (W88=13+EA)
  1613.         reg,immed         4     3     2     1            3-4
  1614.         mem,immed       17+EA   7     7     3            3-6  (W88=25+EA)
  1615.         accum,immed       4     3     2     1            2-3
  1616. SCAS - Scan String  (Byte, Word or Doubleword)
  1617.         Usage:  SCAS    string
  1618.                 SCASB
  1619.                 SCASW
  1620.                 SCASD   (386+)
  1621.         Modifies flags: AF CF OF PF SF ZF
  1622.         Compares value at ES:DI (even if operand is specified) from the
  1623.         accumulator and sets the flags similar to a subtraction.  DI is
  1624.         incremented/decremented based on the instruction format (or
  1625.         operand size) and the state of the Direction Flag.  Use with REP
  1626.         prefixes.
  1627.                                  Clocks                 Size
  1628.         Operands         808x  286   386   486          Bytes
  1629.         string            15    7     7     6             1  (W88=19)
  1630. SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+)
  1631.         Usage:  SETAE   dest
  1632.                 SETNB   dest
  1633.         (unsigned, 386+)
  1634.         Modifies flags: none
  1635.         Sets the byte in the operand to 1 if the Carry Flag is clear
  1636.         otherwise sets the operand to 0.
  1637.                                  Clocks                 Size
  1638.         Operands         808x  286   386   486          Bytes
  1639.         reg8              -     -     4     3             3
  1640.         mem8              -     -     5     4             3
  1641. SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+)
  1642.         Usage:  SETB    dest
  1643.                 SETNAE  dest
  1644.         (unsigned, 386+)
  1645.         Modifies flags: none
  1646.         Sets the byte in the operand to 1 if the Carry Flag is set
  1647.         otherwise sets the operand to 0.
  1648.                                  Clocks                 Size
  1649.         Operands         808x  286   386   486          Bytes
  1650.         reg8              -     -     4     3             3
  1651.         mem8              -     -     5     4             3
  1652.  
  1653. SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+)
  1654.         Usage:  SETBE   dest
  1655.                 SETNA   dest
  1656.         (unsigned, 386+)
  1657.         Modifies flags: none
  1658.         Sets the byte in the operand to 1 if the Carry Flag or the Zero
  1659.         Flag is set, otherwise sets the operand to 0.
  1660.                                  Clocks                 Size
  1661.         Operands         808x  286   386   486          Bytes
  1662.         reg8              -     -     4     3             3
  1663.         mem8              -     -     5     4             3
  1664. SETE/SETZ - Set if Equal / Set if Zero (386+)
  1665.         Usage:  SETE    dest
  1666.                 SETZ    dest
  1667.         Modifies flags: none
  1668.         Sets the byte in the operand to 1 if the Zero Flag is set,
  1669.         otherwise sets the operand to 0.
  1670.                                  Clocks                 Size
  1671.         Operands         808x  286   386   486          Bytes
  1672.         reg8              -     -     4     3             3
  1673.         mem8              -     -     5     4             3
  1674. SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+)
  1675.         Usage:  SETNE   dest
  1676.                 SETNZ   dest
  1677.         Modifies flags: none
  1678.         Sets the byte in the operand to 1 if the Zero Flag is clear,
  1679.         otherwise sets the operand to 0.
  1680.                                  Clocks                 Size
  1681.         Operands         808x  286   386   486          Bytes
  1682.         reg8              -     -     4     3             3
  1683.         mem8              -     -     5     4             3
  1684. SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+)
  1685.         Usage:  SETL    dest
  1686.                 SETNGE  dest
  1687.         (signed, 386+)
  1688.         Modifies flags: none
  1689.         Sets the byte in the operand to 1 if the Sign Flag is not equal
  1690.         to the Overflow Flag, otherwise sets the operand to 0.
  1691.                                  Clocks                 Size
  1692.         Operands         808x  286   386   486          Bytes
  1693.         reg8              -     -     4     3             3
  1694.         mem8              -     -     5     4             3
  1695.  
  1696. SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+)
  1697.         Usage:  SETGE   dest
  1698.                 SETNL   dest
  1699.         (signed, 386+)
  1700.         Modifies flags: none
  1701.         Sets the byte in the operand to 1 if the Sign Flag equals the
  1702.         Overflow Flag, otherwise sets the operand to 0.
  1703.                                  Clocks                 Size
  1704.         Operands         808x  286   386   486          Bytes
  1705.         reg8              -     -     4     3             3
  1706.         mem8              -     -     5     4             3
  1707. SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+)
  1708.         Usage:  SETLE   dest
  1709.                 SETNG   dest
  1710.         (signed, 386+)
  1711.         Modifies flags: none
  1712.         Sets the byte in the operand to 1 if the Zero Flag is set or the
  1713.         Sign Flag is not equal to the Overflow Flag,  otherwise sets the
  1714.         operand to 0.
  1715.                                  Clocks                 Size
  1716.         Operands         808x  286   386   486          Bytes
  1717.         reg8              -     -     4     3             3
  1718.         mem8              -     -     5     4             3
  1719. SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+)
  1720.         Usage:  SETG    dest
  1721.                 SETNLE  dest
  1722.         (signed, 386+)
  1723.         Modifies flags: none
  1724.         Sets the byte in the operand to 1 if the Zero Flag is clear or the
  1725.         Sign Flag equals to the Overflow Flag,  otherwise sets the operand
  1726.         to 0.
  1727.                                  Clocks                 Size
  1728.         Operands         808x  286   386   486          Bytes
  1729.         reg8              -     -     4     3             3
  1730.         mem8              -     -     5     4             3
  1731. SETS - Set if Signed (386+)
  1732.         Usage:  SETS    dest
  1733.         Modifies flags: none
  1734.         Sets the byte in the operand to 1 if the Sign Flag is set, otherwise
  1735.         sets the operand to 0.
  1736.                                  Clocks                 Size
  1737.         Operands         808x  286   386   486          Bytes
  1738.         reg8              -     -     4     3             3
  1739.         mem8              -     -     5     4             3
  1740.  
  1741. SETNS - Set if Not Signed (386+)
  1742.         Usage:  SETNS   dest
  1743.         Modifies flags: none
  1744.         Sets the byte in the operand to 1 if the Sign Flag is clear,
  1745.         otherwise sets the operand to 0.
  1746.                                  Clocks                 Size
  1747.         Operands         808x  286   386   486          Bytes
  1748.         reg8              -     -     4     3             3
  1749.         mem8              -     -     5     4             3
  1750. SETC - Set if Carry (386+)
  1751.         Usage:  SETC    dest
  1752.         Modifies flags: none
  1753.         Sets the byte in the operand to 1 if the Carry Flag is set,
  1754.         otherwise sets the operand to 0.
  1755.                                  Clocks                 Size
  1756.         Operands         808x  286   386   486          Bytes
  1757.         reg8              -     -     4     3             3
  1758.         mem8              -     -     5     4             3
  1759. SETNC - Set if Not Carry (386+)
  1760.         Usage:  SETNC   dest
  1761.         Modifies flags: none
  1762.         Sets the byte in the operand to 1 if the Carry Flag is clear,
  1763.         otherwise sets the operand to 0.
  1764.                                  Clocks                 Size
  1765.         Operands         808x  286   386   486          Bytes
  1766.         reg8              -     -     4     3             3
  1767.         mem8              -     -     5     4             3
  1768. SETO - Set if Overflow (386+)
  1769.         Usage:  SETO    dest
  1770.         Modifies flags: none
  1771.         Sets the byte in the operand to 1 if the Overflow Flag is set,
  1772.         otherwise sets the operand to 0.
  1773.                                  Clocks                 Size
  1774.         Operands         808x  286   386   486          Bytes
  1775.         reg8              -     -     4     3             3
  1776.         mem8              -     -     5     4             3
  1777. SETNO - Set if Not Overflow (386+)
  1778.         Usage:  SETNO   dest
  1779.         Modifies flags: none
  1780.         Sets the byte in the operand to 1 if the Overflow Flag is clear,
  1781.         otherwise sets the operand to 0.
  1782.                                  Clocks                 Size
  1783.         Operands         808x  286   386   486          Bytes
  1784.         reg8              -     -     4     3             3
  1785.         mem8              -     -     5     4             3
  1786.  
  1787. SETP/SETPE - Set if Parity / Set if Parity Even  (386+)
  1788.         Usage:  SETP    dest
  1789.                 SETPE   dest
  1790.         Modifies flags: none
  1791.         Sets the byte in the operand to 1 if the Parity Flag is set,
  1792.         otherwise sets the operand to 0.
  1793.                                  Clocks                 Size
  1794.         Operands         808x  286   386   486          Bytes
  1795.         reg8              -     -     4     3             3
  1796.         mem8              -     -     5     4             3
  1797. SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+)
  1798.         Usage:  SETNP   dest
  1799.                 SETPO   dest
  1800.         Modifies flags: none
  1801.         Sets the byte in the operand to 1 if the Parity Flag is clear,
  1802.         otherwise sets the operand to 0.
  1803.                                  Clocks                 Size
  1804.         Operands         808x  286   386   486          Bytes
  1805.         reg8              -     -     4     3             3
  1806.         mem8              -     -     5     4             3
  1807. SGDT - Store Global Descriptor Table (286+ privileged)
  1808.         Usage:  SGDT    dest
  1809.         Modifies flags: none
  1810.         Stores the Global Descriptor Table (GDT) Register into the
  1811.         specified operand.
  1812.                                  Clocks                 Size
  1813.         Operands         808x  286   386   486          Bytes
  1814.         mem64             -     11    9     10            5
  1815. SIDT - Store Interrupt Descriptor Table (286+ privileged)
  1816.         Usage:  SIDT    dest
  1817.         Modifies flags: none
  1818.         Stores the Interrupt Descriptor Table (IDT) Register into the
  1819.         specified operand.
  1820.                                  Clocks                 Size
  1821.         Operands         808x  286   386   486          Bytes
  1822.         mem64             -     12    9     10            5
  1823. SHL - Shift Logical Left
  1824.         See: SAL
  1825.  
  1826. SHR - Shift Logical Right
  1827.         Usage:  SHR     dest,count
  1828.         Modifies flags: CF OF PF SF ZF (AF undefined)
  1829.         ┌─┐     ┌───────────────┐     ┌─┐
  1830.         │0│───■>│7 ──────────> 0│───■>│C│
  1831.         └─┘     └───────────────┘     └─┘
  1832.         Shifts the destination right by "count" bits with zeroes shifted
  1833.         in on the left.  The Carry Flag contains the last bit shifted out.
  1834.                                  Clocks                 Size
  1835.         Operands         808x  286   386   486          Bytes
  1836.         reg,1             2     2     3                   2
  1837.         mem,1           15+EA   7     7                  2-4   (W88=23+EA)
  1838.         reg,CL           8+4n  5+n    3                   2
  1839.         mem,CL        20+EA+4n 8+n    7                  2-4   (W88=28+EA+4n)
  1840.         reg,immed8        -    5+n    3                   3
  1841.         mem,immed8        -    8+n    7                  3-5
  1842. SHLD/SHRD - Double Precision Shift (386+)
  1843.         Usage:  SHLD    dest,src,count
  1844.                 SHRD    dest,src,count
  1845.         Modifies flags: CF PF SF ZF (OF,AF undefined)
  1846.         SHLD shifts "dest" to the left "count" times and the bit positions
  1847.         opened are filled with the most significant bits of "src".  SHRD
  1848.         shifts "dest" to the right "count" times and the bit positions
  1849.         opened are filled with the least significant bits of the second
  1850.         operand.  Only the 5 lower bits of "count" are used.
  1851.                                         Clocks                  Size
  1852.         Operands                808x  286   386   486           Bytes
  1853.         reg16,reg16,immed8       -     -     3     2              4
  1854.         reg32,reg32,immed8       -     -     3     2              4
  1855.         mem16,reg16,immed8       -     -     7     3              6
  1856.         mem32,reg32,immed8       -     -     7     3              6
  1857.         reg16,reg16,CL           -     -     3     3              3
  1858.         reg32,reg32,CL           -     -     3     3              3
  1859.         mem16,reg16,CL           -     -     7     4              5
  1860.         mem32,reg32,CL           -     -     7     4              5
  1861. SLDT - Store Local Descriptor Table (286+ privileged)
  1862.         Usage:  SLDT    dest
  1863.         Modifies flags: none
  1864.         Stores the Local Descriptor Table (LDT) Register into the
  1865.         specified operand.
  1866.                                  Clocks                 Size
  1867.         Operands         808x  286   386   486          Bytes
  1868.         reg16             -     2     2     2             3
  1869.         mem16             -     2     2     3             5
  1870. SMSW - Store Machine Status Word (286+ privileged)
  1871.         Usage:  SMSW    dest
  1872.         Modifies flags: none
  1873.         Store Machine Status Word (MSW) into "dest".
  1874.                                  Clocks                 Size
  1875.         Operands         808x  286   386   486          Bytes
  1876.         reg16             -     2     10    2             3
  1877.         mem16             -     3     3     3             5
  1878.  
  1879. STC - Set Carry
  1880.         Usage:  STC
  1881.         Modifies flags: CF
  1882.         Sets the Carry Flag to 1.
  1883.                                  Clocks                 Size
  1884.         Operands         808x  286   386   486          Bytes
  1885.         none              2     2     2     2             1
  1886. STD - Set Direction Flag
  1887.         Usage:  STD
  1888.         Modifies flags: DF
  1889.         Sets the Direction Flag to 1 causing string instructions to
  1890.         auto-decrement SI and DI instead of auto-increment.
  1891.                                  Clocks                 Size
  1892.         Operands         808x  286   386   486          Bytes
  1893.         none              2     2     2     2             1
  1894. STI - Set Interrupt Flag  (Enable Interrupts)
  1895.         Usage:  STI
  1896.         Modifies flags: IF
  1897.         Sets the Interrupt Flag to 1, which enables recognition of all
  1898.         hardware interrupts.  If an interrupt is generated by a hardware
  1899.         device, an End of Interrupt (EOI) must also be issued to enable
  1900.         other hardware interrupts of the same or lower priority.
  1901.                                  Clocks                 Size
  1902.         Operands         808x  286   386   486          Bytes
  1903.         none              2     2     2     5             1
  1904. STOS - Store String  (Byte, Word or Doubleword)
  1905.         Usage:  STOS    dest
  1906.                 STOSB
  1907.                 STOSW
  1908.                 STOSD
  1909.         Modifies flags: None
  1910.         Stores value in accumulator to location at ES:(E)DI (even if operand
  1911.         is given).  (E)DI is incremented/decremented based on the size of
  1912.         the operand (or instruction format) and the state of the Direction
  1913.         Flag.   Use with REP prefixes.
  1914.                                  Clocks                 Size
  1915.         Operands         808x  286   386   486          Bytes
  1916.         dest              11    3     4     5             1  (W88=15)
  1917. STR - Store Task Register (286+ privileged)
  1918.         Usage:  STR     dest
  1919.         Modifies flags: None
  1920.         Stores the current Task Register to the specified operand.
  1921.                                  Clocks                 Size
  1922.         Operands         808x  286   386   486          Bytes
  1923.         reg16             -     2     2     2             3
  1924.         mem16             -     3     2     3             5
  1925.  
  1926. SUB - Subtract
  1927.         Usage:  SUB     dest,src
  1928.         Modifies flags: AF CF OF PF SF ZF
  1929.         The source is subtracted from the destination and the result is
  1930.         stored in the destination.
  1931.                                  Clocks                 Size
  1932.         Operands         808x  286   386   486          Bytes
  1933.         reg,reg           3     2     2     1             2
  1934.         mem,reg         16+EA   7     6     3            2-4  (W88=24+EA)
  1935.         reg,mem          9+EA   7     7     2            2-4  (W88=13+EA)
  1936.         reg,immed         4     3     2     1            3-4
  1937.         mem,immed       17+EA   7     7     3            3-6  (W88=25+EA)
  1938.         accum,immed       4     3     2     1            2-3
  1939. TEST - Test For Bit Pattern
  1940.         Usage:  TEST    dest,src
  1941.         Modifies flags: CF OF PF SF ZF (AF undefined)
  1942.         Performs a logical AND of the two operands updating the flags
  1943.         register without saving the result.
  1944.                                  Clocks                 Size
  1945.         Operands         808x  286   386   486          Bytes
  1946.         reg,reg           3     2     1     1             2
  1947.         reg,mem          9+EA   6     5     1            2-4  (W88=13+EA)
  1948.         mem,reg          9+EA   6     5     2            2-4  (W88=13+EA)
  1949.         reg,immed         5     3     2     1            3-4
  1950.         mem,immed       11+EA   6     5     2            3-6
  1951.         accum,immed       4     3     2     1            2-3
  1952. VERR - Verify Read (286+ protected)
  1953.         Usage:  VERR    src
  1954.         Modifies flags: ZF
  1955.         Verifies the specified segment selector is valid and is readable
  1956.         at the current privilege level.  If the segment is readable,
  1957.         the Zero Flag is set, otherwise it is cleared.
  1958.                                  Clocks                 Size
  1959.         Operands         808x  286   386   486          Bytes
  1960.         reg16             -     14    10    11            3
  1961.         mem16             -     16    11    11            5
  1962. VERW - Verify Write (286+ protected)
  1963.         Usage:  VERW    src
  1964.         Modifies flags: ZF
  1965.         Verifies the specified segment selector is valid and is ratable
  1966.         at the current privilege level.  If the segment is writable,
  1967.         the Zero Flag is set, otherwise it is cleared.
  1968.                                  Clocks                 Size
  1969.         Operands         808x  286   386   486          Bytes
  1970.         reg16             -     14    15    11            3
  1971.         mem16             -     16    16    11            5
  1972.  
  1973. WAIT/FWAIT - Event Wait
  1974.         Usage:  WAIT
  1975.                 FWAIT
  1976.         Modifies flags: None
  1977.         CPU enters wait state until the coprocessor signals it has finished
  1978.         its operation.  This instruction is used to prevent the CPU from
  1979.         accessing memory that may be temporarily in use by the coprocessor.
  1980.         WAIT and FWAIT are identical.
  1981.                                  Clocks                 Size
  1982.         Operands         808x  286   386   486          Bytes
  1983.         none              4     3     6+   1-3            1
  1984. WBINVD - Write-Back and Invalidate Cache (486+)
  1985.         Usage:  WBINVD
  1986.         Modifies flags: None
  1987.         Flushes internal cache, then signals the external cache to write
  1988.         back current data followed by a signal to flush the external cache.
  1989.                                  Clocks                 Size
  1990.         Operands         808x  286   386   486          Bytes
  1991.         none              -     -     -     5             2
  1992. XCHG - Exchange
  1993.         Usage:  XCHG    dest,src
  1994.         Modifies flags: None
  1995.         Exchanges contents of source and destination.
  1996.                                  Clocks                 Size
  1997.         Operands         808x  286   386   486          Bytes
  1998.         reg,reg           4     3     3     3             2
  1999.         mem,reg         17+EA   5     5     5            2-4  (W88=25+EA)
  2000.         reg,mem         17+EA   5     5     3            2-4  (W88=25+EA)
  2001.         accum,reg         3     3     3     3             1
  2002.         reg,accum         3     3     3     3             1
  2003. XLAT/XLATB - Translate
  2004.         Usage:  XLAT    translation-table
  2005.                 XLATB   (masm 5.x)
  2006.         Modifies flags: None
  2007.         Replaces the byte in AL with byte from a user table addressed by
  2008.         BX.  The original value of AL is the index into the translate table.
  2009.         The best way to discripe this is MOV AL,[BX+AL]
  2010.                                  Clocks                 Size
  2011.         Operands         808x  286   386   486          Bytes
  2012.         table offset      11    5     5     4             1
  2013.  
  2014. XOR - Exclusive OR
  2015.         Usage:  XOR     dest,src
  2016.         Modifies flags: CF OF PF SF ZF (AF undefined)
  2017.         Performs a bitwise exclusive OR of the operands and returns
  2018.         the result in the destination.
  2019.                                  Clocks                 Size
  2020.         Operands         808x  286   386   486          Bytes
  2021.         reg,reg           3     2     2     1             2
  2022.         mem,reg         16+EA   7     6     3            2-4  (W88=24+EA)
  2023.         reg,mem          9+EA   7     7     2            2-4  (W88=13+EA)
  2024.         reg,immed         4     3     2     1            3-4
  2025.         mem,immed       17+EA   7     7     3            3-6  (W88=25+EA)
  2026.         accum,immed       4     3     2     1            2-3
  2027.