LONGOPS.EXE.a1 16 KB

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