home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / asmutil / a86v322.zip / A06B.DOC < prev    next >
Text File  |  1990-01-25  |  25KB  |  427 lines

  1.                                                               6-8
  2.  
  3. Opcodes     Instruction    Description
  4.  
  5. 37          AAA            ASCII adjust AL (carry into AH) after addition
  6. D5 0A       AAD            ASCII adjust before division (AX = 10*AH + AL)
  7. D4 0A       AAM            ASCII adjust after multiply (AL/10: AH=Quo AL=Rem)
  8. 3F          AAS            ASCII adjust AL (borrow from AH) after subtraction
  9. 14 ib       ADC AL,ib      Add with carry immediate byte into AL
  10. 15 iw       ADC AX,iw      Add with carry immediate word into AX
  11. 80 /2 ib    ADC eb,ib      Add with carry immediate byte into EA byte
  12. 10 /r       ADC eb,rb      Add with carry byte register into EA byte
  13. 83 /2 ib    ADC ew,ib      Add with carry immediate byte into EA word
  14. 81 /2 iw    ADC ew,iw      Add with carry immediate word into EA word
  15. 11 /r       ADC ew,rw      Add with carry word register into EA word
  16. 12 /r       ADC rb,eb      Add with carry EA byte into byte register
  17. 13 /r       ADC rw,ew      Add with carry EA word into word register
  18.  
  19. 04 ib       ADD AL,ib      Add immediate byte into AL
  20. 05 iw       ADD AX,iw      Add immediate word into AX
  21. 80 /0 ib    ADD eb,ib      Add immediate byte into EA byte
  22. 00 /r       ADD eb,rb      Add byte register into EA byte
  23. 83 /0 ib    ADD ew,ib      Add immediate byte into EA word
  24. 81 /0 iw    ADD ew,iw      Add immediate word into EA word
  25. 01 /r       ADD ew,rw      Add word register into EA word
  26. 02 /r       ADD rb,eb      Add EA byte into byte register
  27. 03 /r       ADD rw,ew      Add EA word into word register
  28. 0F 20      #ADD4S          Add CL nibbles BCD from DS:SI into ES:DI (CL even,NZ)
  29.  
  30. 24 ib       AND AL,ib      Logical-AND immediate byte into AL
  31. 25 iw       AND AX,iw      Logical-AND immediate word into AX
  32. 80 /4 ib    AND eb,ib      Logical-AND immediate byte into EA byte
  33. 20 /r       AND eb,rb      Logical-AND byte register into EA byte
  34. 83 /4 ib    AND ew,ib      Logical-AND immediate byte into EA word
  35. 81 /4 iw    AND ew,iw      Logical-AND immediate word into EA word
  36. 21 /r       AND ew,rw      Logical-AND word register into EA word
  37. 22 /r       AND rb,eb      Logical-AND EA byte into byte register
  38. 23 /r       AND rw,ew      Logical-AND EA word into word register
  39. 63 /r      *ARPL ew,rw     Adjust RPL of EA word not smaller than RPL of rw
  40.  
  41. 62 /r      *BOUND rw,md    INT 5 if rw not between [md] and [md+2] inclusive
  42. 9A cd       CALL cd        Call far segment, immediate 4-byte address
  43. E8 cw       CALL cw        Call near, offset relative to next instruction
  44. FF /3       CALL ed        Call far segment, address at EA doubleword
  45. FF /2       CALL ew        Call near, offset absolute at EA word
  46. 0F FF ib   #CALL80 ib      Call 8080-emulation code at INT number ib
  47. 98          CBW            Convert byte into word (AH = top bit of AL)
  48. F8          CLC            Clear carry flag
  49. FC          CLD            Clear direction flag so SI and DI will increment
  50. FA          CLI            Clear interrupt enable flag; interrupts disabled
  51.                                                               6-9
  52.  
  53. 0F 12/0    #CLRBIT eb,CL   Clear bit CL of eb
  54. 0F 13/0    #CLRBIT ew,CL   Clear bit CL of ew
  55. 0F 1A/0 ib #CLRBIT eb,ib   Clear bit ib of eb
  56. 0F 1B/0 ib #CLRBIT ew,ib   Clear bit ib of ew
  57. 0F 06      *CLTS           Clear task switched flag
  58. F5          CMC            Complement carry flag
  59. 3C ib       CMP AL,ib      Subtract immediate byte from AL for flags only
  60. 3D iw       CMP AX,iw      Subtract immediate word from AX for flags only
  61. 80 /7 ib    CMP eb,ib      Subtract immediate byte from EA byte for flags only
  62. 38 /r       CMP eb,rb      Subtract byte register from EA byte for flags only
  63. 83 /7 ib    CMP ew,ib      Subtract immediate byte from EA word for flags only
  64. 81 /7 iw    CMP ew,iw      Subtract immediate word from EA word for flags only
  65. 39 /r       CMP ew,rw      Subtract word register from EA word for flags only
  66. 3A /r       CMP rb,eb      Subtract EA byte from byte register for flags only
  67. 3B /r       CMP rw,ew      Subtract EA word from word register for flags only
  68.  
  69. 0F 26      #CMP4S          Compare CL nibbles CD at DS:SI from ES:DI (CL even,NZ)
  70. A6          CMPS mb,mb     Compare bytes ES:[DI] from [SI], advance SI and DI
  71. A7          CMPS mw,mw     Compare words ES:[DI] from [SI], advance SI and DI
  72. A6          CMPSB          Compare bytes ES:[DI] from DS:[SI], advance SI and DI
  73. A7          CMPSW          Compare words ES:[DI] from DS:[SI], advance SI and DI
  74. 99          CWD            Convert word to doubleword (DX = top bit of AX)
  75.  
  76. 27          DAA            Decimal adjust AL after addition
  77. 2F          DAS            Decimal adjust AL after subtraction
  78. FE /1       DEC eb         Decrement EA byte by 1
  79. FF /1       DEC ew         Decrement EA word by 1
  80. 48+rw       DEC rw         Decrement word register by 1
  81. F6 /6       DIV eb         Unsigned divide AX by EA byte (AL=Quo AH=Rem)
  82. F7 /6       DIV ew         Unsigned divide DXAX by EA word (AX=Quo DX=Rem)
  83. C8 iw 00   *ENTER iw,0     Make stack frame, iw bytes local storage, 0 levels
  84. C8 iw 01   *ENTER iw,1     Make stack frame, iw bytes local storage, 1 level
  85. C8 iw ib   *ENTER iw,ib    Make stack frame, iw bytes local storage, ib levels
  86.             Fany           Floating point set is in Chapter 7
  87. F4          HLT            Halt
  88.  
  89. F6 /7       IDIV eb        Signed divide AX by EA byte (AL=Quo AH=Rem)
  90. F7 /7       IDIV ew        Signed divide DXAX by EA word (AX=Quo DX=Rem)
  91. F6 /5       IMUL eb        Signed multiply (AX = AL * EA byte)
  92. F7 /5       IMUL ew        Signed multiply (DXAX = AX * EA word)
  93. 6B /r ib   *IMUL rw,ib     Signed multiply immediate byte into word register
  94. 69 /r iw   *IMUL rw,iw     Signed multiply immediate word into word register
  95. 69 /r iw   *IMUL rw,ew,iw  Signed multiply (rw = EA word * immediate word)
  96. 6B /r ib   *IMUL rw,ew,ib  Signed multiply (rw = EA word * immediate byte)
  97.  
  98. E4 ib       IN AL,ib       Input byte from immediate port into AL
  99. EC          IN AL,DX       Input byte from port DX into AL
  100. E5 ib       IN AX,ib       Input word from immediate port into AX
  101. ED          IN AX,DX       Input word from port DX into AX
  102.  
  103. FE /0       INC eb         Increment EA byte by 1
  104. FF /0       INC ew         Increment EA word by 1
  105. 40+rw       INC rw         Increment word register by 1
  106. 6C         *INS eb,DX      Input byte from port DX into [DI]
  107. 6D         *INS ew,DX      Input word from port DX into [DI]
  108. 6C         *INSB           Input byte from port DX into ES:[DI]
  109. 6D         *INSW           Input word from port DX into ES:[DI]
  110.                                                              6-10
  111.  
  112. CC          INT 3          Interrupt 3 (trap to debugger) (far call, with flags
  113. CD ib       INT ib         Interrupt numbered by immediate byte     pushed first)
  114. CE          INTO           Interrupt 4 if overflow flag is 1
  115. CF          IRET           Interrupt return (far return and pop flags)
  116.  
  117. 77 cb       JA cb          Jump short if above (CF=0 and ZF=0)    above=UNSIGNED
  118. 73 cb       JAE cb         Jump short if above or equal (CF=0)
  119. 72 cb       JB cb          Jump short if below (CF=1)             below=UNSIGNED
  120. 76 cb       JBE cb         Jump short if below or equal (CF=1 or ZF=1)
  121. 72 cb       JC cb          Jump short if carry (CF=1)
  122. E3 cb       JCXZ cb        Jump short if CX register is zero
  123. 74 cb       JE cb          Jump short if equal (ZF=1)
  124. 7F cb       JG cb          Jump short if greater (ZF=0 and SF=OF)  greater=SIGNED
  125. 7D cb       JGE cb         Jump short if greater or equal (SF=OF)
  126. 7C cb       JL cb          Jump short if less (SF/=OF)                less=SIGNED
  127. 7E cb       JLE cb         Jump short if less or equal (ZF=1 or SF/=OF)
  128.  
  129. EB cb       JMP cb         Jump short (signed byte relative to next instruction)
  130. EA cd       JMP cd         Jump far (4-byte immediate address)
  131. E9 cw       JMP cw         Jump near (word offset relative to next instruction)
  132. FF /4       JMP ew         Jump near to EA word (absolute offset)
  133. FF /5       JMP md         Jump far (4-byte address in memory doubleword)
  134.  
  135. 76 cb       JNA cb         Jump short if not above (CF=1 or ZF=1)
  136. 72 cb       JNAE cb        Jump short if not above or equal (CF=1)
  137. 73 cb       JNB cb         Jump short if not below (CF=0)
  138. 77 cb       JNBE cb        Jump short if not below or equal (CF=0 and ZF=0)
  139. 73 cb       JNC cb         Jump short if not carry (CF=0)
  140. 75 cb       JNE cb         Jump short if not equal (ZF=0)
  141. 7E cb       JNG cb         Jump short if not greater (ZF=1 or SF/=OF)
  142. 7C cb       JNGE cb        Jump short if not greater or equal (SF/=OF)
  143. 7D cb       JNL cb         Jump short if not less (SF=OF)
  144. 7F cb       JNLE cb        Jump short if not less or equal (ZF=0 and SF=OF)
  145.  
  146. 71 cb       JNO cb         Jump short if not overflow (OF=0)
  147. 7B cb       JNP cb         Jump short if not parity (PF=0)
  148. 79 cb       JNS cb         Jump short if not sign (SF=0)
  149. 75 cb       JNZ cb         Jump short if not zero (ZF=0)
  150. 70 cb       JO cb          Jump short if overflow (OF=1)
  151. 7A cb       JP cb          Jump short if parity (PF=1)
  152. 7A cb       JPE cb         Jump short if parity even (PF=1)
  153. 7B cb       JPO cb         Jump short if parity odd (PF=0)
  154. 78 cb       JS cb          Jump short if sign (SF=1)
  155. 74 cb       JZ cb          Jump short if zero (ZF=1)
  156.  
  157. 9F          LAHF           Load: AH = flags  SF ZF xx AF xx PF xx CF
  158. 0F 02 /r   *LAR rw,ew      Load: high(rw) = Access Rights byte, selector ew
  159. C5 /r       LDS rw,ed      Load EA doubleword into DS and word register
  160. 8D /r       LEA rw,m       Calculate EA offset given by m, place in rw
  161. C9         *LEAVE          Set SP to BP, then POP BP (reverses previous ENTER)
  162. C4 /r       LES rw,ed      Load EA doubleword into ES and word register
  163.  
  164. 0F 01 /2   *LGDT m         Load 6 bytes at m into Global Descriptor Table reg
  165. 0F 01 /3   *LIDT m         Load 6 bytes at m into Interrupt Descriptor Table reg
  166. 0F 00 /2   *LLDT ew        Load selector ew into Local Descriptor Table reg
  167. 0F 01 /6   *LMSW ew        Load EA word into Machine Status Word
  168. F0          LOCK (prefix)  Assert BUSLOCK signal for the next instruction
  169.                                                              6-11
  170.  
  171. 0F 33/r    #LODBITS rb,rb  Load AX with DS:SI,bit rb (incr. SI,rb), rb+1 bits
  172. 0F 3B/0 ib #LODBITS rb,ib  Load AX with DS:SI,bit rb (incr. SI,rb), ib+1 bits
  173. AC          LODS mb        Load byte [SI] into AL, advance SI
  174. AD          LODS mw        Load word [SI] into AX, advance SI
  175. AC          LODSB          Load byte [SI] into AL, advance SI
  176. AD          LODSW          Load word [SI] into AX, advance SI
  177.  
  178. E2 cb       LOOP cb        noflags DEC CX; jump short if CX/=0
  179. E1 cb       LOOPE cb       noflags DEC CX; jump short if CX/=0 and equal (ZF=1)
  180. E0 cb       LOOPNE cb      noflags DEC CX; jump short if CX/=0 and not equal
  181. E0 cb       LOOPNZ cb      noflags DEC CX; jump short if CX/=0 and ZF=0
  182. E1 cb       LOOPZ cb       noflags DEC CX; jump short if CX/=0 and zero (ZF=1)
  183. 0F 03 /r   *LSL rw,ew      Load: rw = Segment Limit, selector ew
  184. 0F 00 /3   *LTR ew         Load EA word into Task Register
  185.  
  186. A0 iw       MOV AL,xb      Move byte variable (offset iw) into AL
  187. A1 iw       MOV AX,xw      Move word variable (offset iw) into AX
  188. 8E /3       MOV DS,mw      Move memory word into DS
  189. 8E /3       MOV DS,rw      Move word register into DS
  190. C6 /0 ib    MOV eb,ib      Move immediate byte into EA byte
  191. 88 /r       MOV eb,rb      Move byte register into EA byte
  192. 8E /0       MOV ES,mw      Move memory word into ES
  193. 8E /0       MOV ES,rw      Move word register into ES
  194.  
  195. 8C /1       MOV ew,CS      Move CS into EA word
  196. 8C /3       MOV ew,DS      Move DS into EA word
  197. C7 /0 iw    MOV ew,iw      Move immediate word into EA word
  198. 8C /0       MOV ew,ES      Move ES into EA word
  199. 89 /r       MOV ew,rw      Move word register into EA word
  200. 8C /2       MOV ew,SS      Move SS into EA word
  201. B0+rb ib    MOV rb,ib      Move immediate byte into byte register
  202. 8A /r       MOV rb,eb      Move EA byte into byte register
  203. B8+rw iw    MOV rw,iw      Move immediate word into word register
  204. 8B /r       MOV rw,ew      Move EA word into word register
  205.  
  206. 8E /2       MOV SS,mw      Move memory word into SS
  207. 8E /2       MOV SS,rw      Move word register into SS
  208. A2 iw       MOV xb,AL      Move AL into byte variable (offset iw)
  209. A3 iw       MOV xw,AX      Move AX into word register (offset iw)
  210. A4          MOVS mb,mb     Move byte [SI] to ES:[DI], advance SI and DI
  211. A5          MOVS mw,mw     Move word [SI] to ES:[DI], advance SI and DI
  212. A4          MOVSB          Move byte DS:[SI] to ES:[DI], advance SI and DI
  213. A5          MOVSW          Move word DS:[SI] to ES:[DI], advance SI and DI
  214.                                                              6-12
  215.  
  216. F6 /4       MUL eb         Unsigned multiply (AX = AL * EA byte)
  217. F7 /4       MUL ew         Unsigned multiply (DXAX = AX * EA word)
  218. F6 /3       NEG eb         Two's complement negate EA byte
  219. F7 /3       NEG ew         Two's complement negate EA word
  220.             NIL (prefix)   Special "do-nothing" opcode assembles no code
  221. 90          NOP            No Operation
  222. F6 /2       NOT eb         Reverse each bit of EA byte
  223. F7 /2       NOT ew         Reverse each bit of EA word
  224. 0F 16/0    #NOTBIT eb,CL   Complement bit CL of eb
  225. 0F 17/0    #NOTBIT ew,CL   Complement bit CL of ew
  226. 0F 1E/0 ib #NOTBIT eb,ib   Complement bit ib of eb
  227. 0F 1F/0 ib #NOTBIT ew,ib   Complement bit ib of ew
  228.  
  229. 0C ib       OR AL,ib       Logical-OR immediate byte into AL
  230. 0D iw       OR AX,iw       Logical-OR immediate word into AX
  231. 80 /1 ib    OR eb,ib       Logical-OR immediate byte into EA byte
  232. 08 /r       OR eb,rb       Logical-OR byte register into EA byte
  233. 83 /1 ib    OR ew,ib       Logical-OR immediate byte into EA word
  234. 81 /1 iw    OR ew,iw       Logical-OR immediate word into EA word
  235. 09 /r       OR ew,rw       Logical-OR word register into EA word
  236. 0A /r       OR rb,eb       Logical-OR EA byte into byte register
  237. 0B /r       OR rw,ew       Logical-OR EA word into word register
  238.  
  239. E6 ib       OUT ib,AL      Output byte AL to immediate port number ib
  240. E7 ib       OUT ib,AX      Output word AX to immediate port number ib
  241. EE          OUT DX,AL      Output byte AL to port number DX
  242. EF          OUT DX,AX      Output word AX to port number DX
  243. 6E         *OUTS DX,eb     Output byte [SI] to port number DX, advance SI
  244. 6F         *OUTS DX,ew     Output word [SI] to port number DX, advance SI
  245. 6E         *OUTSB          Output byte DS:[SI] to port number DX, advance SI
  246. 6F         *OUTSW          Output word DS:[SI] to port number DX, advance SI
  247.  
  248. 1F          POP DS         Set DS to top of stack, increment SP by 2
  249. 07          POP ES         Set ES to top of stack, increment SP by 2
  250. 8F /0       POP mw         Set memory word to top of stack, increment SP by 2
  251. 58+rw       POP rw         Set word register to top of stack, increment SP by 2
  252. 17          POP SS         Set SS to top of stack, increment SP by 2
  253. 61         *POPA           Pop DI,SI,BP,SP,BX,DX,CX,AX (SP value is ignored)
  254. 9D          POPF           Set flags register to top of stack, increment SP by 2
  255.  
  256. 0E          PUSH CS        Set [SP-2] to CS, then decrement SP by 2
  257. 1E          PUSH DS        Set [SP-2] to DS, then decrement SP by 2
  258. 06          PUSH ES        Set [SP-2] to ES, then decrement SP by 2
  259. 6A ib      *PUSH ib        Push sign-extended immediate byte
  260. 68 iw      *PUSH iw        Set [SP-2] to immediate word, then decrement SP by 2
  261. FF /6       PUSH mw        Set [SP-2] to memory word, then decrement SP by 2
  262. 50+rw       PUSH rw        Set [SP-2] to word register, then decrement SP by 2
  263. 16          PUSH SS        Set [SP-2] to SS, then decrement SP by 2
  264. 60         *PUSHA          Push AX,CX,DX,BX,original SP,BP,SI,DI
  265. 9C          PUSHF          Set [SP-2] to flags register, then decrement SP by 2
  266.  
  267. D0 /2       RCL eb,1       Rotate 9-bit quantity (CF, EA byte) left once
  268. D2 /2       RCL eb,CL      Rotate 9-bit quantity (CF, EA byte) left CL times
  269. C0 /2 ib   *RCL eb,ib      Rotate 9-bit quantity (CF, EA byte) left ib times
  270. D1 /2       RCL ew,1       Rotate 17-bit quantity (CF, EA word) left once
  271. D3 /2       RCL ew,CL      Rotate 17-bit quantity (CF, EA word) left CL times
  272. C1 /2 ib   *RCL ew,ib      Rotate 17-bit quantity (CF, EA word) left ib times
  273.                                                              6-13
  274.  
  275. D0 /3       RCR eb,1       Rotate 9-bit quantity (CF, EA byte) right once
  276. D2 /3       RCR eb,CL      Rotate 9-bit quantity (CF, EA byte) right CL times
  277. C0 /3 ib   *RCR eb,ib      Rotate 9-bit quantity (CF, EA byte) right ib times
  278. D1 /3       RCR ew,1       Rotate 17-bit quantity (CF, EA word) right once
  279. D3 /3       RCR ew,CL      Rotate 17-bit quantity (CF, EA word) right CL times
  280. C1 /3 ib   *RCR ew,ib      Rotate 17-bit quantity (CF, EA word) right ib times
  281.  
  282. F3          REP (prefix)   Repeat following MOVS,LODS,STOS,INS, or OUTS CX times
  283. 65         #REPC (prefix)  Repeat following CMPS or SCAS CX times or until CF=0
  284. F3          REPE (prefix)  Repeat following CMPS or SCAS CX times or until ZF=0
  285. 64         #REPNC (prfix)  Repeat following CMPS or SCAS CX times or until CF=1
  286. F2          REPNE (prfix)  Repeat following CMPS or SCAS CX times or until ZF=1
  287. F2          REPNZ (prfix)  Repeat following CMPS or SCAS CX times or until ZF=1
  288. F3          REPZ (prefix)  Repeat following CMPS or SCAS CX times or until ZF=0
  289.  
  290. CB          RETF           Return to far caller (pop offset, then seg)
  291. C3          RET            Return to near caller (pop offset only)
  292. CA iw       RETF iw        RET (far), pop offset, seg, iw bytes
  293. C2 iw       RET iw         RET (near), pop offset, iw bytes pushed before Call
  294.  
  295. D0 /0       ROL eb,1       Rotate 8-bit EA byte left once
  296. D2 /0       ROL eb,CL      Rotate 8-bit EA byte left CL times
  297. C0 /0 ib   *ROL eb,ib      Rotate 8-bit EA byte left ib times
  298. D1 /0       ROL ew,1       Rotate 16-bit EA word left once
  299. D3 /0       ROL ew,CL      Rotate 16-bit EA word left CL times
  300. C1 /0 ib   *ROL ew,ib      Rotate 16-bit EA word left ib times
  301. 0F 28/0    #ROL4 eb        Rotate nibbles: Heb=Leb   HAL,Leb=LAL  LAL=Heb
  302.  
  303. D0 /1       ROR eb,1       Rotate 8-bit EA byte right once
  304. D2 /1       ROR eb,CL      Rotate 8-bit EA byte right CL times
  305. C0 /1 ib   *ROR eb,ib      Rotate 8-bit EA byte right ib times
  306. D1 /1       ROR ew,1       Rotate 16-bit EA word right once
  307. D3 /1       ROR ew,CL      Rotate 16-bit EA word right CL times
  308. C1 /1 ib   *ROR ew,ib      Rotate 16-bit EA word right ib times
  309. 0F 2A/0    #ROR4 eb        Rotate nibbles: Leb=Heb   Heb=LAL  AL=eb
  310.  
  311. 9E          SAHF           Store AH into flags  SF ZF xx AF xx PF xx CF
  312. D0 /4       SAL eb,1       Multiply EA byte by 2, once
  313. D2 /4       SAL eb,CL      Multiply EA byte by 2, CL times
  314. C0 /4 ib   *SAL eb,ib      Multiply EA byte by 2, ib times
  315. D1 /4       SAL ew,1       Multiply EA word by 2, once
  316. D3 /4       SAL ew,CL      Multiply EA word by 2, CL times
  317. C1 /4 ib   *SAL ew,ib      Multiply EA word by 2, ib times
  318.  
  319. D0 /7       SAR eb,1       Signed divide EA byte by 2, once
  320. D2 /7       SAR eb,CL      Signed divide EA byte by 2, CL times
  321. C0 /7 ib   *SAR eb,ib      Signed divide EA byte by 2, ib times
  322. D1 /7       SAR ew,1       Signed divide EA word by 2, once
  323. D3 /7       SAR ew,CL      Signed divide EA word by 2, CL times
  324. C1 /7 ib   *SAR ew,ib      Signed divide EA word by 2, ib times
  325.                                                              6-14
  326.  
  327. 1C ib       SBB AL,ib      Subtract with borrow immediate byte from AL
  328. 1D iw       SBB AX,iw      Subtract with borrow immediate word from AX
  329. 80 /3 ib    SBB eb,ib      Subtract with borrow immediate byte from EA byte
  330. 18 /r       SBB eb,rb      Subtract with borrow byte register from EA byte
  331. 83 /3 ib    SBB ew,ib      Subtract with borrow immediate byte from EA word
  332. 81 /3 iw    SBB ew,iw      Subtract with borrow immediate word from EA word
  333. 19 /r       SBB ew,rw      Subtract with borrow word register from EA word
  334. 1A /r       SBB rb,eb      Subtract with borrow EA byte from byte register
  335. 1B /r       SBB rw,ew      Subtract with borrow EA word from word register
  336.  
  337. AE          SCAS mb        Compare bytes AL - ES:[DI], advance DI
  338. AF          SCAS mw        Compare words AL - ES:[DI], advance DI
  339. AE          SCASB          Compare bytes AX - ES:[DI], advance DI
  340. AF          SCASW          Compare words AX - ES:[DI], advance DI
  341.  
  342. 0F 14/0    #SETBIT eb,CL   Set bit CL of eb
  343. 0F 15/0    #SETBIT ew,CL   Set bit CL of ew
  344. 0F 1C/0 ib #SETBIT eb,ib   Set bit ib of eb
  345. 0F 1D/0 ib #SETBIT ew,ib   Set bit ib of ew
  346. 0F 01 /0   *SGDT m         Store 6-byte Global Descriptor Table register to M
  347.  
  348. D0 /4       SHL eb,1       Multiply EA byte by 2, once
  349. D2 /4       SHL eb,CL      Multiply EA byte by 2, CL times
  350. C0 /4 ib   *SHL eb,ib      Multiply EA byte by 2, ib times
  351. D1 /4       SHL ew,1       Multiply EA word by 2, once
  352. D3 /4       SHL ew,CL      Multiply EA word by 2, CL times
  353. C1 /4 ib   *SHL ew,ib      Multiply EA word by 2, ib times
  354. D0 /5       SHR eb,1       Unsigned divide EA byte by 2, once
  355. D2 /5       SHR eb,CL      Unsigned divide EA byte by 2, CL times
  356. C0 /5 ib   *SHR eb,ib      Unsigned divide EA byte by 2, ib times
  357. D1 /5       SHR ew,1       Unsigned divide EA word by 2, once
  358. D3 /5       SHR ew,CL      Unsigned divide EA word by 2, CL times
  359. C1 /5 ib   *SHR ew,ib      Unsigned divide EA word by 2, ib times
  360.  
  361. 0F 01 /1   *SIDT m         Store 6-byte Interrupt Descriptor Table register to M
  362. 0F 00 /0   *SLDT ew        Store Local Descriptor Table register to EA word
  363. 0F 01 /4   *SMSW ew        Store Machine Status Word to EA word
  364. F9          STC            Set carry flag
  365. FD          STD            Set direction flag so SI and DI will decrement
  366. FB          STI            Set interrupt enable flag, interrupts enabled
  367.  
  368. 0F 31/r    #STOBITS rb,rb  Store AX to ES:DI,bit rb (incr. DI,rb), rb+1 bits
  369. 0F 39/0 ib #STOBITS rb,ib  Store AX to ES:DI,bit rb (incr. DI,rb), ib+1 bits
  370. AA          STOS mb        Store AL to byte [DI], advance DI
  371. AB          STOS mw        Store AX to word [DI], advance DI
  372. AA          STOSB          Store AL to byte ES:[DI], advance DI
  373. AB          STOSW          Store AX to word ES:[DI], advance DI
  374. 0F 00 /1   *STR ew         Store Task Register to EA word
  375.                                                              6-15
  376.  
  377. 2C ib       SUB AL,ib      Subtract immediate byte from AL
  378. 2D iw       SUB AX,iw      Subtract immediate word from AX
  379. 80 /5 ib    SUB eb,ib      Subtract immediate byte from EA byte
  380. 28 /r       SUB eb,rb      Subtract byte register from EA byte
  381. 83 /5 ib    SUB ew,ib      Subtract immediate byte from EA word
  382. 81 /5 iw    SUB ew,iw      Subtract immediate word from EA word
  383. 29 /r       SUB ew,rw      Subtract word register from EA word
  384. 2A /r       SUB rb,eb      Subtract EA byte from byte register
  385. 2B /r       SUB rw,ew      Subtract EA word from word register
  386. 0F 22      #SUB4S          Sub CL nibbles BCD at DS:SI from ES:DI (CL even,NZ)
  387.  
  388. A8 ib       TEST AL,ib     AND immediate byte into AL for flags only
  389. A9 iw       TEST AX,iw     AND immediate word into AX for flags only
  390. F6 /0 ib    TEST eb,ib     AND immediate byte into EA byte for flags only
  391. 84 /r       TEST eb,rb     AND byte register into EA byte for flags only
  392. F7 /0 iw    TEST ew,iw     AND immediate word into EA word for flags only
  393. 85 /r       TEST ew,rw     AND word register into EA word for flags only
  394. 84 /r       TEST rb,eb     AND EA byte into byte register for flags only
  395. 85 /r       TEST rw,ew     AND EA word into word register for flags only
  396.  
  397. 0F 10/0    #TESTBIT eb,CL  Test bit CL of eb, set Z flag
  398. 0F 11/0    #TESTBIT ew,CL  Test bit CL of ew, set Z flag
  399. 0F 18/0 ib #TESTBIT eb,ib  Test bit ib of eb, set Z flag
  400. 0F 19/0 ib #TESTBIT ew,ib  Test bit ib of ew, set Z flag
  401. 9B          WAIT           Wait until BUSY pin is inactive (HIGH)
  402. 0F 00 /4   *VERR ew        Set ZF=1 if segment can be read, selector ew
  403. 0F 00 /5   *VERW ew        Set ZF=1 if segment can be written to, selector ew
  404.  
  405. 9r          XCHG AX,rw     Exchange word register with AX
  406. 86 /r       XCHG eb,rb     Exchange byte register with EA byte
  407. 87 /r       XCHG ew,rw     Exchange word register with EA word
  408. 86 /r       XCHG rb,eb     Exchange EA byte with byte register
  409. 9r          XCHG rw,AX     Exchange  with word register
  410. 87 /r       XCHG rw,ew     Exchange EA word with word register
  411.  
  412. D7          XLAT mb        Set AL to memory byte [BX + unsigned AL]
  413. D7          XLATB          Set AL to memory byte DS:[BX + unsigned AL]
  414. 34 ib       XOR AL,ib      Exclusive-OR immediate byte into AL
  415. 35 iw       XOR AX,iw      Exclusive-OR immediate word into AX
  416. 80 /6 ib    XOR eb,ib      Exclusive-OR immediate byte into EA byte
  417. 30 /r       XOR eb,rb      Exclusive-OR byte register into EA byte
  418. 83 /6 ib    XOR ew,ib      Exclusive-OR immediate byte into EA word
  419. 81 /6 iw    XOR ew,iw      Exclusive-OR immediate word into EA word
  420. 31 /r       XOR ew,rw      Exclusive-OR word register into EA word
  421. 32 /r       XOR rb,eb      Exclusive-OR EA byte into byte register
  422. 33 /r       XOR rw,ew      Exclusive-OR EA word into word register
  423.  
  424. *  Starred forms will not execute on 8086/8088!  See note at top of chart.
  425. #  These instructions work only on NEC chips!  See note at top of chart.
  426.  
  427.