home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 July & August / PCWorld_2002-07-08_cd.bin / Software / Topware / hackman / _SETUP.1 / ModuleD.dat < prev    next >
Text File  |  1998-10-03  |  8KB  |  204 lines

  1. <DAA>
  2. [1]
  3. "DAA: Decimal Adjust AL after Addition"
  4. ""
  5. "Adjusts the sum of two packed BCD values to create a packed BCD result. The AL register is the implied source and destination operand. The DAA instruction is only useful when it follows an ADD instruction that adds (binary addition) two 2-digit, packed BCD values and stores a byte result in the AL register. The DAA instruction then adjusts the contents of the AL register to contain the correct 2-digit, packed BCD result. If a decimal carry is detected, the CF and AF flags are set accordingly."
  6. [2]
  7. "IF (((AL AND 0FH) > 9) or AF = 1)"
  8. "THEN"
  9. "AL ¼ AL + 6;"
  10. "CF ¼ CF OR CarryFromLastAddition; (* CF OR carry from AL ¼ AL + 6 *)"
  11. "AF ¼ 1;"
  12. "ELSE"
  13. "AF ¼ 0;"
  14. "FI;"
  15. "IF ((AL AND F0H) > 90H) or CF = 1)"
  16. "THEN"
  17. "AL ¼ AL + 60H;"
  18. "CF ¼ 1;"
  19. "ELSE"
  20. "CF ¼ 0;"
  21. "FI;"
  22. ""
  23. "Example"
  24. ""
  25. "ADD AL, BL"
  26. "Before: AL=79H BL=35H EFLAGS(OSZAPC)=XXXXXX"
  27. "After: AL=AEH BL=35H EFLAGS(0SZAPC)=110000"
  28. ""
  29. "DAA"
  30. "Before: AL=AEH BL=35H EFLAGS(OSZAPC)=110000"
  31. "After: AL=14H BL=35H EFLAGS(0SZAPC)=X00111"
  32. [3]
  33. "The CF and AF flags are set if the adjustment of the value results in a decimal carry in either digit of the result. The SF, ZF, and PF flags are set according to the result. The OF flag is undefined."
  34. [4]
  35. "(All Operating Modes)"
  36. "None."
  37. [5]
  38. "27 DAA Decimal adjust AL after addition"
  39. [6]
  40. </DAA>
  41. <DAS>
  42. [1]
  43. "DAS: Decimal Adjust AL after Subtraction"
  44. ""
  45. "Adjusts the result of the subtraction of two packed BCD values to create a packed BCD result. The AL register is the implied source and destination operand. The DAS instruction is only useful when it follows a SUB instruction that subtracts (binary subtraction) one 2-digit, packed BCD value from another and stores a byte result in the AL register. The DAS instruction then adjusts the contents of the AL register to contain the correct 2-digit, packed BCD result. If a decimal borrow is detected, the CF and AF flags are set accordingly."
  46. [2]
  47. "IF (AL AND 0FH) > 9 OR AF = 1"
  48. "THEN"
  49. "AL ¼ AL - 6;"
  50. "CF ¼ CF OR BorrowFromLastSubtraction; (* CF OR borrow from AL ¼ AL - 6 *)"
  51. "AF ¼ 1;"
  52. "ELSE AF ¼ 0;"
  53. "FI;"
  54. "IF ((AL > 9FH) or CF = 1)"
  55. "THEN"
  56. "AL ¼ AL - 60H;"
  57. "CF ¼ 1;"
  58. "ELSE CF ¼ 0;"
  59. "FI;"
  60. ""
  61. "Example"
  62. ""
  63. "SUB AL, BL"
  64. "Before: AL=35H BL=47H EFLAGS(OSZAPC)=XXXXXX"
  65. "After: AL=EEH BL=47H EFLAGS(0SZAPC)=010111"
  66. ""
  67. "DAS"
  68. "Before: AL=EEH BL=47H EFLAGS(OSZAPC)=010111"
  69. "After: AL=88H BL=47H EFLAGS(0SZAPC)=X10111"
  70. [3]
  71. "The CF and AF flags are set if the adjustment of the value results in a decimal borrow in either digit of the result. The SF, ZF, and PF flags are set according to the result. The OF flag is undefined."
  72. [4]
  73. "(All Operating Modes)"
  74. "None."
  75. [5]
  76. "2F DAS Decimal adjust AL after subtraction"
  77. [6]
  78. </DAS>
  79. <DEC>
  80. [1]
  81. "DEC: Decrement by 1"
  82. ""
  83. "Subtracts 1 from the destination operand, while preserving the state of the CF flag. The destination operand can be a register or a memory location. This instruction allows a loop counter to be updated without disturbing the CF flag. To perform a decrement operation that updates the CF flag, use a SUB instruction with an immediate operand of 1.)"
  84. [2]
  85. "DEST ¼ DEST û 1;"
  86. [3]
  87. "The CF flag is not affected. The OF, SF, ZF, AF, and PF flags are set according to the result."
  88. [4]
  89. "Protected Mode Exceptions"
  90. ""
  91. "#GP(0) If the destination operand 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 contains a null segment selector."
  92. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  93. "#PF(fault-code) If a page fault occurs."
  94. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3."
  95. ""
  96. "Real-Address Mode Exceptions"
  97. ""
  98. "#GP If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  99. "#SS If a memory operand effective address is outside the SS segment limit."
  100. ""
  101. "Virtual-8086 Mode Exceptions"
  102. ""
  103. "#GP(0) If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  104. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  105. "#PF(fault-code) If a page fault occurs."
  106. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made."
  107. [5]
  108. "FE /1 DEC r/m8 Decrement r/m8 by 1"
  109. "FF /1 DEC r/m16 Decrement r/m16 by 1"
  110. "FF /1 DEC r/m32 Decrement r/m32 by 1"
  111. "48+rw DEC r16 Decrement r16 by 1"
  112. "48+rd DEC r32 Decrement r32 by 1"
  113. [6]
  114. </DEC>
  115. <DIV>
  116. [1]
  117. "DIV: Unsigned Divide"
  118. ""
  119. "Divides (unsigned) the value in the AX register, DX:AX register pair, or EDX:EAX register pair (dividend) by the source operand (divisor) and stores the result in the AX (AH:AL), DX:AX, or EDX:EAX registers. The source operand can be a general-purpose register or a memory location."
  120. "The action of this instruction depends on the operand size, as shown in the following table:"
  121. ""
  122. "Operand Size      Dividend Divisor Quotient Remainder [Maximum Quotient]"
  123. "------------------------------------------------------------------------"
  124. "Word/byte            AX      r/m8     AL      AH             255"
  125. "Doubleword/word     DX:AX    r/m16    AX      DX           65,535"
  126. "Quadword/doubleword EDX:EAX  r/m32    EAX     EDX           2^32 - 1"
  127. ""
  128. "Non-integral results are truncated (chopped) towards 0. The remainder is always less than the divisor in magnitude. Overflow is indicated with the #DE (divide error) exception rather than with the CF flag."
  129. [2]
  130. "IF SRC = 0"
  131. "THEN #DE; (* divide error *)"
  132. "FI;"
  133. "IF OpernadSize = 8 (* word/byte operation *)"
  134. "THEN"
  135. "temp ¼ AX / SRC;"
  136. "IF temp > FFH"
  137. "THEN #DE; (* divide error *) ;"
  138. "ELSE"
  139. "AL ¼ temp;"
  140. "AH ¼ AX MOD SRC;"
  141. "FI;"
  142. "ELSE"
  143. "IF OperandSize = 16 (* doubleword/word operation *)"
  144. "THEN"
  145. "temp ¼ DX:AX / SRC;"
  146. "IF temp > FFFFH"
  147. "THEN #DE; (* divide error *) ;"
  148. "ELSE"
  149. "AX ¼ temp;"
  150. "DX ¼ DX:AX MOD SRC;"
  151. "FI;"
  152. "ELSE (* quadword/doubleword operation *)"
  153. "temp ¼ EDX:EAX / SRC;"
  154. "IF temp > FFFFFFFFH"
  155. "THEN #DE; (* divide error *) ;"
  156. "ELSE"
  157. "EAX ¼ temp;"
  158. "EDX ¼ EDX:EAX MOD SRC;"
  159. "FI;"
  160. "FI;"
  161. "FI;"
  162. [3]
  163. "The CF, OF, SF, ZF, AF, and PF flags are undefined."
  164. [4]
  165. "Protected Mode Exceptions"
  166. ""
  167. "#DE If the source operand (divisor) is 0. If the quotient is too large for the designated register."
  168. "#GP(0) 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."
  169. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  170. "#PF(fault-code) If a page fault occurs."
  171. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3."
  172. ""
  173. "Real-Address Mode Exceptions"
  174. ""
  175. "#DE If the source operand (divisor) is 0. If the quotient is too large for the designated register."
  176. "#GP 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."
  177. "#SS(0) If a memory operand effective address is outside the SS segment limit."
  178. ""
  179. "Virtual-8086 Mode Exceptions"
  180. ""
  181. "#DE If the source operand (divisor) is 0. If the quotient is too large for the designated register."
  182. "#GP(0) If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit."
  183. "#SS If a memory operand effective address is outside the SS segment limit."
  184. "#PF(fault-code) If a page fault occurs."
  185. "#AC(0) If alignment checking is enabled and an unaligned memory reference is made."
  186. [5]
  187. "F6 /6 DIV r/m8 Unsigned divide AX by r/m8; AL ¼ Quotient, AH ¼ Remainder"
  188. "F7 /6 DIV r/m16 Unsigned divide DX:AX by r/m16; AX ¼ Quotient, DX ¼ Remainder"
  189. "F7 /6 DIV r/m32 Unsigned divide EDX:EAX by r/m32 doubleword; EAX ¼ Quotient, EDX ¼ Remainder"
  190. [6]
  191. </DIV>
  192. <DS:>
  193. [1]
  194. "Internal disassembler's symbol which indicates that the next command is used with the DS: segment."
  195. [2]
  196. "═/┴"
  197. [3]
  198. "═/┴"
  199. [4]
  200. "═/┴"
  201. [5]
  202. "N/A"
  203. [6]
  204. </DS:>