LONGOPS.EXE.a2 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. LXRSH@ PROC FAR
  2. 000 001269 80F910 CMP cl, 10h
  3. 001 00126C 7310 JAE L1
  4. 002 00126E 8BDA MOV bx, dx
  5. 003 001270 D3E8 SHR ax, cl
  6. 004 001272 D3FA SAR dx, cl
  7. 005 001274 F6D9 NEG cl
  8. 006 001276 80C110 ADD cl, 10h
  9. 007 001279 D3E3 SHL bx, cl
  10. 008 00127B 0BC3 OR ax, bx
  11. 009 00127D CB RETF
  12. 010 00127E 80E910 L1: SUB cl, 10h
  13. 011 001281 8BC2 MOV ax, dx
  14. 012 001283 99 CWD
  15. 013 001284 D3F8 SAR ax, cl
  16. 014 001286 CB RETF
  17. LXRSH@ ENDP
  18. LXLSH@ PROC FAR
  19. 000 001287 80F910 CMP cl, 10h
  20. 001 00128A 7310 JAE L2
  21. 002 00128C 8BD8 MOV bx, ax
  22. 003 00128E D3E0 SHL ax, cl
  23. 004 001290 D3E2 SHL dx, cl
  24. 005 001292 F6D9 NEG cl
  25. 006 001294 80C110 ADD cl, 10h
  26. 007 001297 D3EB SHR bx, cl
  27. 008 001299 0BD3 OR dx, bx
  28. 009 00129B CB RETF
  29. 010 00129C 80E910 L2: SUB cl, 10h
  30. 011 00129F 8BD0 MOV dx, ax
  31. 012 0012A1 33C0 XOR ax, ax
  32. 013 0012A3 D3E2 SHL dx, cl
  33. 014 0012A5 CB RETF
  34. LXLSH@ ENDP
  35. LMOD@ PROC FAR
  36. 000 0011CF B90200 MOV cx, 2
  37. 002 0011D7 55 PUSH bp
  38. 003 0011D8 56 PUSH si
  39. 004 0011D9 57 PUSH di
  40. 005 0011DA 8BEC MOV bp, sp
  41. 006 0011DC 8BF9 MOV di, cx
  42. 007 0011DE 8B460A MOV ax, [bp+0Ah]
  43. 008 0011E1 8B560C MOV dx, [bp+0Ch]
  44. 009 0011E4 8B5E0E MOV bx, [bp+0Eh]
  45. 010 0011E7 8B4E10 MOV cx, [bp+10h]
  46. 011 0011EA 0BC9 OR cx, cx
  47. 012 0011EC 7508 JNE L3
  48. 013 0011EE 0BD2 OR dx, dx
  49. 014 0011F0 7469 JE L4
  50. 015 0011F2 0BDB OR bx, bx
  51. 016 0011F4 7465 JE L4
  52. 017 0011F6 F7C70100 L3: TEST di, 1
  53. 018 0011FA 751C JNE L5
  54. 019 0011FC 0BD2 OR dx, dx
  55. 020 0011FE 790A JNS L6
  56. 021 001200 F7DA NEG dx
  57. 022 001202 F7D8 NEG ax
  58. 023 001204 83DA00 SBB dx, 0
  59. 024 001207 83CF0C OR di, 0Ch
  60. 025 00120A 0BC9 L6: OR cx, cx
  61. 026 00120C 790A JNS L5
  62. 027 00120E F7D9 NEG cx
  63. 028 001210 F7DB NEG bx
  64. 029 001212 83D900 SBB cx, 0
  65. 030 001215 83F704 XOR di, 4
  66. 031 001218 8BE9 L5: MOV bp, cx
  67. 032 00121A B92000 MOV cx, 20h
  68. 033 00121D 57 PUSH di
  69. 034 00121E 33FF XOR di, di
  70. 035 001220 33F6 XOR si, si
  71. 036 001222 D1E0 L7: SHL ax, 1
  72. 037 001224 D1D2 RCL dx, 1
  73. 038 001226 D1D6 RCL si, 1
  74. 039 001228 D1D7 RCL di, 1
  75. 040 00122A 3BFD CMP di, bp
  76. 041 00122C 720B JB L8
  77. 042 00122E 7704 JA L9
  78. 043 001230 3BF3 CMP si, bx
  79. 044 001232 7205 JB L8
  80. 045 001234 2BF3 L9: SUB si, bx
  81. 046 001236 1BFD SBB di, bp
  82. 047 001238 40 INC ax
  83. 048 001239 E2E7 L8: LOOP L7
  84. 049 00123B 5B POP bx
  85. 050 00123C F7C30200 TEST bx, 2
  86. 051 001240 7406 JE L10
  87. 052 001242 8BC6 MOV ax, si
  88. 053 001244 8BD7 MOV dx, di
  89. 054 001246 D1EB SHR bx, 1
  90. 055 001248 F7C30400 L10: TEST bx, 4
  91. 056 00124C 7407 JE L11
  92. 057 00124E F7DA NEG dx
  93. 058 001250 F7D8 NEG ax
  94. 059 001252 83DA00 SBB dx, 0
  95. 060 001255 5F L11: POP di
  96. 061 001256 5E POP si
  97. 062 001257 5D POP bp
  98. 063 001258 CA0800 RETF 8
  99. 064 L4: MOV tmp, dx:ax ;Synthetic inst
  100. 065 00125B F7F3 DIV bx
  101. 066 MOD bx ;Synthetic inst
  102. 067 00125D F7C70200 TEST di, 2
  103. 068 001261 7402 JE L12
  104. 069 001263 8BC2 MOV ax, dx
  105. 070 001265 33D2 L12: XOR dx, dx
  106. 071 001267 EBEC JMP L11
  107. LMOD@ ENDP
  108. LDIV@ PROC FAR
  109. 000 0011C6 33C9 XOR cx, cx
  110. 002 0011D7 55 PUSH bp
  111. 003 0011D8 56 PUSH si
  112. 004 0011D9 57 PUSH di
  113. 005 0011DA 8BEC MOV bp, sp
  114. 006 0011DC 8BF9 MOV di, cx
  115. 007 0011DE 8B460A MOV ax, [bp+0Ah]
  116. 008 0011E1 8B560C MOV dx, [bp+0Ch]
  117. 009 0011E4 8B5E0E MOV bx, [bp+0Eh]
  118. 010 0011E7 8B4E10 MOV cx, [bp+10h]
  119. 011 0011EA 0BC9 OR cx, cx
  120. 012 0011EC 7508 JNE L13
  121. 013 0011EE 0BD2 OR dx, dx
  122. 014 0011F0 7469 JE L14
  123. 015 0011F2 0BDB OR bx, bx
  124. 016 0011F4 7465 JE L14
  125. 017 0011F6 F7C70100 L13: TEST di, 1
  126. 018 0011FA 751C JNE L15
  127. 019 0011FC 0BD2 OR dx, dx
  128. 020 0011FE 790A JNS L16
  129. 021 001200 F7DA NEG dx
  130. 022 001202 F7D8 NEG ax
  131. 023 001204 83DA00 SBB dx, 0
  132. 024 001207 83CF0C OR di, 0Ch
  133. 025 00120A 0BC9 L16: OR cx, cx
  134. 026 00120C 790A JNS L15
  135. 027 00120E F7D9 NEG cx
  136. 028 001210 F7DB NEG bx
  137. 029 001212 83D900 SBB cx, 0
  138. 030 001215 83F704 XOR di, 4
  139. 031 001218 8BE9 L15: MOV bp, cx
  140. 032 00121A B92000 MOV cx, 20h
  141. 033 00121D 57 PUSH di
  142. 034 00121E 33FF XOR di, di
  143. 035 001220 33F6 XOR si, si
  144. 036 001222 D1E0 L17: SHL ax, 1
  145. 037 001224 D1D2 RCL dx, 1
  146. 038 001226 D1D6 RCL si, 1
  147. 039 001228 D1D7 RCL di, 1
  148. 040 00122A 3BFD CMP di, bp
  149. 041 00122C 720B JB L18
  150. 042 00122E 7704 JA L19
  151. 043 001230 3BF3 CMP si, bx
  152. 044 001232 7205 JB L18
  153. 045 001234 2BF3 L19: SUB si, bx
  154. 046 001236 1BFD SBB di, bp
  155. 047 001238 40 INC ax
  156. 048 001239 E2E7 L18: LOOP L17
  157. 049 00123B 5B POP bx
  158. 050 00123C F7C30200 TEST bx, 2
  159. 051 001240 7406 JE L20
  160. 052 001242 8BC6 MOV ax, si
  161. 053 001244 8BD7 MOV dx, di
  162. 054 001246 D1EB SHR bx, 1
  163. 055 001248 F7C30400 L20: TEST bx, 4
  164. 056 00124C 7407 JE L21
  165. 057 00124E F7DA NEG dx
  166. 058 001250 F7D8 NEG ax
  167. 059 001252 83DA00 SBB dx, 0
  168. 060 001255 5F L21: POP di
  169. 061 001256 5E POP si
  170. 062 001257 5D POP bp
  171. 063 001258 CA0800 RETF 8
  172. 064 L14: MOV tmp, dx:ax ;Synthetic inst
  173. 065 00125B F7F3 DIV bx
  174. 066 MOD bx ;Synthetic inst
  175. 067 00125D F7C70200 TEST di, 2
  176. 068 001261 7402 JE L22
  177. 069 001263 8BC2 MOV ax, dx
  178. 070 001265 33D2 L22: XOR dx, dx
  179. 071 001267 EBEC JMP L21
  180. LDIV@ ENDP
  181. LXMUL@ PROC FAR
  182. 000 0009C3 56 PUSH si
  183. 001 MOV tmp, ax ;Synthetic inst
  184. 002 MOV ax, si ;Synthetic inst
  185. 003 MOV si, tmp ;Synthetic inst
  186. 004 MOV tmp, ax ;Synthetic inst
  187. 005 MOV ax, dx ;Synthetic inst
  188. 006 MOV dx, tmp ;Synthetic inst
  189. 007 0009C6 85C0 TEST ax, ax
  190. 008 0009C8 7402 JE L23
  191. 009 0009CA F7E3 MUL bx
  192. 010 L23: MOV tmp, ax ;Synthetic inst
  193. 011 MOV ax, cx ;Synthetic inst
  194. 012 MOV cx, tmp ;Synthetic inst
  195. 013 0009CD 85C0 TEST ax, ax
  196. 014 0009CF 7404 JE L24
  197. 015 0009D1 F7E6 MUL si
  198. 016 0009D3 03C8 ADD cx, ax
  199. 017 L24: MOV tmp, ax ;Synthetic inst
  200. 018 MOV ax, si ;Synthetic inst
  201. 019 MOV si, tmp ;Synthetic inst
  202. 020 0009D6 F7E3 MUL bx
  203. 021 0009D8 03D1 ADD dx, cx
  204. 022 0009DA 5E POP si
  205. 023 0009DB CB RETF
  206. LXMUL@ ENDP
  207. main PROC NEAR
  208. 000 0002FA 55 PUSH bp
  209. 001 0002FB 8BEC MOV bp, sp
  210. 002 0002FD 83EC08 SUB sp, 8
  211. 003 000300 C746FA0000 MOV word ptr [bp-6], 0
  212. 004 000305 C746F8FF00 MOV word ptr [bp-8], 0FFh
  213. 005 00030A C746FE0000 MOV word ptr [bp-2], 0
  214. 006 00030F C746FC8F00 MOV word ptr [bp-4], 8Fh
  215. 007 000314 8B56FA MOV dx, [bp-6]
  216. 008 000317 8B46F8 MOV ax, [bp-8]
  217. 009 00031A 0346FC ADD ax, [bp-4]
  218. 010 00031D 1356FE ADC dx, [bp-2]
  219. 011 000320 8956FE MOV [bp-2], dx
  220. 012 000323 8946FC MOV [bp-4], ax
  221. 013 000326 8B56FA MOV dx, [bp-6]
  222. 014 000329 8B46F8 MOV ax, [bp-8]
  223. 015 00032C 2B46FC SUB ax, [bp-4]
  224. 016 00032F 1B56FE SBB dx, [bp-2]
  225. 017 000332 8956FA MOV [bp-6], dx
  226. 018 000335 8946F8 MOV [bp-8], ax
  227. 019 000338 8B56FA MOV dx, [bp-6]
  228. 020 00033B 8B46F8 MOV ax, [bp-8]
  229. 021 00033E 8B4EFE MOV cx, [bp-2]
  230. 022 000341 8B5EFC MOV bx, [bp-4]
  231. 023 000344 9AC3081000 CALL far ptr LXMUL@
  232. 024 000349 8956FA MOV [bp-6], dx
  233. 025 00034C 8946F8 MOV [bp-8], ax
  234. 026 00034F FF76FA PUSH word ptr [bp-6]
  235. 027 000352 FF76F8 PUSH word ptr [bp-8]
  236. 028 000355 FF76FE PUSH word ptr [bp-2]
  237. 029 000358 FF76FC PUSH word ptr [bp-4]
  238. 030 00035B 9AC6101000 CALL far ptr LDIV@
  239. 031 000360 8956FE MOV [bp-2], dx
  240. 032 000363 8946FC MOV [bp-4], ax
  241. 033 000366 FF76FA PUSH word ptr [bp-6]
  242. 034 000369 FF76F8 PUSH word ptr [bp-8]
  243. 035 00036C FF76FE PUSH word ptr [bp-2]
  244. 036 00036F FF76FC PUSH word ptr [bp-4]
  245. 037 000372 9ACF101000 CALL far ptr LMOD@
  246. 038 000377 8956FE MOV [bp-2], dx
  247. 039 00037A 8946FC MOV [bp-4], ax
  248. 040 00037D 8B56FA MOV dx, [bp-6]
  249. 041 000380 8B46F8 MOV ax, [bp-8]
  250. 042 000383 B105 MOV cl, 5
  251. 043 000385 9A87111000 CALL far ptr LXLSH@
  252. 044 00038A 8956FA MOV [bp-6], dx
  253. 045 00038D 8946F8 MOV [bp-8], ax
  254. 046 000390 8B56FE MOV dx, [bp-2]
  255. 047 000393 8B46FC MOV ax, [bp-4]
  256. 048 000396 8A4EF8 MOV cl, [bp-8]
  257. 049 000399 9A69111000 CALL far ptr LXRSH@
  258. 050 00039E 8956FE MOV [bp-2], dx
  259. 051 0003A1 8946FC MOV [bp-4], ax
  260. 052 0003A4 FF76FE PUSH word ptr [bp-2]
  261. 053 0003A7 FF76FC PUSH word ptr [bp-4]
  262. 054 0003AA FF76FA PUSH word ptr [bp-6]
  263. 055 0003AD FF76F8 PUSH word ptr [bp-8]
  264. 056 0003B0 B89401 MOV ax, 194h
  265. 057 0003B3 50 PUSH ax
  266. 058 0003B4 E8C406 CALL near ptr printf
  267. 059 0003B7 83C40A ADD sp, 0Ah
  268. 060 0003BA 8BE5 MOV sp, bp
  269. 061 0003BC 5D POP bp
  270. 062 0003BD C3 RET
  271. main ENDP