308 lines
17 KiB
Plaintext
308 lines
17 KiB
Plaintext
LXRSH@ PROC FAR
|
|
000 001269 80F910 CMP cl, 10h
|
|
001 00126C 7310 JAE L1
|
|
002 00126E 8BDA MOV bx, dx
|
|
003 001270 D3E8 SHR ax, cl
|
|
004 001272 D3FA SAR dx, cl
|
|
005 001274 F6D9 NEG cl
|
|
006 001276 80C110 ADD cl, 10h
|
|
007 001279 D3E3 SHL bx, cl
|
|
008 00127B 0BC3 OR ax, bx
|
|
009 00127D CB RETF
|
|
|
|
010 00127E 80E910 L1: SUB cl, 10h
|
|
011 001281 8BC2 MOV ax, dx
|
|
012 001283 99 CWD
|
|
013 001284 D3F8 SAR ax, cl
|
|
014 001286 CB RETF
|
|
|
|
LXRSH@ ENDP
|
|
|
|
LXLSH@ PROC FAR
|
|
000 001287 80F910 CMP cl, 10h
|
|
001 00128A 7310 JAE L2
|
|
002 00128C 8BD8 MOV bx, ax
|
|
003 00128E D3E0 SHL ax, cl
|
|
004 001290 D3E2 SHL dx, cl
|
|
005 001292 F6D9 NEG cl
|
|
006 001294 80C110 ADD cl, 10h
|
|
007 001297 D3EB SHR bx, cl
|
|
008 001299 0BD3 OR dx, bx
|
|
009 00129B CB RETF
|
|
|
|
010 00129C 80E910 L2: SUB cl, 10h
|
|
011 00129F 8BD0 MOV dx, ax
|
|
012 0012A1 33C0 XOR ax, ax
|
|
013 0012A3 D3E2 SHL dx, cl
|
|
014 0012A5 CB RETF
|
|
|
|
LXLSH@ ENDP
|
|
|
|
LMOD@ PROC FAR
|
|
000 0011CF B90200 MOV cx, 2
|
|
002 0011D7 55 PUSH bp
|
|
003 0011D8 56 PUSH si
|
|
004 0011D9 57 PUSH di
|
|
005 0011DA 8BEC MOV bp, sp
|
|
006 0011DC 8BF9 MOV di, cx
|
|
007 0011DE 8B460A MOV ax, [bp+0Ah]
|
|
008 0011E1 8B560C MOV dx, [bp+0Ch]
|
|
009 0011E4 8B5E0E MOV bx, [bp+0Eh]
|
|
010 0011E7 8B4E10 MOV cx, [bp+10h]
|
|
011 0011EA 0BC9 OR cx, cx
|
|
012 0011EC 7508 JNE L3
|
|
013 0011EE 0BD2 OR dx, dx
|
|
014 0011F0 7469 JE L4
|
|
015 0011F2 0BDB OR bx, bx
|
|
016 0011F4 7465 JE L4
|
|
|
|
017 0011F6 F7C70100 L3: TEST di, 1
|
|
018 0011FA 751C JNE L5
|
|
019 0011FC 0BD2 OR dx, dx
|
|
020 0011FE 790A JNS L6
|
|
021 001200 F7DA NEG dx
|
|
022 001202 F7D8 NEG ax
|
|
023 001204 83DA00 SBB dx, 0
|
|
024 001207 83CF0C OR di, 0Ch
|
|
|
|
025 00120A 0BC9 L6: OR cx, cx
|
|
026 00120C 790A JNS L5
|
|
027 00120E F7D9 NEG cx
|
|
028 001210 F7DB NEG bx
|
|
029 001212 83D900 SBB cx, 0
|
|
030 001215 83F704 XOR di, 4
|
|
|
|
031 001218 8BE9 L5: MOV bp, cx
|
|
032 00121A B92000 MOV cx, 20h
|
|
033 00121D 57 PUSH di
|
|
034 00121E 33FF XOR di, di
|
|
035 001220 33F6 XOR si, si
|
|
|
|
036 001222 D1E0 L7: SHL ax, 1
|
|
037 001224 D1D2 RCL dx, 1
|
|
038 001226 D1D6 RCL si, 1
|
|
039 001228 D1D7 RCL di, 1
|
|
040 00122A 3BFD CMP di, bp
|
|
041 00122C 720B JB L8
|
|
042 00122E 7704 JA L9
|
|
043 001230 3BF3 CMP si, bx
|
|
044 001232 7205 JB L8
|
|
|
|
045 001234 2BF3 L9: SUB si, bx
|
|
046 001236 1BFD SBB di, bp
|
|
047 001238 40 INC ax
|
|
|
|
048 001239 E2E7 L8: LOOP L7
|
|
049 00123B 5B POP bx
|
|
050 00123C F7C30200 TEST bx, 2
|
|
051 001240 7406 JE L10
|
|
052 001242 8BC6 MOV ax, si
|
|
053 001244 8BD7 MOV dx, di
|
|
054 001246 D1EB SHR bx, 1
|
|
|
|
055 001248 F7C30400 L10: TEST bx, 4
|
|
056 00124C 7407 JE L11
|
|
057 00124E F7DA NEG dx
|
|
058 001250 F7D8 NEG ax
|
|
059 001252 83DA00 SBB dx, 0
|
|
|
|
060 001255 5F L11: POP di
|
|
061 001256 5E POP si
|
|
062 001257 5D POP bp
|
|
063 001258 CA0800 RETF 8
|
|
|
|
064 L4: MOV tmp, dx:ax ;Synthetic inst
|
|
065 00125B F7F3 DIV bx
|
|
066 MOD bx ;Synthetic inst
|
|
067 00125D F7C70200 TEST di, 2
|
|
068 001261 7402 JE L12
|
|
069 001263 8BC2 MOV ax, dx
|
|
|
|
070 001265 33D2 L12: XOR dx, dx
|
|
071 001267 EBEC JMP L11
|
|
|
|
LMOD@ ENDP
|
|
|
|
LDIV@ PROC FAR
|
|
000 0011C6 33C9 XOR cx, cx
|
|
002 0011D7 55 PUSH bp
|
|
003 0011D8 56 PUSH si
|
|
004 0011D9 57 PUSH di
|
|
005 0011DA 8BEC MOV bp, sp
|
|
006 0011DC 8BF9 MOV di, cx
|
|
007 0011DE 8B460A MOV ax, [bp+0Ah]
|
|
008 0011E1 8B560C MOV dx, [bp+0Ch]
|
|
009 0011E4 8B5E0E MOV bx, [bp+0Eh]
|
|
010 0011E7 8B4E10 MOV cx, [bp+10h]
|
|
011 0011EA 0BC9 OR cx, cx
|
|
012 0011EC 7508 JNE L13
|
|
013 0011EE 0BD2 OR dx, dx
|
|
014 0011F0 7469 JE L14
|
|
015 0011F2 0BDB OR bx, bx
|
|
016 0011F4 7465 JE L14
|
|
|
|
017 0011F6 F7C70100 L13: TEST di, 1
|
|
018 0011FA 751C JNE L15
|
|
019 0011FC 0BD2 OR dx, dx
|
|
020 0011FE 790A JNS L16
|
|
021 001200 F7DA NEG dx
|
|
022 001202 F7D8 NEG ax
|
|
023 001204 83DA00 SBB dx, 0
|
|
024 001207 83CF0C OR di, 0Ch
|
|
|
|
025 00120A 0BC9 L16: OR cx, cx
|
|
026 00120C 790A JNS L15
|
|
027 00120E F7D9 NEG cx
|
|
028 001210 F7DB NEG bx
|
|
029 001212 83D900 SBB cx, 0
|
|
030 001215 83F704 XOR di, 4
|
|
|
|
031 001218 8BE9 L15: MOV bp, cx
|
|
032 00121A B92000 MOV cx, 20h
|
|
033 00121D 57 PUSH di
|
|
034 00121E 33FF XOR di, di
|
|
035 001220 33F6 XOR si, si
|
|
|
|
036 001222 D1E0 L17: SHL ax, 1
|
|
037 001224 D1D2 RCL dx, 1
|
|
038 001226 D1D6 RCL si, 1
|
|
039 001228 D1D7 RCL di, 1
|
|
040 00122A 3BFD CMP di, bp
|
|
041 00122C 720B JB L18
|
|
042 00122E 7704 JA L19
|
|
043 001230 3BF3 CMP si, bx
|
|
044 001232 7205 JB L18
|
|
|
|
045 001234 2BF3 L19: SUB si, bx
|
|
046 001236 1BFD SBB di, bp
|
|
047 001238 40 INC ax
|
|
|
|
048 001239 E2E7 L18: LOOP L17
|
|
049 00123B 5B POP bx
|
|
050 00123C F7C30200 TEST bx, 2
|
|
051 001240 7406 JE L20
|
|
052 001242 8BC6 MOV ax, si
|
|
053 001244 8BD7 MOV dx, di
|
|
054 001246 D1EB SHR bx, 1
|
|
|
|
055 001248 F7C30400 L20: TEST bx, 4
|
|
056 00124C 7407 JE L21
|
|
057 00124E F7DA NEG dx
|
|
058 001250 F7D8 NEG ax
|
|
059 001252 83DA00 SBB dx, 0
|
|
|
|
060 001255 5F L21: POP di
|
|
061 001256 5E POP si
|
|
062 001257 5D POP bp
|
|
063 001258 CA0800 RETF 8
|
|
|
|
064 L14: MOV tmp, dx:ax ;Synthetic inst
|
|
065 00125B F7F3 DIV bx
|
|
066 MOD bx ;Synthetic inst
|
|
067 00125D F7C70200 TEST di, 2
|
|
068 001261 7402 JE L22
|
|
069 001263 8BC2 MOV ax, dx
|
|
|
|
070 001265 33D2 L22: XOR dx, dx
|
|
071 001267 EBEC JMP L21
|
|
|
|
LDIV@ ENDP
|
|
|
|
LXMUL@ PROC FAR
|
|
000 0009C3 56 PUSH si
|
|
001 MOV tmp, ax ;Synthetic inst
|
|
002 MOV ax, si ;Synthetic inst
|
|
003 MOV si, tmp ;Synthetic inst
|
|
004 MOV tmp, ax ;Synthetic inst
|
|
005 MOV ax, dx ;Synthetic inst
|
|
006 MOV dx, tmp ;Synthetic inst
|
|
007 0009C6 85C0 TEST ax, ax
|
|
008 0009C8 7402 JE L23
|
|
009 0009CA F7E3 MUL bx
|
|
|
|
010 L23: MOV tmp, ax ;Synthetic inst
|
|
011 MOV ax, cx ;Synthetic inst
|
|
012 MOV cx, tmp ;Synthetic inst
|
|
013 0009CD 85C0 TEST ax, ax
|
|
014 0009CF 7404 JE L24
|
|
015 0009D1 F7E6 MUL si
|
|
016 0009D3 03C8 ADD cx, ax
|
|
|
|
017 L24: MOV tmp, ax ;Synthetic inst
|
|
018 MOV ax, si ;Synthetic inst
|
|
019 MOV si, tmp ;Synthetic inst
|
|
020 0009D6 F7E3 MUL bx
|
|
021 0009D8 03D1 ADD dx, cx
|
|
022 0009DA 5E POP si
|
|
023 0009DB CB RETF
|
|
|
|
LXMUL@ ENDP
|
|
|
|
main PROC NEAR
|
|
000 0002FA 55 PUSH bp
|
|
001 0002FB 8BEC MOV bp, sp
|
|
002 0002FD 83EC08 SUB sp, 8
|
|
003 000300 C746FA0000 MOV word ptr [bp-6], 0
|
|
004 000305 C746F8FF00 MOV word ptr [bp-8], 0FFh
|
|
005 00030A C746FE0000 MOV word ptr [bp-2], 0
|
|
006 00030F C746FC8F00 MOV word ptr [bp-4], 8Fh
|
|
007 000314 8B56FA MOV dx, [bp-6]
|
|
008 000317 8B46F8 MOV ax, [bp-8]
|
|
009 00031A 0346FC ADD ax, [bp-4]
|
|
010 00031D 1356FE ADC dx, [bp-2]
|
|
011 000320 8956FE MOV [bp-2], dx
|
|
012 000323 8946FC MOV [bp-4], ax
|
|
013 000326 8B56FA MOV dx, [bp-6]
|
|
014 000329 8B46F8 MOV ax, [bp-8]
|
|
015 00032C 2B46FC SUB ax, [bp-4]
|
|
016 00032F 1B56FE SBB dx, [bp-2]
|
|
017 000332 8956FA MOV [bp-6], dx
|
|
018 000335 8946F8 MOV [bp-8], ax
|
|
019 000338 8B56FA MOV dx, [bp-6]
|
|
020 00033B 8B46F8 MOV ax, [bp-8]
|
|
021 00033E 8B4EFE MOV cx, [bp-2]
|
|
022 000341 8B5EFC MOV bx, [bp-4]
|
|
023 000344 9AC3081000 CALL far ptr LXMUL@
|
|
024 000349 8956FA MOV [bp-6], dx
|
|
025 00034C 8946F8 MOV [bp-8], ax
|
|
026 00034F FF76FA PUSH word ptr [bp-6]
|
|
027 000352 FF76F8 PUSH word ptr [bp-8]
|
|
028 000355 FF76FE PUSH word ptr [bp-2]
|
|
029 000358 FF76FC PUSH word ptr [bp-4]
|
|
030 00035B 9AC6101000 CALL far ptr LDIV@
|
|
031 000360 8956FE MOV [bp-2], dx
|
|
032 000363 8946FC MOV [bp-4], ax
|
|
033 000366 FF76FA PUSH word ptr [bp-6]
|
|
034 000369 FF76F8 PUSH word ptr [bp-8]
|
|
035 00036C FF76FE PUSH word ptr [bp-2]
|
|
036 00036F FF76FC PUSH word ptr [bp-4]
|
|
037 000372 9ACF101000 CALL far ptr LMOD@
|
|
038 000377 8956FE MOV [bp-2], dx
|
|
039 00037A 8946FC MOV [bp-4], ax
|
|
040 00037D 8B56FA MOV dx, [bp-6]
|
|
041 000380 8B46F8 MOV ax, [bp-8]
|
|
042 000383 B105 MOV cl, 5
|
|
043 000385 9A87111000 CALL far ptr LXLSH@
|
|
044 00038A 8956FA MOV [bp-6], dx
|
|
045 00038D 8946F8 MOV [bp-8], ax
|
|
046 000390 8B56FE MOV dx, [bp-2]
|
|
047 000393 8B46FC MOV ax, [bp-4]
|
|
048 000396 8A4EF8 MOV cl, [bp-8]
|
|
049 000399 9A69111000 CALL far ptr LXRSH@
|
|
050 00039E 8956FE MOV [bp-2], dx
|
|
051 0003A1 8946FC MOV [bp-4], ax
|
|
052 0003A4 FF76FE PUSH word ptr [bp-2]
|
|
053 0003A7 FF76FC PUSH word ptr [bp-4]
|
|
054 0003AA FF76FA PUSH word ptr [bp-6]
|
|
055 0003AD FF76F8 PUSH word ptr [bp-8]
|
|
056 0003B0 B89401 MOV ax, 194h
|
|
057 0003B3 50 PUSH ax
|
|
058 0003B4 E8C406 CALL near ptr printf
|
|
059 0003B7 83C40A ADD sp, 0Ah
|
|
060 0003BA 8BE5 MOV sp, bp
|
|
061 0003BC 5D POP bp
|
|
062 0003BD C3 RET
|
|
|
|
main ENDP
|
|
|