home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 December / PCWorld_2001-12_cd.bin / Software / Topware / Hackman / _SETUP.1 / ModuleA.dat < prev    next >
Text File  |  1998-09-12  |  17KB  |  274 lines

  1. <AAA>
  2. [1]
  3. "AAA: ASCII Adjust After Addition"
  4. ""
  5. "Adjusts the sum of two unpacked BCD values to create an unpacked BCD result. The AL register is the implied source and destination operand for this instruction. The AAA instruction is only useful when it follows an ADD instruction that adds (binary addition) two unpacked BCD values and stores a byte result in the AL register. The AAA instruction then adjusts the contents of the AL register to contain the correct 1-digit unpacked BCD result."
  6. "If the addition produces a decimal carry the AH register is incremented by 1 and the CF and AF flags are set. If there was no decimal carry the CF and AF flags are cleared and the AH register is unchanged. In either case bits 4 through 7 of the AL register are cleared to 0."
  7. [2]
  8. "IF ((AL AND 0FH) > 9) OR (AF = 1)"
  9. "THEN"
  10. "AL ¼ (AL + 6);"
  11. "AH ¼ AH + 1;"
  12. "AF ¼ 1;"
  13. "CF ¼ 1;"
  14. "ELSE"
  15. "AF ¼ 0;"
  16. "CF ¼ 0;"
  17. "FI,"
  18. "AL ¼ AL AND 0FH;"
  19. [3]
  20. "The AF and CF flags are set to 1 if the adjustment results in a decimal carry; otherwise they are cleared to 0. The OF - SF - ZF and PF flags are undefined."
  21. [4]
  22. "(All Operating Modes)"
  23. "None."
  24. [5]
  25. "37 AAA ASCII adjust AL after addition"
  26. [6]
  27. </AAA>
  28. <AAD>
  29. [1]
  30. "AAD: ASCII Adjust AX Before Division"
  31. ""
  32. "Adjusts two unpacked BCD digits (the least-significant digit in the AL register and the most-significant digit in the AH register) so that a division operation performed on the result will yield a correct unpacked BCD value. The AAD instruction is only useful when it precedes a DIV instruction that divides (binary division) the adjusted value in the AX register by an unpacked BCD value."
  33. "The AAD instruction sets the value in the AL register to (AL + (10 * AH)), and then clears the AH register to 00H. The value in the AX register is then equal to the binary equivalent of the original unpacked two-digit (base 10) number in registers AH and AL."
  34. "The generalized version of this instruction allows adjustment of two unpacked digits of any number base (see the 'Operation' section), by setting the imm8 byte to the selected number base (for example, 08H for octal, 0AH for decimal, or 0CH for base 12 numbers). The AAD mnemonic is interpreted by all assemblers to mean adjust ASCII (base 10) values. To adjust values in another number base, the instruction must be hand coded in machine code (D5 imm8)."
  35. [2]
  36. "tempAL ¼ AL;"
  37. "tempAH ¼ AH;"
  38. "AL ¼ (tempAL + (tempAH * imm8)) AND FFH; (* imm8 is set to 0AH for the AAD mnemonic *)"
  39. "AH ¼ 0"
  40. ""
  41. "The immediate value (imm8) is taken from the second byte of the instruction."
  42. [3]
  43. "The SF, ZF, and PF flags are set according to the result; the OF, AF, and CF flags are undefined."
  44. [4]
  45. "(All Operating Modes)"
  46. "None."
  47. [5]
  48. "D5 0A AAD ASCII adjust AX before division"
  49. "D5 ib (No mnemonic) Adjust AX before division to number base imm8"
  50. [6]
  51. </AAD>
  52. <AAM>
  53. [1]
  54. "AAM: ASCII Adjust AX After Multiply"
  55. ""
  56. "Adjusts the result of the multiplication of two unpacked BCD values to create a pair of unpacked (base 10) BCD values. The AX register is the implied source and destination operand for this instruction. The AAM instruction is only useful when it follows an MUL instruction that multi-plies (binary multiplication) two unpacked BCD values and stores a word result in the AX register. The AAM instruction then adjusts the contents of the AX register to contain the correct 2-digit unpacked (base 10) BCD result."
  57. "The generalized version of this instruction allows adjustment of the contents of the AX to create two unpacked digits of any number base (see the 'Operation' section). Here, the imm8 byte is set to the selected number base (for example, 08H for octal, 0AH for decimal, or 0CH for base 12 numbers). The AAM mnemonic is interpreted by all assemblers to mean adjust to ASCII (base 10) values. To adjust to values in another number base, the instruction must be hand coded in machine code (D4 imm8)."
  58. [2]
  59. "tempAL ¼ AL;"
  60. "AH ¼ tempAL / imm8; (* imm8 is set to 0AH for the AAD mnemonic *)"
  61. "AL ¼ tempAL MOD imm8;"
  62. ""
  63. "The immediate value (imm8) is taken from the second byte of the instruction."
  64. [3]
  65. "The SF, ZF, and PF flags are set according to the result. The OF, AF, and CF flags are undefined."
  66. [4]
  67. "(All Operating Modes)"
  68. "None with the default immediate value of 0AH. If, however, an immediate value of 0 is used, it will cause a #DE (divide error) exception."
  69. [5]
  70. "D4 0A AAM ASCII adjust AX after multiply"
  71. "D4 ib (No mnemonic) Adjust AX after multiply to number base imm8"
  72. [6]
  73. </AAM>
  74. <AAS>
  75. [1]
  76. "AAS: ASCII Adjust AL After Subtraction"
  77. ""
  78. "Adjusts the result of the subtraction of two unpacked BCD values to create a unpacked BCD result. The AL register is the implied source and destination operand for this instruction. The AAS instruction is only useful when it follows a SUB instruction that subtracts (binary subtrac-tion) one unpacked BCD value from another and stores a byte result in the AL register. The AAA instruction then adjusts the contents of the AL register to contain the correct 1-digit unpacked BCD result."
  79. "If the subtraction produced a decimal carry, the AH register is decremented by 1, and the CF and AF flags are set. If no decimal carry occurred, the CF and AF flags are cleared, and the AH register is unchanged. In either case, the AL register is left with its top nibble set to 0."
  80. [2]
  81. "IF ((AL AND 0FH) > 9) OR (AF = 1)"
  82. "THEN"
  83. "AL ¼ AL ' 6;"
  84. "AH ¼ AH ' 1;"
  85. "AF ¼ 1;"
  86. "CF ¼ 1;"
  87. "ELSE"
  88. "CF ¼ 0;"
  89. "AF ¼ 0;"
  90. "FI;"
  91. "AL ¼ AL AND 0FH;"
  92. [3]
  93. "The AF and CF flags are set to 1 if there is a decimal borrow; otherwise, they are cleared to 0. The OF, SF, ZF, and PF flags are undefined."
  94. [4]
  95. "(All Operating Modes)"
  96. "None."
  97. [5]
  98. "3F AAS ASCII adjust AL after subtraction"
  99. [6]
  100. </AAS>
  101. <ADC>
  102. [1]
  103. "ADC: Add with Carry"
  104. ""
  105. "Adds the destination operand (first operand), the source operand (second operand), and the carry (CF) flag and stores the result in the destination operand. The destination operand can be a register or a memory location; the source operand can be an immediate, a register, or a memory location. (However, two memory operands cannot be used in one instruction.) The state of the CF flag represents a carry from a previous addition. When an immediate value is used as an operand, it is sign-extended to the length of the destination operand format."
  106. "The ADC instruction does not distinguish between signed or unsigned operands. Instead, the processor evaluates the result for both data types and sets the OF and CF flags to indicate a carry in the signed or unsigned result, respectively. The SF flag indicates the sign of the signed result."
  107. "The ADC instruction is usually executed as part of a multibyte or multiword addition in which an ADD instruction is followed by an ADC instruction."
  108. [2]
  109. "DEST ¼ DEST + SRC + CF;"
  110. [3]
  111. "The OF, SF, ZF, AF, CF, and PF flags are set according to the result."
  112. [4]
  113. "Protected Mode Exceptions"
  114. ""
  115. "#GP(0) If the destination is located in a nonwritable segment. If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. If the DS, ES, FS, or GS register is used to access memory and it contains a null segment selector."
  116. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  117. "#PF(fault-code) If a page fault occurs."
  118. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3."
  119. ""
  120. "Real-Address Mode Exceptions"
  121. ""
  122. "#GP If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  123. "#SS If a memory operand effective address is outside the SS segment limit."
  124. ""
  125. "Virtual-8086 Mode Exceptions"
  126. ""
  127. "#GP(0) If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  128. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  129. "#PF(fault-code) If a page fault occurs."
  130. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made."
  131. [5]
  132. "14 ib ADC AL, imm8 Add with carry imm8 to AL"
  133. "15 iw ADC AX, imm16 Add with carry imm16 to AX"
  134. "15 id ADC EAX, imm32 Add with carry imm32 to EAX"
  135. "80 /2 ib ADC r/m8, imm8 Add with carry imm8 to r/m8"
  136. "81 /2 iw ADC r/m16,imm16 Add with carry imm16 to r/m16"
  137. "81 /2 id ADC r/m32,imm32 Add with CF imm32 to r/m32"
  138. "83 /2 ib ADC r/m16,imm8 Add with CF sign-extended imm8 to r/m16"
  139. "83 /2 ib ADC r/m32,imm8 Add with CF sign-extended imm8 into r/m32"
  140. "10 / r ADC r/m8,r8 Add with carry byte register to r/m8"
  141. "11 / r ADC r/m16,r16 Add with carry r16 to r/m16"
  142. "11 / r ADC r/m32,r32 Add with CF r32 to r/m32"
  143. "12 / r ADC r8,r/m8 Add with carry r/m8 to byte register"
  144. "13 / r ADC r16,r/m16 Add with carry r/m16 to r16"
  145. "13 / r ADC r32,r/m32 Add with CF r/m32 to r32"
  146. [6]
  147. </ADC>
  148. <ADD>
  149. [1]
  150. "ADD: Add"
  151. ""
  152. "Adds the first operand (destination operand) and the second operand (source operand) and stores the result in the destination operand. The destination operand can be a register or a memory location; the source operand can be an immediate, a register, or a memory location. (However, two memory operands cannot be used in one instruction.) When an immediate value is used as an operand, it is sign-extended to the length of the destination operand format."
  153. "The ADD instruction does not distinguish between signed or unsigned operands. Instead, the processor evaluates the result for both data types and sets the OF and CF flags to indicate a carry in the signed or unsigned result, respectively. The SF flag indicates the sign of the signed result."
  154. [2]
  155. "DEST ¼ DEST + SRC;"
  156. [3]
  157. "The OF, SF, ZF, AF, CF, and PF flags are set according to the result."
  158. [4]
  159. "Protected Mode Exceptions"
  160. ""
  161. "#GP(0) If the destination is located in a nonwritable segment. If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. If the DS, ES, FS, or GS register is used to access memory and it contains a null segment selector."
  162. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  163. "#PF(fault-code) If a page fault occurs."
  164. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3."
  165. ""
  166. "Real-Address Mode Exceptions"
  167. ""
  168. "#GP If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  169. "#SS If a memory operand effective address is outside the SS segment limit."
  170. ""
  171. "Virtual-8086 Mode Exceptions"
  172. ""
  173. "#GP(0) If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  174. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  175. "#PF(fault-code) If a page fault occurs."
  176. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made."
  177. [5]
  178. "04 ib ADD AL, imm8 Add imm8 to AL"
  179. "05 iw ADD AX, imm16 Add imm16 to AX"
  180. "05 id ADD EAX, imm32 Add imm32 to EAX"
  181. "80 /0 ib ADD r/m8,imm8 Add imm8 to r/m8"
  182. "81 /0 iw ADD r/m16,imm16 Add imm16 to r/m16"
  183. "81 /0 id ADD r/m32,imm32 Add imm32 to r/m32"
  184. "83 /0 ib ADD r/m16,imm8 Add sign-extended imm8 to r/m16"
  185. "83 /0 ib ADD r/m32,imm8 Add sign-extended imm8 to r/m32"
  186. "00 / r ADD r/m8,r8 Add r8 to r/m8"
  187. "01 / r ADD r/m16,r16 Add r16 to r/m16"
  188. "01 / r ADD r/m32,r32 Add r32 to r/m32"
  189. "02 / r ADD r8,r/m8 Add r/m8 to r8"
  190. "03 / r ADD r16,r/m16 Add r/m16 to r16"
  191. "03 / r ADD r32,r/m32 Add r/m32 to r32"
  192. [6]
  193. </ADD>
  194. <AND>
  195. [1]
  196. "AND: Logical AND"
  197. ""
  198. "Performs a bitwise AND operation on the destination (first) and source (second) operands and stores the result in the destination operand location. The source operand can be an immediate, a register, or a memory location; the destination operand can be a register or a memory location. (However, two memory operands cannot be used in one instruction.) Each bit of the result of the AND instruction is a 1 if both corresponding bits of the operands are 1; otherwise, it becomes a 0."
  199. [2]
  200. "DEST ¼ DEST AND SRC;"
  201. [3]
  202. "The OF and CF flags are cleared; the SF, ZF, and PF flags are set according to the result. The state of the AF flag is undefined."
  203. [4]
  204. "Protected Mode Exceptions"
  205. ""
  206. "#GP(0) If the destination operand points to a nonwritable segment. If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. If the DS, ES, FS, or GS register contains a null segment selector."
  207. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  208. "#PF(fault-code) If a page fault occurs."
  209. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3."
  210. ""
  211. "Real-Address Mode Exceptions"
  212. ""
  213. "#GP If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  214. "#SS If a memory operand effective address is outside the SS segment limit."
  215. ""
  216. "Virtual-8086 Mode Exceptions"
  217. ""
  218. "#GP(0) If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  219. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  220. "#PF(fault-code) If a page fault occurs."
  221. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made."
  222. [5]
  223. "24 ib AND AL, imm8 AL AND imm8"
  224. "25 iw AND AX, imm16 AX AND i mm16"
  225. "25 id AND EAX, imm32 EAX AND imm32"
  226. "80 /4 ib AND r/m8,imm8 r/m8 AND imm8"
  227. "81 /4 iw AND r/m16,imm16 r/m16 AND imm16"
  228. "81 /4 id AND r/m32,imm32 r/m32 AND imm32"
  229. "83 /4 ib AND r/m16,imm8 r/m16 AND imm8 (sign-extended)"
  230. "83 /4 ib AND r/m32,imm8 r/m32 AND imm8 (sign-extended)"
  231. "20 /r AND r/m8,r8 r/m8 AND r8"
  232. "21 / r AND r/m16,r16 r/m16 AND r16"
  233. "21 / r AND r/m32,r32 r/m32 AND r32"
  234. "22 / r AND r8,r/m8 r8 AND r/m8"
  235. "23 / r AND r16,r/m16 r16 AND r/m16"
  236. "23 / r AND r32,r/m32 r32 AND r/m32"
  237. [6]
  238. </AND>
  239. <ARPL>
  240. [1]
  241. "ARPL: Adjust RPL Field of Segment Selector"
  242. ""
  243. "Compares the RPL fields of two segment selectors. The first operand (the destination operand) contains one segment selector and the second operand (source operand) contains the other. (The RPL field is located in bits 0 and 1 of each operand.) If the RPL field of the destination operand is less than the RPL field of the source operand, the ZF flag is set and the RPL field of the destination operand is increased to match that of the source operand. Otherwise, the ZF flag is cleared and no change is made to the destination operand. (The destination operand can be a word register or a memory location; the source operand must be a word register.)"
  244. "The ARPL instruction is provided for use by operating-system procedures (however, it can also be used by applications). It is generally used to adjust the RPL of a segment selector that has been passed to the operating system by an application program to match the privilege level of the application program. Here the segment selector passed to the operating system is placed in the destination operand and segment selector for the application program's code segment is placed in the source operand. (The RPL field in the source operand represents the privilege level of the application program.) Execution of the ARPL instruction then insures that the RPL of the segment selector received by the operating system is no lower (does not have a higher privilege) than the privilege level of the application program. (The segment selector for the application program's code segment can be read from the stack following a procedure call.)"
  245. [2]
  246. "IF DEST(RPL) < SRC(RPL)"
  247. "THEN"
  248. "ZF ¼ 1;"
  249. "DEST(RPL) ¼ SRC(RPL);"
  250. "ELSE"
  251. "ZF ¼ 0;"
  252. "FI;"
  253. [3]
  254. "The ZF flag is set to 1 if the RPL field of the destination operand is less than that of the source operand; otherwise, is cleared to 0."
  255. [4]
  256. "Protected Mode Exceptions"
  257. ""
  258. "#GP(0) If the destination is located in a nonwritable segment. If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. If the DS, ES, FS, or GS register is used to access memory and it contains a null segment selector."
  259. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  260. "#PF(fault-code) If a page fault occurs."
  261. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3."
  262. ""
  263. "Real-Address Mode Exceptions"
  264. ""
  265. "#UD The ARPL instruction is not recognized in real-address mode."
  266. ""
  267. "Virtual-8086 Mode Exceptions"
  268. ""
  269. "#UD The ARPL instruction is not recognized in virtual-8086 mode."
  270. [5]
  271. "63 / r ARPL r/m16,r16 Adjust RPL of r/m16 to not less than RPL of r16"
  272. [6]
  273. </ARPL>
  274.