diff --git a/covproc.sh b/covproc.sh new file mode 100755 index 0000000..a50d649 --- /dev/null +++ b/covproc.sh @@ -0,0 +1,7 @@ +#!/bin/sh +lcov -z -d bld/CMakeFiles/dcc_original.dir/src +./regression_tester.rb bld/dcc_original -a2 -m -s -c -V +lcov -c -d bld/CMakeFiles/dcc_original.dir/src -o cover1.info +lcov -e cover1.info *dcc_* -o cover2.info +genhtml -o coverage -f --demangle-cpp cover2.info + diff --git a/test_use_all.sh b/test_use_all.sh new file mode 100755 index 0000000..f9b1765 --- /dev/null +++ b/test_use_all.sh @@ -0,0 +1,5 @@ +#!/bin/bash +rm tests/prev +rm tests/inputs +ln -s inputs_all tests/inputs +ln -s prev_all tests/prev \ No newline at end of file diff --git a/test_use_base.sh b/test_use_base.sh new file mode 100755 index 0000000..8c069e5 --- /dev/null +++ b/test_use_base.sh @@ -0,0 +1,5 @@ +#!/bin/bash +rm tests/prev +rm tests/inputs +ln -s inputs_base tests/inputs +ln -s prev_base tests/prev \ No newline at end of file diff --git a/tests/inputs_base/BENCHFN.EXE b/tests/inputs_base/BENCHFN.EXE new file mode 100755 index 0000000..f4849e9 Binary files /dev/null and b/tests/inputs_base/BENCHFN.EXE differ diff --git a/tests/inputs_base/BENCHLNG.EXE b/tests/inputs_base/BENCHLNG.EXE new file mode 100755 index 0000000..a8328b7 Binary files /dev/null and b/tests/inputs_base/BENCHLNG.EXE differ diff --git a/tests/inputs_base/BENCHMUL.EXE b/tests/inputs_base/BENCHMUL.EXE new file mode 100755 index 0000000..eb1720e Binary files /dev/null and b/tests/inputs_base/BENCHMUL.EXE differ diff --git a/tests/inputs_base/BENCHMUS.EXE b/tests/inputs_base/BENCHMUS.EXE new file mode 100755 index 0000000..1206a25 Binary files /dev/null and b/tests/inputs_base/BENCHMUS.EXE differ diff --git a/tests/inputs_base/BENCHSHO.EXE b/tests/inputs_base/BENCHSHO.EXE new file mode 100755 index 0000000..c400fcc Binary files /dev/null and b/tests/inputs_base/BENCHSHO.EXE differ diff --git a/tests/inputs_base/BYTEOPS.EXE b/tests/inputs_base/BYTEOPS.EXE new file mode 100755 index 0000000..434edc7 Binary files /dev/null and b/tests/inputs_base/BYTEOPS.EXE differ diff --git a/tests/inputs_base/FIBOS.EXE b/tests/inputs_base/FIBOS.EXE new file mode 100755 index 0000000..baa7d40 Binary files /dev/null and b/tests/inputs_base/FIBOS.EXE differ diff --git a/tests/inputs_base/MIN.EXE b/tests/inputs_base/MIN.EXE new file mode 100755 index 0000000..f0eb4bb Binary files /dev/null and b/tests/inputs_base/MIN.EXE differ diff --git a/tests/prev_base/BENCHFN.EXE.a1 b/tests/prev_base/BENCHFN.EXE.a1 new file mode 100644 index 0000000..0858e4b --- /dev/null +++ b/tests/prev_base/BENCHFN.EXE.a1 @@ -0,0 +1,109 @@ + main PROC NEAR +000 000365 55 PUSH bp +001 000366 8BEC MOV bp, sp +002 000368 83EC08 SUB sp, 8 +003 00036B B89401 MOV ax, 194h +004 00036E 50 PUSH ax +005 00036F E8D90B CALL near ptr printf +006 000372 59 POP cx +007 000373 8D46FC LEA ax, [bp-4] +008 000376 50 PUSH ax +009 000377 B8B001 MOV ax, 1B0h +010 00037A 50 PUSH ax +011 00037B E85614 CALL near ptr scanf +012 00037E 59 POP cx +013 00037F 59 POP cx +014 000380 FF76FE PUSH word ptr [bp-2] +015 000383 FF76FC PUSH word ptr [bp-4] +016 000386 B8B401 MOV ax, 1B4h +017 000389 50 PUSH ax +018 00038A E8BE0B CALL near ptr printf +019 00038D 83C406 ADD sp, 6 +020 000390 C746FA0000 MOV word ptr [bp-6], 0 +021 000395 C746F80100 MOV word ptr [bp-8], 1 +022 00039A EB0B JMP L1 + +023 0003A7 8B56FA L1: MOV dx, [bp-6] +024 0003AA 8B46F8 MOV ax, [bp-8] +025 0003AD 3B56FE CMP dx, [bp-2] +026 0003B0 7CEA JL L2 +027 0003B2 7F05 JG L3 +028 0003B4 3B46FC CMP ax, [bp-4] +029 0003B7 76E3 JBE L2 + +030 0003B9 B8CE01 L3: MOV ax, 1CEh +031 0003BC 50 PUSH ax +032 0003BD E88B0B CALL near ptr printf +033 0003C0 59 POP cx +034 0003C1 8BE5 MOV sp, bp +035 0003C3 5D POP bp +036 0003C4 C3 RET + +037 00039C E8A6FF L2: CALL near ptr proc_1 +038 00039F 8346F801 ADD word ptr [bp-8], 1 +039 0003A3 8356FA00 ADC word ptr [bp-6], 0 +040 JMP L1 ;Synthetic inst + + main ENDP + + proc_1 PROC NEAR +000 000345 55 PUSH bp +001 000346 8BEC MOV bp, sp +002 000348 E8D7FF CALL near ptr proc_2 +003 00034B E8D4FF CALL near ptr proc_2 +004 00034E E8D1FF CALL near ptr proc_2 +005 000351 E8CEFF CALL near ptr proc_2 +006 000354 E8CBFF CALL near ptr proc_2 +007 000357 E8C8FF CALL near ptr proc_2 +008 00035A E8C5FF CALL near ptr proc_2 +009 00035D E8C2FF CALL near ptr proc_2 +010 000360 E8BFFF CALL near ptr proc_2 +011 000363 5D POP bp +012 000364 C3 RET + + proc_1 ENDP + + proc_2 PROC NEAR +000 000322 55 PUSH bp +001 000323 8BEC MOV bp, sp +002 000325 E8D7FF CALL near ptr proc_3 +003 000328 E8D4FF CALL near ptr proc_3 +004 00032B E8D1FF CALL near ptr proc_3 +005 00032E E8CEFF CALL near ptr proc_3 +006 000331 E8CBFF CALL near ptr proc_3 +007 000334 E8C8FF CALL near ptr proc_3 +008 000337 E8C5FF CALL near ptr proc_3 +009 00033A E8C2FF CALL near ptr proc_3 +010 00033D E8BFFF CALL near ptr proc_3 +011 000340 E8BCFF CALL near ptr proc_3 +012 000343 5D POP bp +013 000344 C3 RET + + proc_2 ENDP + + proc_3 PROC NEAR +000 0002FF 55 PUSH bp +001 000300 8BEC MOV bp, sp +002 000302 E8F5FF CALL near ptr proc_4 +003 000305 E8F2FF CALL near ptr proc_4 +004 000308 E8EFFF CALL near ptr proc_4 +005 00030B E8ECFF CALL near ptr proc_4 +006 00030E E8E9FF CALL near ptr proc_4 +007 000311 E8E6FF CALL near ptr proc_4 +008 000314 E8E3FF CALL near ptr proc_4 +009 000317 E8E0FF CALL near ptr proc_4 +010 00031A E8DDFF CALL near ptr proc_4 +011 00031D E8DAFF CALL near ptr proc_4 +012 000320 5D POP bp +013 000321 C3 RET + + proc_3 ENDP + + proc_4 PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 5D POP bp +003 0002FE C3 RET + + proc_4 ENDP + diff --git a/tests/prev_base/BENCHFN.EXE.a2 b/tests/prev_base/BENCHFN.EXE.a2 new file mode 100644 index 0000000..3215eca --- /dev/null +++ b/tests/prev_base/BENCHFN.EXE.a2 @@ -0,0 +1,108 @@ + proc_4 PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 5D POP bp +003 0002FE C3 RET + + proc_4 ENDP + + proc_3 PROC NEAR +000 0002FF 55 PUSH bp +001 000300 8BEC MOV bp, sp +002 000302 E8F5FF CALL near ptr proc_4 +003 000305 E8F2FF CALL near ptr proc_4 +004 000308 E8EFFF CALL near ptr proc_4 +005 00030B E8ECFF CALL near ptr proc_4 +006 00030E E8E9FF CALL near ptr proc_4 +007 000311 E8E6FF CALL near ptr proc_4 +008 000314 E8E3FF CALL near ptr proc_4 +009 000317 E8E0FF CALL near ptr proc_4 +010 00031A E8DDFF CALL near ptr proc_4 +011 00031D E8DAFF CALL near ptr proc_4 +012 000320 5D POP bp +013 000321 C3 RET + + proc_3 ENDP + + proc_2 PROC NEAR +000 000322 55 PUSH bp +001 000323 8BEC MOV bp, sp +002 000325 E8D7FF CALL near ptr proc_3 +003 000328 E8D4FF CALL near ptr proc_3 +004 00032B E8D1FF CALL near ptr proc_3 +005 00032E E8CEFF CALL near ptr proc_3 +006 000331 E8CBFF CALL near ptr proc_3 +007 000334 E8C8FF CALL near ptr proc_3 +008 000337 E8C5FF CALL near ptr proc_3 +009 00033A E8C2FF CALL near ptr proc_3 +010 00033D E8BFFF CALL near ptr proc_3 +011 000340 E8BCFF CALL near ptr proc_3 +012 000343 5D POP bp +013 000344 C3 RET + + proc_2 ENDP + + proc_1 PROC NEAR +000 000345 55 PUSH bp +001 000346 8BEC MOV bp, sp +002 000348 E8D7FF CALL near ptr proc_2 +003 00034B E8D4FF CALL near ptr proc_2 +004 00034E E8D1FF CALL near ptr proc_2 +005 000351 E8CEFF CALL near ptr proc_2 +006 000354 E8CBFF CALL near ptr proc_2 +007 000357 E8C8FF CALL near ptr proc_2 +008 00035A E8C5FF CALL near ptr proc_2 +009 00035D E8C2FF CALL near ptr proc_2 +010 000360 E8BFFF CALL near ptr proc_2 +011 000363 5D POP bp +012 000364 C3 RET + + proc_1 ENDP + + main PROC NEAR +000 000365 55 PUSH bp +001 000366 8BEC MOV bp, sp +002 000368 83EC08 SUB sp, 8 +003 00036B B89401 MOV ax, 194h +004 00036E 50 PUSH ax +005 00036F E8D90B CALL near ptr printf +006 000372 59 POP cx +007 000373 8D46FC LEA ax, [bp-4] +008 000376 50 PUSH ax +009 000377 B8B001 MOV ax, 1B0h +010 00037A 50 PUSH ax +011 00037B E85614 CALL near ptr scanf +012 00037E 59 POP cx +013 00037F 59 POP cx +014 000380 FF76FE PUSH word ptr [bp-2] +015 000383 FF76FC PUSH word ptr [bp-4] +016 000386 B8B401 MOV ax, 1B4h +017 000389 50 PUSH ax +018 00038A E8BE0B CALL near ptr printf +019 00038D 83C406 ADD sp, 6 +020 000390 C746FA0000 MOV word ptr [bp-6], 0 +021 000395 C746F80100 MOV word ptr [bp-8], 1 + +023 0003A7 8B56FA L1: MOV dx, [bp-6] +024 0003AA 8B46F8 MOV ax, [bp-8] +025 0003AD 3B56FE CMP dx, [bp-2] +026 0003B0 7CEA JL L2 +027 0003B2 7F05 JG L3 +028 0003B4 3B46FC CMP ax, [bp-4] +029 0003B7 76E3 JBE L2 + +030 0003B9 B8CE01 L3: MOV ax, 1CEh +031 0003BC 50 PUSH ax +032 0003BD E88B0B CALL near ptr printf +033 0003C0 59 POP cx +034 0003C1 8BE5 MOV sp, bp +035 0003C3 5D POP bp +036 0003C4 C3 RET + +037 00039C E8A6FF L2: CALL near ptr proc_1 +038 00039F 8346F801 ADD word ptr [bp-8], 1 +039 0003A3 8356FA00 ADC word ptr [bp-6], 0 +040 JMP L1 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/BENCHFN.b b/tests/prev_base/BENCHFN.b new file mode 100644 index 0000000..41ae251 --- /dev/null +++ b/tests/prev_base/BENCHFN.b @@ -0,0 +1,89 @@ +/* + * Input file : ./tests/inputs/BENCHFN.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void proc_4 () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +} + + +void proc_3 () +/* Takes no parameters. + * High-level language prologue code. + */ +{ + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); + proc_4 (); +} + + +void proc_2 () +/* Takes no parameters. + * High-level language prologue code. + */ +{ + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); + proc_3 (); +} + + +void proc_1 () +/* Takes no parameters. + * High-level language prologue code. + */ +{ + proc_2 (); + proc_2 (); + proc_2 (); + proc_2 (); + proc_2 (); + proc_2 (); + proc_2 (); + proc_2 (); + proc_2 (); +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +long loc1; +long loc2; + + printf ("enter number of iterations "); + scanf ("%ld", &loc0); + printf ("executing %ld iterations\n", loc2); + loc1 = 1; + + while ((loc1 <= loc2)) { + proc_1 (); + loc1 = (loc1 + 1); + } /* end of while */ + printf ("finished\n"); +} + diff --git a/tests/prev_base/BENCHLNG.EXE.a1 b/tests/prev_base/BENCHLNG.EXE.a1 new file mode 100644 index 0000000..9340fc0 --- /dev/null +++ b/tests/prev_base/BENCHLNG.EXE.a1 @@ -0,0 +1,242 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC14 SUB sp, 14h +003 000300 8D46FC LEA ax, [bp-4] +004 000303 50 PUSH ax +005 000304 B89401 MOV ax, 194h +006 000307 50 PUSH ax +007 000308 E85D15 CALL near ptr scanf +008 00030B 59 POP cx +009 00030C 59 POP cx +010 00030D FF76FE PUSH word ptr [bp-2] +011 000310 FF76FC PUSH word ptr [bp-4] +012 000313 B89801 MOV ax, 198h +013 000316 50 PUSH ax +014 000317 E8C50C CALL near ptr printf +015 00031A 83C406 ADD sp, 6 +016 00031D 8D46EC LEA ax, [bp-14h] +017 000320 50 PUSH ax +018 000321 B8B201 MOV ax, 1B2h +019 000324 50 PUSH ax +020 000325 E84015 CALL near ptr scanf +021 000328 59 POP cx +022 000329 59 POP cx +023 00032A 8D46F0 LEA ax, [bp-10h] +024 00032D 50 PUSH ax +025 00032E B8B601 MOV ax, 1B6h +026 000331 50 PUSH ax +027 000332 E83315 CALL near ptr scanf +028 000335 59 POP cx +029 000336 59 POP cx +030 000337 C746FA0000 MOV word ptr [bp-6], 0 +031 00033C C746F80100 MOV word ptr [bp-8], 1 +032 000341 E9E900 JMP L1 + +033 00042D 8B56FA L1: MOV dx, [bp-6] +034 000430 8B46F8 MOV ax, [bp-8] +035 000433 3B56FE CMP dx, [bp-2] +036 000436 7D03 JGE L2 +037 000438 E909FF JMP L3 + +038 000344 C746F60000 L3: MOV word ptr [bp-0Ah], 0 +039 000349 C746F40100 MOV word ptr [bp-0Ch], 1 +040 00034E E9C000 JMP L4 + +041 000411 837EF600 L4: CMP word ptr [bp-0Ah], 0 +042 000415 7D03 JGE L5 +043 000417 E937FF JMP L6 + +044 000351 8B56EE L6: MOV dx, [bp-12h] +045 000354 8B46EC MOV ax, [bp-14h] +046 000357 0346F0 ADD ax, [bp-10h] +047 00035A 1356F2 ADC dx, [bp-0Eh] +048 00035D 0346F4 ADD ax, [bp-0Ch] +049 000360 1356F6 ADC dx, [bp-0Ah] +050 000363 8956EE MOV [bp-12h], dx +051 000366 8946EC MOV [bp-14h], ax +052 000369 8B56EE MOV dx, [bp-12h] +053 00036C 8B46EC MOV ax, [bp-14h] +054 00036F D1FA SAR dx, 1 +055 000371 D1D8 RCR ax, 1 +056 000373 8956F2 MOV [bp-0Eh], dx +057 000376 8946F0 MOV [bp-10h], ax +058 000379 33D2 XOR dx, dx +059 00037B B80A00 MOV ax, 0Ah +060 00037E 52 PUSH dx +061 00037F 50 PUSH ax +062 000380 FF76F2 PUSH word ptr [bp-0Eh] +063 000383 FF76F0 PUSH word ptr [bp-10h] +064 000386 9AEB1D1000 CALL far ptr LMOD@ +065 00038B 8956EE MOV [bp-12h], dx +066 00038E 8946EC MOV [bp-14h], ax +067 000391 8B56F2 MOV dx, [bp-0Eh] +068 000394 8B46F0 MOV ax, [bp-10h] +069 000397 3B56F6 CMP dx, [bp-0Ah] +070 00039A 750A JNE L7 +071 00039C 3B46F4 CMP ax, [bp-0Ch] +072 00039F 7505 JNE L7 +073 0003A1 B80100 MOV ax, 1 +074 0003A4 EB02 JMP L8 + +075 0003A8 99 L8: CWD +076 0003A9 8956EE MOV [bp-12h], dx +077 0003AC 8946EC MOV [bp-14h], ax +078 0003AF 8B56EE MOV dx, [bp-12h] +079 0003B2 8B46EC MOV ax, [bp-14h] +080 0003B5 0B46F4 OR ax, [bp-0Ch] +081 0003B8 0B56F6 OR dx, [bp-0Ah] +082 0003BB 8956F2 MOV [bp-0Eh], dx +083 0003BE 8946F0 MOV [bp-10h], ax +084 0003C1 8B46F0 MOV ax, [bp-10h] +085 0003C4 0B46F2 OR ax, [bp-0Eh] +086 0003C7 7505 JNE L9 +087 0003C9 B80100 MOV ax, 1 +088 0003CC EB02 JMP L10 + +089 0003D0 99 L10: CWD +090 0003D1 8956EE MOV [bp-12h], dx +091 0003D4 8946EC MOV [bp-14h], ax +092 0003D7 8B56EE MOV dx, [bp-12h] +093 0003DA 8B46EC MOV ax, [bp-14h] +094 0003DD 0346F4 ADD ax, [bp-0Ch] +095 0003E0 1356F6 ADC dx, [bp-0Ah] +096 0003E3 8956F2 MOV [bp-0Eh], dx +097 0003E6 8946F0 MOV [bp-10h], ax +098 0003E9 8B56F2 MOV dx, [bp-0Eh] +099 0003EC 8B46F0 MOV ax, [bp-10h] +100 0003EF 3B56F6 CMP dx, [bp-0Ah] +101 0003F2 7C0C JL L11 +102 0003F4 7F05 JG L12 +103 0003F6 3B46F4 CMP ax, [bp-0Ch] +104 0003F9 7605 JBE L11 + +105 0003FB B80100 L12: MOV ax, 1 +106 0003FE EB02 JMP L13 + +107 000402 99 L13: CWD +108 000403 8956EE MOV [bp-12h], dx +109 000406 8946EC MOV [bp-14h], ax +110 000409 8346F401 ADD word ptr [bp-0Ch], 1 +111 00040D 8356F600 ADC word ptr [bp-0Ah], 0 +112 JMP L4 ;Synthetic inst + +113 000400 33C0 L11: XOR ax, ax +114 JMP L13 ;Synthetic inst + +115 0003CE 33C0 L9: XOR ax, ax +116 JMP L10 ;Synthetic inst + +117 0003A6 33C0 L7: XOR ax, ax +118 JMP L8 ;Synthetic inst + +119 00041A 7F09 L5: JG L14 +120 00041C 837EF428 CMP word ptr [bp-0Ch], 28h +121 000420 7703 JA L14 +122 000422 E92CFF JMP L6 + +123 000425 8346F801 L14: ADD word ptr [bp-8], 1 +124 000429 8356FA00 ADC word ptr [bp-6], 0 +125 JMP L1 ;Synthetic inst + +126 00043B 7F08 L2: JG L15 +127 00043D 3B46FC CMP ax, [bp-4] +128 000440 7703 JA L15 +129 000442 E9FFFE JMP L3 + +130 000445 FF76EE L15: PUSH word ptr [bp-12h] +131 000448 FF76EC PUSH word ptr [bp-14h] +132 00044B B8BA01 MOV ax, 1BAh +133 00044E 50 PUSH ax +134 00044F E88D0B CALL near ptr printf +135 000452 83C406 ADD sp, 6 +136 000455 8BE5 MOV sp, bp +137 000457 5D POP bp +138 000458 C3 RET + + main ENDP + + LMOD@ PROC FAR +000 001EEB B90200 MOV cx, 2 +001 001EEE EB03 JMP L16 + +002 001EF3 55 L16: PUSH bp +003 001EF4 56 PUSH si +004 001EF5 57 PUSH di +005 001EF6 8BEC MOV bp, sp +006 001EF8 8BF9 MOV di, cx +007 001EFA 8B460A MOV ax, [bp+0Ah] +008 001EFD 8B560C MOV dx, [bp+0Ch] +009 001F00 8B5E0E MOV bx, [bp+0Eh] +010 001F03 8B4E10 MOV cx, [bp+10h] +011 001F06 0BC9 OR cx, cx +012 001F08 7508 JNE L17 +013 001F0A 0BD2 OR dx, dx +014 001F0C 7469 JE L18 +015 001F0E 0BDB OR bx, bx +016 001F10 7465 JE L18 + +017 001F12 F7C70100 L17: TEST di, 1 +018 001F16 751C JNE L19 +019 001F18 0BD2 OR dx, dx +020 001F1A 790A JNS L20 +021 001F1C F7DA NEG dx +022 001F1E F7D8 NEG ax +023 001F20 83DA00 SBB dx, 0 +024 001F23 83CF0C OR di, 0Ch + +025 001F26 0BC9 L20: OR cx, cx +026 001F28 790A JNS L19 +027 001F2A F7D9 NEG cx +028 001F2C F7DB NEG bx +029 001F2E 83D900 SBB cx, 0 +030 001F31 83F704 XOR di, 4 + +031 001F34 8BE9 L19: MOV bp, cx +032 001F36 B92000 MOV cx, 20h +033 001F39 57 PUSH di +034 001F3A 33FF XOR di, di +035 001F3C 33F6 XOR si, si + +036 001F3E D1E0 L21: SHL ax, 1 +037 001F40 D1D2 RCL dx, 1 +038 001F42 D1D6 RCL si, 1 +039 001F44 D1D7 RCL di, 1 +040 001F46 3BFD CMP di, bp +041 001F48 720B JB L22 +042 001F4A 7704 JA L23 +043 001F4C 3BF3 CMP si, bx +044 001F4E 7205 JB L22 + +045 001F50 2BF3 L23: SUB si, bx +046 001F52 1BFD SBB di, bp +047 001F54 40 INC ax + +048 001F55 E2E7 L22: LOOP L21 +049 001F57 5B POP bx +050 001F58 F7C30200 TEST bx, 2 +051 001F5C 7406 JE L24 +052 001F5E 8BC6 MOV ax, si +053 001F60 8BD7 MOV dx, di +054 001F62 D1EB SHR bx, 1 + +055 001F64 F7C30400 L24: TEST bx, 4 +056 001F68 7407 JE L25 +057 001F6A F7DA NEG dx +058 001F6C F7D8 NEG ax +059 001F6E 83DA00 SBB dx, 0 + +060 001F71 5F L25: POP di +061 001F72 5E POP si +062 001F73 5D POP bp +063 001F74 CA0800 RETF 8 +065 001F77 F7F3 DIV bx +067 001F79 F7C70200 TEST di, 2 +068 001F7D 7402 JE L26 +069 001F7F 8BC2 MOV ax, dx + +070 001F81 33D2 L26: XOR dx, dx +071 001F83 EBEC JMP L25 + + LMOD@ ENDP + diff --git a/tests/prev_base/BENCHLNG.EXE.a2 b/tests/prev_base/BENCHLNG.EXE.a2 new file mode 100644 index 0000000..5ae414e --- /dev/null +++ b/tests/prev_base/BENCHLNG.EXE.a2 @@ -0,0 +1,234 @@ + LMOD@ PROC FAR +000 001EEB B90200 MOV cx, 2 +002 001EF3 55 PUSH bp +003 001EF4 56 PUSH si +004 001EF5 57 PUSH di +005 001EF6 8BEC MOV bp, sp +006 001EF8 8BF9 MOV di, cx +007 001EFA 8B460A MOV ax, [bp+0Ah] +008 001EFD 8B560C MOV dx, [bp+0Ch] +009 001F00 8B5E0E MOV bx, [bp+0Eh] +010 001F03 8B4E10 MOV cx, [bp+10h] +011 001F06 0BC9 OR cx, cx +012 001F08 7508 JNE L1 +013 001F0A 0BD2 OR dx, dx +014 001F0C 7469 JE L2 +015 001F0E 0BDB OR bx, bx +016 001F10 7465 JE L2 + +017 001F12 F7C70100 L1: TEST di, 1 +018 001F16 751C JNE L3 +019 001F18 0BD2 OR dx, dx +020 001F1A 790A JNS L4 +021 001F1C F7DA NEG dx +022 001F1E F7D8 NEG ax +023 001F20 83DA00 SBB dx, 0 +024 001F23 83CF0C OR di, 0Ch + +025 001F26 0BC9 L4: OR cx, cx +026 001F28 790A JNS L3 +027 001F2A F7D9 NEG cx +028 001F2C F7DB NEG bx +029 001F2E 83D900 SBB cx, 0 +030 001F31 83F704 XOR di, 4 + +031 001F34 8BE9 L3: MOV bp, cx +032 001F36 B92000 MOV cx, 20h +033 001F39 57 PUSH di +034 001F3A 33FF XOR di, di +035 001F3C 33F6 XOR si, si + +036 001F3E D1E0 L5: SHL ax, 1 +037 001F40 D1D2 RCL dx, 1 +038 001F42 D1D6 RCL si, 1 +039 001F44 D1D7 RCL di, 1 +040 001F46 3BFD CMP di, bp +041 001F48 720B JB L6 +042 001F4A 7704 JA L7 +043 001F4C 3BF3 CMP si, bx +044 001F4E 7205 JB L6 + +045 001F50 2BF3 L7: SUB si, bx +046 001F52 1BFD SBB di, bp +047 001F54 40 INC ax + +048 001F55 E2E7 L6: LOOP L5 +049 001F57 5B POP bx +050 001F58 F7C30200 TEST bx, 2 +051 001F5C 7406 JE L8 +052 001F5E 8BC6 MOV ax, si +053 001F60 8BD7 MOV dx, di +054 001F62 D1EB SHR bx, 1 + +055 001F64 F7C30400 L8: TEST bx, 4 +056 001F68 7407 JE L9 +057 001F6A F7DA NEG dx +058 001F6C F7D8 NEG ax +059 001F6E 83DA00 SBB dx, 0 + +060 001F71 5F L9: POP di +061 001F72 5E POP si +062 001F73 5D POP bp +063 001F74 CA0800 RETF 8 + +064 L2: MOV tmp, dx:ax ;Synthetic inst +065 001F77 F7F3 DIV bx +066 MOD bx ;Synthetic inst +067 001F79 F7C70200 TEST di, 2 +068 001F7D 7402 JE L10 +069 001F7F 8BC2 MOV ax, dx + +070 001F81 33D2 L10: XOR dx, dx +071 001F83 EBEC JMP L9 + + LMOD@ ENDP + + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC14 SUB sp, 14h +003 000300 8D46FC LEA ax, [bp-4] +004 000303 50 PUSH ax +005 000304 B89401 MOV ax, 194h +006 000307 50 PUSH ax +007 000308 E85D15 CALL near ptr scanf +008 00030B 59 POP cx +009 00030C 59 POP cx +010 00030D FF76FE PUSH word ptr [bp-2] +011 000310 FF76FC PUSH word ptr [bp-4] +012 000313 B89801 MOV ax, 198h +013 000316 50 PUSH ax +014 000317 E8C50C CALL near ptr printf +015 00031A 83C406 ADD sp, 6 +016 00031D 8D46EC LEA ax, [bp-14h] +017 000320 50 PUSH ax +018 000321 B8B201 MOV ax, 1B2h +019 000324 50 PUSH ax +020 000325 E84015 CALL near ptr scanf +021 000328 59 POP cx +022 000329 59 POP cx +023 00032A 8D46F0 LEA ax, [bp-10h] +024 00032D 50 PUSH ax +025 00032E B8B601 MOV ax, 1B6h +026 000331 50 PUSH ax +027 000332 E83315 CALL near ptr scanf +028 000335 59 POP cx +029 000336 59 POP cx +030 000337 C746FA0000 MOV word ptr [bp-6], 0 +031 00033C C746F80100 MOV word ptr [bp-8], 1 + +033 00042D 8B56FA L11: MOV dx, [bp-6] +034 000430 8B46F8 MOV ax, [bp-8] +035 000433 3B56FE CMP dx, [bp-2] +036 000436 7D03 JGE L12 + +038 000344 C746F60000 L13: MOV word ptr [bp-0Ah], 0 +039 000349 C746F40100 MOV word ptr [bp-0Ch], 1 + +041 000411 837EF600 L14: CMP word ptr [bp-0Ah], 0 +042 000415 7D03 JGE L15 + +044 000351 8B56EE L16: MOV dx, [bp-12h] +045 000354 8B46EC MOV ax, [bp-14h] +046 000357 0346F0 ADD ax, [bp-10h] +047 00035A 1356F2 ADC dx, [bp-0Eh] +048 00035D 0346F4 ADD ax, [bp-0Ch] +049 000360 1356F6 ADC dx, [bp-0Ah] +050 000363 8956EE MOV [bp-12h], dx +051 000366 8946EC MOV [bp-14h], ax +052 000369 8B56EE MOV dx, [bp-12h] +053 00036C 8B46EC MOV ax, [bp-14h] +054 00036F D1FA SAR dx, 1 +055 000371 D1D8 RCR ax, 1 +056 000373 8956F2 MOV [bp-0Eh], dx +057 000376 8946F0 MOV [bp-10h], ax +058 000379 33D2 XOR dx, dx +059 00037B B80A00 MOV ax, 0Ah +060 00037E 52 PUSH dx +061 00037F 50 PUSH ax +062 000380 FF76F2 PUSH word ptr [bp-0Eh] +063 000383 FF76F0 PUSH word ptr [bp-10h] +064 000386 9AEB1D1000 CALL far ptr LMOD@ +065 00038B 8956EE MOV [bp-12h], dx +066 00038E 8946EC MOV [bp-14h], ax +067 000391 8B56F2 MOV dx, [bp-0Eh] +068 000394 8B46F0 MOV ax, [bp-10h] +069 000397 3B56F6 CMP dx, [bp-0Ah] +070 00039A 750A JNE L17 +071 00039C 3B46F4 CMP ax, [bp-0Ch] +072 00039F 7505 JNE L17 +073 0003A1 B80100 MOV ax, 1 + +075 0003A8 99 L18: CWD +076 0003A9 8956EE MOV [bp-12h], dx +077 0003AC 8946EC MOV [bp-14h], ax +078 0003AF 8B56EE MOV dx, [bp-12h] +079 0003B2 8B46EC MOV ax, [bp-14h] +080 0003B5 0B46F4 OR ax, [bp-0Ch] +081 0003B8 0B56F6 OR dx, [bp-0Ah] +082 0003BB 8956F2 MOV [bp-0Eh], dx +083 0003BE 8946F0 MOV [bp-10h], ax +084 0003C1 8B46F0 MOV ax, [bp-10h] +085 0003C4 0B46F2 OR ax, [bp-0Eh] +086 0003C7 7505 JNE L19 +087 0003C9 B80100 MOV ax, 1 + +089 0003D0 99 L20: CWD +090 0003D1 8956EE MOV [bp-12h], dx +091 0003D4 8946EC MOV [bp-14h], ax +092 0003D7 8B56EE MOV dx, [bp-12h] +093 0003DA 8B46EC MOV ax, [bp-14h] +094 0003DD 0346F4 ADD ax, [bp-0Ch] +095 0003E0 1356F6 ADC dx, [bp-0Ah] +096 0003E3 8956F2 MOV [bp-0Eh], dx +097 0003E6 8946F0 MOV [bp-10h], ax +098 0003E9 8B56F2 MOV dx, [bp-0Eh] +099 0003EC 8B46F0 MOV ax, [bp-10h] +100 0003EF 3B56F6 CMP dx, [bp-0Ah] +101 0003F2 7C0C JL L21 +102 0003F4 7F05 JG L22 +103 0003F6 3B46F4 CMP ax, [bp-0Ch] +104 0003F9 7605 JBE L21 + +105 0003FB B80100 L22: MOV ax, 1 + +107 000402 99 L23: CWD +108 000403 8956EE MOV [bp-12h], dx +109 000406 8946EC MOV [bp-14h], ax +110 000409 8346F401 ADD word ptr [bp-0Ch], 1 +111 00040D 8356F600 ADC word ptr [bp-0Ah], 0 +112 JMP L14 ;Synthetic inst + +113 000400 33C0 L21: XOR ax, ax +114 JMP L23 ;Synthetic inst + +115 0003CE 33C0 L19: XOR ax, ax +116 JMP L20 ;Synthetic inst + +117 0003A6 33C0 L17: XOR ax, ax +118 JMP L18 ;Synthetic inst + +119 00041A 7F09 L15: JG L24 +120 00041C 837EF428 CMP word ptr [bp-0Ch], 28h +121 000420 7703 JA L24 + +123 000425 8346F801 L24: ADD word ptr [bp-8], 1 +124 000429 8356FA00 ADC word ptr [bp-6], 0 +125 JMP L11 ;Synthetic inst + +126 00043B 7F08 L12: JG L25 +127 00043D 3B46FC CMP ax, [bp-4] +128 000440 7703 JA L25 + +130 000445 FF76EE L25: PUSH word ptr [bp-12h] +131 000448 FF76EC PUSH word ptr [bp-14h] +132 00044B B8BA01 MOV ax, 1BAh +133 00044E 50 PUSH ax +134 00044F E88D0B CALL near ptr printf +135 000452 83C406 ADD sp, 6 +136 000455 8BE5 MOV sp, bp +137 000457 5D POP bp +138 000458 C3 RET + + main ENDP + diff --git a/tests/prev_base/BENCHLNG.b b/tests/prev_base/BENCHLNG.b new file mode 100644 index 0000000..da66c79 --- /dev/null +++ b/tests/prev_base/BENCHLNG.b @@ -0,0 +1,158 @@ +/* + * Input file : ./tests/inputs/BENCHLNG.EXE + * File type : EXE + */ + +#include "dcc.h" + + +long LMOD@ (long arg0, int arg2, int arg3) +/* Takes 8 bytes of parameters. + * Runtime support routine of the compiler. + * Untranslatable routine. Assembler provided. + * Return value in registers dx:ax. + * Pascal calling convention. + */ +{ + MOV cx, 2 + PUSH bp + PUSH si + PUSH di + MOV bp, sp + MOV di, cx + MOV ax, [bp+0Ah] + MOV dx, [bp+0Ch] + MOV bx, [bp+0Eh] + MOV cx, [bp+10h] + CMP cx, 0 + JNE L1 + OR dx, dx + JE L2 + OR bx, bx + JE L2 + + L1: TEST di, 1 + JNE L3 + OR dx, dx + JNS L4 + NEG dx + NEG ax + SBB dx, 0 + OR di, 0Ch + + L4: OR cx, cx + JNS L3 + NEG cx + NEG bx + SBB cx, 0 + XOR di, 4 + + L3: MOV bp, cx + MOV cx, 20h + PUSH di + XOR di, 0 + XOR si, 0 + + L5: SHL ax, 1 + RCL dx, 1 + RCL si, 1 + RCL di, 1 + CMP di, bp + JB L6 + JA L7 + CMP si, bx + JB L6 + + L7: SUB si, bx + SBB di, bp + INC ax + + L6: LOOP L5 + POP bx + TEST bx, 2 + JE L8 + MOV ax, si + MOV dx, di + SHR bx, 1 + + L8: TEST bx, 4 + JE L9 + NEG dx + NEG ax + SBB dx, 0 + + L9: POP di + POP si + POP bp + RETF 8 + + L2: MOV tmp, dx:ax ;Synthetic inst + DIV bx + MOD bx ;Synthetic inst + TEST di, 2 + JE L10 + MOV ax, dx + + L10: XOR dx, dx + JMP L9 +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +long loc1; +long loc2; +long loc3; +long loc4; +long loc5; +int loc6; /* ax */ + + scanf ("%ld", &loc0); + printf ("executing %ld iterations\n", loc5); + scanf ("%ld", &loc2); + scanf ("%ld", &loc3); + loc3 = 1; + + while ((loc3 <= loc5)) { + loc2 = 1; + + while ((loc2 <= 40)) { + loc4 = ((loc4 + loc1) + loc2); + loc1 = (loc4 >> 1); + loc4 = LMOD@ (loc1, 10); + + if (loc1 == loc2) { + loc6 = 1; + } + else { + loc6 = 0; + } + loc4 = loc6; + loc1 = (loc4 | loc2); + + if ((loc3 | loc9) == 0) { + loc6 = 1; + } + else { + loc6 = 0; + } + loc4 = loc6; + loc1 = (loc4 + loc2); + + if (loc1 > loc2) { + loc6 = 1; + } + else { + loc6 = 0; + } + loc4 = loc6; + loc2 = (loc2 + 1); + } /* end of while */ + loc3 = (loc3 + 1); + } /* end of while */ + printf ("a=%d\n", loc4); +} + diff --git a/tests/prev_base/BENCHMUL.EXE.a1 b/tests/prev_base/BENCHMUL.EXE.a1 new file mode 100644 index 0000000..ca69338 --- /dev/null +++ b/tests/prev_base/BENCHMUL.EXE.a1 @@ -0,0 +1,101 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC0C SUB sp, 0Ch +003 000300 56 PUSH si +004 000301 B89401 MOV ax, 194h +005 000304 50 PUSH ax +006 000305 E8530C CALL near ptr printf +007 000308 59 POP cx +008 000309 8D46FC LEA ax, [bp-4] +009 00030C 50 PUSH ax +010 00030D B8B001 MOV ax, 1B0h +011 000310 50 PUSH ax +012 000311 E8D014 CALL near ptr scanf +013 000314 59 POP cx +014 000315 59 POP cx +015 000316 FF76FE PUSH word ptr [bp-2] +016 000319 FF76FC PUSH word ptr [bp-4] +017 00031C B8B401 MOV ax, 1B4h +018 00031F 50 PUSH ax +019 000320 E8380C CALL near ptr printf +020 000323 83C406 ADD sp, 6 +021 000326 8D46F4 LEA ax, [bp-0Ch] +022 000329 50 PUSH ax +023 00032A B8CE01 MOV ax, 1CEh +024 00032D 50 PUSH ax +025 00032E E8B314 CALL near ptr scanf +026 000331 59 POP cx +027 000332 59 POP cx +028 000333 8D46F6 LEA ax, [bp-0Ah] +029 000336 50 PUSH ax +030 000337 B8D101 MOV ax, 1D1h +031 00033A 50 PUSH ax +032 00033B E8A614 CALL near ptr scanf +033 00033E 59 POP cx +034 00033F 59 POP cx +035 000340 C746FA0000 MOV word ptr [bp-6], 0 +036 000345 C746F80100 MOV word ptr [bp-8], 1 +037 00034A EB66 JMP L1 + +038 0003B2 8B56FA L1: MOV dx, [bp-6] +039 0003B5 8B46F8 MOV ax, [bp-8] +040 0003B8 3B56FE CMP dx, [bp-2] +041 0003BB 7C8F JL L2 +042 0003BD 7F05 JG L3 +043 0003BF 3B46FC CMP ax, [bp-4] +044 0003C2 7688 JBE L2 + +045 0003C4 FF76F4 L3: PUSH word ptr [bp-0Ch] +046 0003C7 B8D401 MOV ax, 1D4h +047 0003CA 50 PUSH ax +048 0003CB E88D0B CALL near ptr printf +049 0003CE 59 POP cx +050 0003CF 59 POP cx +051 0003D0 5E POP si +052 0003D1 8BE5 MOV sp, bp +053 0003D3 5D POP bp +054 0003D4 C3 RET + +055 00034C BE0100 L2: MOV si, 1 +056 00034F EB54 JMP L4 + +057 0003A5 83FE28 L4: CMP si, 28h +058 0003A8 7EA7 JLE L5 +059 0003AA 8346F801 ADD word ptr [bp-8], 1 +060 0003AE 8356FA00 ADC word ptr [bp-6], 0 +061 JMP L1 ;Synthetic inst + +062 000351 8B46F4 L5: MOV ax, [bp-0Ch] +063 000354 F766F4 MUL word ptr [bp-0Ch] +064 000357 F766F4 MUL word ptr [bp-0Ch] +065 00035A F766F4 MUL word ptr [bp-0Ch] +066 00035D F766F4 MUL word ptr [bp-0Ch] +067 000360 F766F4 MUL word ptr [bp-0Ch] +068 000363 F766F4 MUL word ptr [bp-0Ch] +069 000366 F766F4 MUL word ptr [bp-0Ch] +070 000369 F766F4 MUL word ptr [bp-0Ch] +071 00036C F766F4 MUL word ptr [bp-0Ch] +072 00036F F766F4 MUL word ptr [bp-0Ch] +073 000372 F766F4 MUL word ptr [bp-0Ch] +074 000375 F766F4 MUL word ptr [bp-0Ch] +075 000378 F766F4 MUL word ptr [bp-0Ch] +076 00037B F766F4 MUL word ptr [bp-0Ch] +077 00037E F766F4 MUL word ptr [bp-0Ch] +078 000381 F766F4 MUL word ptr [bp-0Ch] +079 000384 F766F4 MUL word ptr [bp-0Ch] +080 000387 F766F4 MUL word ptr [bp-0Ch] +081 00038A F766F4 MUL word ptr [bp-0Ch] +082 00038D F766F4 MUL word ptr [bp-0Ch] +083 000390 F766F4 MUL word ptr [bp-0Ch] +084 000393 F766F4 MUL word ptr [bp-0Ch] +085 000396 F766F4 MUL word ptr [bp-0Ch] +086 000399 F766F4 MUL word ptr [bp-0Ch] +087 00039C BA0300 MOV dx, 3 +088 00039F F7E2 MUL dx +089 0003A1 8946F4 MOV [bp-0Ch], ax +090 0003A4 46 INC si +091 JMP L4 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/BENCHMUL.EXE.a2 b/tests/prev_base/BENCHMUL.EXE.a2 new file mode 100644 index 0000000..2419022 --- /dev/null +++ b/tests/prev_base/BENCHMUL.EXE.a2 @@ -0,0 +1,99 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC0C SUB sp, 0Ch +003 000300 56 PUSH si +004 000301 B89401 MOV ax, 194h +005 000304 50 PUSH ax +006 000305 E8530C CALL near ptr printf +007 000308 59 POP cx +008 000309 8D46FC LEA ax, [bp-4] +009 00030C 50 PUSH ax +010 00030D B8B001 MOV ax, 1B0h +011 000310 50 PUSH ax +012 000311 E8D014 CALL near ptr scanf +013 000314 59 POP cx +014 000315 59 POP cx +015 000316 FF76FE PUSH word ptr [bp-2] +016 000319 FF76FC PUSH word ptr [bp-4] +017 00031C B8B401 MOV ax, 1B4h +018 00031F 50 PUSH ax +019 000320 E8380C CALL near ptr printf +020 000323 83C406 ADD sp, 6 +021 000326 8D46F4 LEA ax, [bp-0Ch] +022 000329 50 PUSH ax +023 00032A B8CE01 MOV ax, 1CEh +024 00032D 50 PUSH ax +025 00032E E8B314 CALL near ptr scanf +026 000331 59 POP cx +027 000332 59 POP cx +028 000333 8D46F6 LEA ax, [bp-0Ah] +029 000336 50 PUSH ax +030 000337 B8D101 MOV ax, 1D1h +031 00033A 50 PUSH ax +032 00033B E8A614 CALL near ptr scanf +033 00033E 59 POP cx +034 00033F 59 POP cx +035 000340 C746FA0000 MOV word ptr [bp-6], 0 +036 000345 C746F80100 MOV word ptr [bp-8], 1 + +038 0003B2 8B56FA L1: MOV dx, [bp-6] +039 0003B5 8B46F8 MOV ax, [bp-8] +040 0003B8 3B56FE CMP dx, [bp-2] +041 0003BB 7C8F JL L2 +042 0003BD 7F05 JG L3 +043 0003BF 3B46FC CMP ax, [bp-4] +044 0003C2 7688 JBE L2 + +045 0003C4 FF76F4 L3: PUSH word ptr [bp-0Ch] +046 0003C7 B8D401 MOV ax, 1D4h +047 0003CA 50 PUSH ax +048 0003CB E88D0B CALL near ptr printf +049 0003CE 59 POP cx +050 0003CF 59 POP cx +051 0003D0 5E POP si +052 0003D1 8BE5 MOV sp, bp +053 0003D3 5D POP bp +054 0003D4 C3 RET + +055 00034C BE0100 L2: MOV si, 1 + +057 0003A5 83FE28 L4: CMP si, 28h +058 0003A8 7EA7 JLE L5 +059 0003AA 8346F801 ADD word ptr [bp-8], 1 +060 0003AE 8356FA00 ADC word ptr [bp-6], 0 +061 JMP L1 ;Synthetic inst + +062 000351 8B46F4 L5: MOV ax, [bp-0Ch] +063 000354 F766F4 MUL word ptr [bp-0Ch] +064 000357 F766F4 MUL word ptr [bp-0Ch] +065 00035A F766F4 MUL word ptr [bp-0Ch] +066 00035D F766F4 MUL word ptr [bp-0Ch] +067 000360 F766F4 MUL word ptr [bp-0Ch] +068 000363 F766F4 MUL word ptr [bp-0Ch] +069 000366 F766F4 MUL word ptr [bp-0Ch] +070 000369 F766F4 MUL word ptr [bp-0Ch] +071 00036C F766F4 MUL word ptr [bp-0Ch] +072 00036F F766F4 MUL word ptr [bp-0Ch] +073 000372 F766F4 MUL word ptr [bp-0Ch] +074 000375 F766F4 MUL word ptr [bp-0Ch] +075 000378 F766F4 MUL word ptr [bp-0Ch] +076 00037B F766F4 MUL word ptr [bp-0Ch] +077 00037E F766F4 MUL word ptr [bp-0Ch] +078 000381 F766F4 MUL word ptr [bp-0Ch] +079 000384 F766F4 MUL word ptr [bp-0Ch] +080 000387 F766F4 MUL word ptr [bp-0Ch] +081 00038A F766F4 MUL word ptr [bp-0Ch] +082 00038D F766F4 MUL word ptr [bp-0Ch] +083 000390 F766F4 MUL word ptr [bp-0Ch] +084 000393 F766F4 MUL word ptr [bp-0Ch] +085 000396 F766F4 MUL word ptr [bp-0Ch] +086 000399 F766F4 MUL word ptr [bp-0Ch] +087 00039C BA0300 MOV dx, 3 +088 00039F F7E2 MUL dx +089 0003A1 8946F4 MOV [bp-0Ch], ax +090 0003A4 46 INC si +091 JMP L4 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/BENCHMUL.b b/tests/prev_base/BENCHMUL.b new file mode 100644 index 0000000..e2f9357 --- /dev/null +++ b/tests/prev_base/BENCHMUL.b @@ -0,0 +1,38 @@ +/* + * Input file : ./tests/inputs/BENCHMUL.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; +long loc3; +long loc4; +int loc5; + + printf ("enter number of iterations\n"); + scanf ("%ld", &loc0); + printf ("executing %ld iterations\n", loc4); + scanf ("%d", &loc1); + scanf ("%d", &loc2); + loc3 = 1; + + while ((loc3 <= loc4)) { + loc5 = 1; + + while ((loc5 <= 40)) { + loc1 = (((((((((((((((((((((((((loc1 * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * 3); + loc5 = (loc5 + 1); + } /* end of while */ + loc3 = (loc3 + 1); + } /* end of while */ + printf ("a=%d\n", loc1); +} + diff --git a/tests/prev_base/BENCHMUS.EXE.a1 b/tests/prev_base/BENCHMUS.EXE.a1 new file mode 100644 index 0000000..60b043f --- /dev/null +++ b/tests/prev_base/BENCHMUS.EXE.a1 @@ -0,0 +1,91 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC0A SUB sp, 0Ah +003 000300 56 PUSH si +004 000301 57 PUSH di +005 000302 B8A801 MOV ax, 1A8h +006 000305 50 PUSH ax +007 000306 E8240C CALL near ptr printf +008 000309 59 POP cx +009 00030A 8D46FC LEA ax, [bp-4] +010 00030D 50 PUSH ax +011 00030E B8C401 MOV ax, 1C4h +012 000311 50 PUSH ax +013 000312 E8A114 CALL near ptr scanf +014 000315 59 POP cx +015 000316 59 POP cx +016 000317 FF76FE PUSH word ptr [bp-2] +017 00031A FF76FC PUSH word ptr [bp-4] +018 00031D B8C801 MOV ax, 1C8h +019 000320 50 PUSH ax +020 000321 E8090C CALL near ptr printf +021 000324 83C406 ADD sp, 6 +022 000327 BE1400 MOV si, 14h +023 00032A 8976F6 MOV [bp-0Ah], si +024 00032D C746FA0000 MOV word ptr [bp-6], 0 +025 000332 C746F80100 MOV word ptr [bp-8], 1 +026 000337 EB4C JMP L1 + +027 000385 8B56FA L1: MOV dx, [bp-6] +028 000388 8B46F8 MOV ax, [bp-8] +029 00038B 3B56FE CMP dx, [bp-2] +030 00038E 7CA9 JL L2 +031 000390 7F05 JG L3 +032 000392 3B46FC CMP ax, [bp-4] +033 000395 76A2 JBE L2 + +034 000397 56 L3: PUSH si +035 000398 B8E201 MOV ax, 1E2h +036 00039B 50 PUSH ax +037 00039C E88E0B CALL near ptr printf +038 00039F 59 POP cx +039 0003A0 59 POP cx +040 0003A1 5F POP di +041 0003A2 5E POP si +042 0003A3 8BE5 MOV sp, bp +043 0003A5 5D POP bp +044 0003A6 C3 RET + +045 000339 BF0100 L2: MOV di, 1 +046 00033C EB3A JMP L4 + +047 000378 83FF28 L4: CMP di, 28h +048 00037B 7EC1 JLE L5 +049 00037D 8346F801 ADD word ptr [bp-8], 1 +050 000381 8356FA00 ADC word ptr [bp-6], 0 +051 JMP L1 ;Synthetic inst + +052 00033E 8BC6 L5: MOV ax, si +053 000340 F7E6 MUL si +054 000342 F7E6 MUL si +055 000344 F7E6 MUL si +056 000346 F7E6 MUL si +057 000348 F7E6 MUL si +058 00034A F7E6 MUL si +059 00034C F7E6 MUL si +060 00034E F7E6 MUL si +061 000350 F7E6 MUL si +062 000352 F7E6 MUL si +063 000354 F7E6 MUL si +064 000356 F7E6 MUL si +065 000358 F7E6 MUL si +066 00035A F7E6 MUL si +067 00035C F7E6 MUL si +068 00035E F7E6 MUL si +069 000360 F7E6 MUL si +070 000362 F7E6 MUL si +071 000364 F7E6 MUL si +072 000366 F7E6 MUL si +073 000368 F7E6 MUL si +074 00036A F7E6 MUL si +075 00036C F7E6 MUL si +076 00036E F7E6 MUL si +077 000370 BA0300 MOV dx, 3 +078 000373 F7E2 MUL dx +079 000375 8BF0 MOV si, ax +080 000377 47 INC di +081 JMP L4 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/BENCHMUS.EXE.a2 b/tests/prev_base/BENCHMUS.EXE.a2 new file mode 100644 index 0000000..2495a57 --- /dev/null +++ b/tests/prev_base/BENCHMUS.EXE.a2 @@ -0,0 +1,89 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC0A SUB sp, 0Ah +003 000300 56 PUSH si +004 000301 57 PUSH di +005 000302 B8A801 MOV ax, 1A8h +006 000305 50 PUSH ax +007 000306 E8240C CALL near ptr printf +008 000309 59 POP cx +009 00030A 8D46FC LEA ax, [bp-4] +010 00030D 50 PUSH ax +011 00030E B8C401 MOV ax, 1C4h +012 000311 50 PUSH ax +013 000312 E8A114 CALL near ptr scanf +014 000315 59 POP cx +015 000316 59 POP cx +016 000317 FF76FE PUSH word ptr [bp-2] +017 00031A FF76FC PUSH word ptr [bp-4] +018 00031D B8C801 MOV ax, 1C8h +019 000320 50 PUSH ax +020 000321 E8090C CALL near ptr printf +021 000324 83C406 ADD sp, 6 +022 000327 BE1400 MOV si, 14h +023 00032A 8976F6 MOV [bp-0Ah], si +024 00032D C746FA0000 MOV word ptr [bp-6], 0 +025 000332 C746F80100 MOV word ptr [bp-8], 1 + +027 000385 8B56FA L1: MOV dx, [bp-6] +028 000388 8B46F8 MOV ax, [bp-8] +029 00038B 3B56FE CMP dx, [bp-2] +030 00038E 7CA9 JL L2 +031 000390 7F05 JG L3 +032 000392 3B46FC CMP ax, [bp-4] +033 000395 76A2 JBE L2 + +034 000397 56 L3: PUSH si +035 000398 B8E201 MOV ax, 1E2h +036 00039B 50 PUSH ax +037 00039C E88E0B CALL near ptr printf +038 00039F 59 POP cx +039 0003A0 59 POP cx +040 0003A1 5F POP di +041 0003A2 5E POP si +042 0003A3 8BE5 MOV sp, bp +043 0003A5 5D POP bp +044 0003A6 C3 RET + +045 000339 BF0100 L2: MOV di, 1 + +047 000378 83FF28 L4: CMP di, 28h +048 00037B 7EC1 JLE L5 +049 00037D 8346F801 ADD word ptr [bp-8], 1 +050 000381 8356FA00 ADC word ptr [bp-6], 0 +051 JMP L1 ;Synthetic inst + +052 00033E 8BC6 L5: MOV ax, si +053 000340 F7E6 MUL si +054 000342 F7E6 MUL si +055 000344 F7E6 MUL si +056 000346 F7E6 MUL si +057 000348 F7E6 MUL si +058 00034A F7E6 MUL si +059 00034C F7E6 MUL si +060 00034E F7E6 MUL si +061 000350 F7E6 MUL si +062 000352 F7E6 MUL si +063 000354 F7E6 MUL si +064 000356 F7E6 MUL si +065 000358 F7E6 MUL si +066 00035A F7E6 MUL si +067 00035C F7E6 MUL si +068 00035E F7E6 MUL si +069 000360 F7E6 MUL si +070 000362 F7E6 MUL si +071 000364 F7E6 MUL si +072 000366 F7E6 MUL si +073 000368 F7E6 MUL si +074 00036A F7E6 MUL si +075 00036C F7E6 MUL si +076 00036E F7E6 MUL si +077 000370 BA0300 MOV dx, 3 +078 000373 F7E2 MUL dx +079 000375 8BF0 MOV si, ax +080 000377 47 INC di +081 JMP L4 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/BENCHMUS.b b/tests/prev_base/BENCHMUS.b new file mode 100644 index 0000000..c36ff5c --- /dev/null +++ b/tests/prev_base/BENCHMUS.b @@ -0,0 +1,38 @@ +/* + * Input file : ./tests/inputs/BENCHMUS.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +long loc2; +long loc3; +int loc4; +int loc5; + + printf ("enter number of iterations\n"); + scanf ("%ld", &loc0); + printf ("executing %ld iterations\n", loc3); + loc4 = 20; + loc1 = loc4; + loc2 = 1; + + while ((loc2 <= loc3)) { + loc5 = 1; + + while ((loc5 <= 40)) { + loc4 = (((((((((((((((((((((((((loc4 * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * 3); + loc5 = (loc5 + 1); + } /* end of while */ + loc2 = (loc2 + 1); + } /* end of while */ + printf ("a=%d\n", loc4); +} + diff --git a/tests/prev_base/BENCHSHO.EXE.a1 b/tests/prev_base/BENCHSHO.EXE.a1 new file mode 100644 index 0000000..904c2c7 --- /dev/null +++ b/tests/prev_base/BENCHSHO.EXE.a1 @@ -0,0 +1,113 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC0E SUB sp, 0Eh +003 000300 8D46FC LEA ax, [bp-4] +004 000303 50 PUSH ax +005 000304 B89401 MOV ax, 194h +006 000307 50 PUSH ax +007 000308 E8E914 CALL near ptr scanf +008 00030B 59 POP cx +009 00030C 59 POP cx +010 00030D FF76FE PUSH word ptr [bp-2] +011 000310 FF76FC PUSH word ptr [bp-4] +012 000313 B89801 MOV ax, 198h +013 000316 50 PUSH ax +014 000317 E8510C CALL near ptr printf +015 00031A 83C406 ADD sp, 6 +016 00031D 8D46F2 LEA ax, [bp-0Eh] +017 000320 50 PUSH ax +018 000321 B8B201 MOV ax, 1B2h +019 000324 50 PUSH ax +020 000325 E8CC14 CALL near ptr scanf +021 000328 59 POP cx +022 000329 59 POP cx +023 00032A 8D46F4 LEA ax, [bp-0Ch] +024 00032D 50 PUSH ax +025 00032E B8B601 MOV ax, 1B6h +026 000331 50 PUSH ax +027 000332 E8BF14 CALL near ptr scanf +028 000335 59 POP cx +029 000336 59 POP cx +030 000337 C746FA0000 MOV word ptr [bp-6], 0 +031 00033C C746F80100 MOV word ptr [bp-8], 1 +032 000341 E97900 JMP L1 + +033 0003BD 8B56FA L1: MOV dx, [bp-6] +034 0003C0 8B46F8 MOV ax, [bp-8] +035 0003C3 3B56FE CMP dx, [bp-2] +036 0003C6 7D03 JGE L2 +037 0003C8 E979FF JMP L3 + +038 000344 C746F60100 L3: MOV word ptr [bp-0Ah], 1 +039 000349 EB64 JMP L4 + +040 0003AF 837EF628 L4: CMP word ptr [bp-0Ah], 28h +041 0003B3 7E96 JLE L5 +042 0003B5 8346F801 ADD word ptr [bp-8], 1 +043 0003B9 8356FA00 ADC word ptr [bp-6], 0 +044 JMP L1 ;Synthetic inst + +045 00034B 8B46F2 L5: MOV ax, [bp-0Eh] +046 00034E 0346F4 ADD ax, [bp-0Ch] +047 000351 0346F6 ADD ax, [bp-0Ah] +048 000354 8946F2 MOV [bp-0Eh], ax +049 000357 8B46F2 MOV ax, [bp-0Eh] +050 00035A D1F8 SAR ax, 1 +051 00035C 8946F4 MOV [bp-0Ch], ax +052 00035F 8B46F4 MOV ax, [bp-0Ch] +053 000362 BB0A00 MOV bx, 0Ah +054 000365 99 CWD +056 000366 F7FB IDIV bx +058 000368 8956F2 MOV [bp-0Eh], dx +059 00036B 8B46F4 MOV ax, [bp-0Ch] +060 00036E 3B46F6 CMP ax, [bp-0Ah] +061 000371 7505 JNE L6 +062 000373 B80100 MOV ax, 1 +063 000376 EB02 JMP L7 + +064 00037A 8946F2 L7: MOV [bp-0Eh], ax +065 00037D 8B46F2 MOV ax, [bp-0Eh] +066 000380 0B46F6 OR ax, [bp-0Ah] +067 000383 8946F4 MOV [bp-0Ch], ax +068 000386 8B46F4 MOV ax, [bp-0Ch] +069 000389 F7D8 NEG ax +070 00038B 1BC0 SBB ax, ax +071 00038D 40 INC ax +072 00038E 8946F2 MOV [bp-0Eh], ax +073 000391 8B46F2 MOV ax, [bp-0Eh] +074 000394 0346F6 ADD ax, [bp-0Ah] +075 000397 8946F4 MOV [bp-0Ch], ax +076 00039A 8B46F4 MOV ax, [bp-0Ch] +077 00039D 3B46F6 CMP ax, [bp-0Ah] +078 0003A0 7E05 JLE L8 +079 0003A2 B80100 MOV ax, 1 +080 0003A5 EB02 JMP L9 + +081 0003A9 8946F2 L9: MOV [bp-0Eh], ax +082 0003AC FF46F6 INC word ptr [bp-0Ah] +083 JMP L4 ;Synthetic inst + +084 0003A7 33C0 L8: XOR ax, ax +085 JMP L9 ;Synthetic inst + +086 000378 33C0 L6: XOR ax, ax +087 JMP L7 ;Synthetic inst + +088 0003CB 7F08 L2: JG L10 +089 0003CD 3B46FC CMP ax, [bp-4] +090 0003D0 7703 JA L10 +091 0003D2 E96FFF JMP L3 + +092 0003D5 FF76F2 L10: PUSH word ptr [bp-0Eh] +093 0003D8 B8BA01 MOV ax, 1BAh +094 0003DB 50 PUSH ax +095 0003DC E88C0B CALL near ptr printf +096 0003DF 59 POP cx +097 0003E0 59 POP cx +098 0003E1 8BE5 MOV sp, bp +099 0003E3 5D POP bp +100 0003E4 C3 RET + + main ENDP + diff --git a/tests/prev_base/BENCHSHO.EXE.a2 b/tests/prev_base/BENCHSHO.EXE.a2 new file mode 100644 index 0000000..6e5837e --- /dev/null +++ b/tests/prev_base/BENCHSHO.EXE.a2 @@ -0,0 +1,109 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC0E SUB sp, 0Eh +003 000300 8D46FC LEA ax, [bp-4] +004 000303 50 PUSH ax +005 000304 B89401 MOV ax, 194h +006 000307 50 PUSH ax +007 000308 E8E914 CALL near ptr scanf +008 00030B 59 POP cx +009 00030C 59 POP cx +010 00030D FF76FE PUSH word ptr [bp-2] +011 000310 FF76FC PUSH word ptr [bp-4] +012 000313 B89801 MOV ax, 198h +013 000316 50 PUSH ax +014 000317 E8510C CALL near ptr printf +015 00031A 83C406 ADD sp, 6 +016 00031D 8D46F2 LEA ax, [bp-0Eh] +017 000320 50 PUSH ax +018 000321 B8B201 MOV ax, 1B2h +019 000324 50 PUSH ax +020 000325 E8CC14 CALL near ptr scanf +021 000328 59 POP cx +022 000329 59 POP cx +023 00032A 8D46F4 LEA ax, [bp-0Ch] +024 00032D 50 PUSH ax +025 00032E B8B601 MOV ax, 1B6h +026 000331 50 PUSH ax +027 000332 E8BF14 CALL near ptr scanf +028 000335 59 POP cx +029 000336 59 POP cx +030 000337 C746FA0000 MOV word ptr [bp-6], 0 +031 00033C C746F80100 MOV word ptr [bp-8], 1 + +033 0003BD 8B56FA L1: MOV dx, [bp-6] +034 0003C0 8B46F8 MOV ax, [bp-8] +035 0003C3 3B56FE CMP dx, [bp-2] +036 0003C6 7D03 JGE L2 + +038 000344 C746F60100 L3: MOV word ptr [bp-0Ah], 1 + +040 0003AF 837EF628 L4: CMP word ptr [bp-0Ah], 28h +041 0003B3 7E96 JLE L5 +042 0003B5 8346F801 ADD word ptr [bp-8], 1 +043 0003B9 8356FA00 ADC word ptr [bp-6], 0 +044 JMP L1 ;Synthetic inst + +045 00034B 8B46F2 L5: MOV ax, [bp-0Eh] +046 00034E 0346F4 ADD ax, [bp-0Ch] +047 000351 0346F6 ADD ax, [bp-0Ah] +048 000354 8946F2 MOV [bp-0Eh], ax +049 000357 8B46F2 MOV ax, [bp-0Eh] +050 00035A D1F8 SAR ax, 1 +051 00035C 8946F4 MOV [bp-0Ch], ax +052 00035F 8B46F4 MOV ax, [bp-0Ch] +053 000362 BB0A00 MOV bx, 0Ah +054 000365 99 CWD +055 MOV tmp, dx:ax ;Synthetic inst +056 000366 F7FB IDIV bx +057 MOD bx ;Synthetic inst +058 000368 8956F2 MOV [bp-0Eh], dx +059 00036B 8B46F4 MOV ax, [bp-0Ch] +060 00036E 3B46F6 CMP ax, [bp-0Ah] +061 000371 7505 JNE L6 +062 000373 B80100 MOV ax, 1 + +064 00037A 8946F2 L7: MOV [bp-0Eh], ax +065 00037D 8B46F2 MOV ax, [bp-0Eh] +066 000380 0B46F6 OR ax, [bp-0Ah] +067 000383 8946F4 MOV [bp-0Ch], ax +068 000386 8B46F4 MOV ax, [bp-0Ch] +069 000389 F7D8 NEG ax +070 00038B 1BC0 SBB ax, ax +071 00038D 40 INC ax +072 00038E 8946F2 MOV [bp-0Eh], ax +073 000391 8B46F2 MOV ax, [bp-0Eh] +074 000394 0346F6 ADD ax, [bp-0Ah] +075 000397 8946F4 MOV [bp-0Ch], ax +076 00039A 8B46F4 MOV ax, [bp-0Ch] +077 00039D 3B46F6 CMP ax, [bp-0Ah] +078 0003A0 7E05 JLE L8 +079 0003A2 B80100 MOV ax, 1 + +081 0003A9 8946F2 L9: MOV [bp-0Eh], ax +082 0003AC FF46F6 INC word ptr [bp-0Ah] +083 JMP L4 ;Synthetic inst + +084 0003A7 33C0 L8: XOR ax, ax +085 JMP L9 ;Synthetic inst + +086 000378 33C0 L6: XOR ax, ax +087 JMP L7 ;Synthetic inst + +088 0003CB 7F08 L2: JG L10 +089 0003CD 3B46FC CMP ax, [bp-4] +090 0003D0 7703 JA L10 + +092 0003D5 FF76F2 L10: PUSH word ptr [bp-0Eh] +093 0003D8 B8BA01 MOV ax, 1BAh +094 0003DB 50 PUSH ax +095 0003DC E88C0B CALL near ptr printf +096 0003DF 59 POP cx +097 0003E0 59 POP cx +098 0003E1 8BE5 MOV sp, bp +099 0003E3 5D POP bp +100 0003E4 C3 RET + + main ENDP + diff --git a/tests/prev_base/BENCHSHO.b b/tests/prev_base/BENCHSHO.b new file mode 100644 index 0000000..7786608 --- /dev/null +++ b/tests/prev_base/BENCHSHO.b @@ -0,0 +1,59 @@ +/* + * Input file : ./tests/inputs/BENCHSHO.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; +int loc3; +long loc4; +long loc5; +int loc6; /* ax */ + + scanf ("%ld", &loc0); + printf ("executing %ld iterations\n", loc5); + scanf ("%ld", &loc1); + scanf ("%ld", &loc2); + loc4 = 1; + + while ((loc4 <= loc5)) { + loc3 = 1; + + while ((loc3 <= 40)) { + loc1 = ((loc1 + loc2) + loc3); + loc2 = (loc1 >> 1); + loc1 = (loc2 % 10); + + if (loc2 == loc3) { + loc6 = 1; + } + else { + loc6 = 0; + } + loc1 = loc6; + loc2 = (loc1 | loc3); + loc1 = !loc2; + loc2 = (loc1 + loc3); + + if (loc2 > loc3) { + loc6 = 1; + } + else { + loc6 = 0; + } + loc1 = loc6; + loc3 = (loc3 + 1); + } /* end of while */ + loc4 = (loc4 + 1); + } /* end of while */ + printf ("a=%d\n", loc1); +} + diff --git a/tests/prev_base/BYTEOPS.EXE.a1 b/tests/prev_base/BYTEOPS.EXE.a1 new file mode 100644 index 0000000..80bd09b --- /dev/null +++ b/tests/prev_base/BYTEOPS.EXE.a1 @@ -0,0 +1,58 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC02 SUB sp, 2 +003 000300 C646FEFF MOV byte ptr [bp-2], 0FFh +004 000304 C646FF8F MOV byte ptr [bp-1], 8Fh +005 000308 8A46FE MOV al, [bp-2] +006 00030B 0246FF ADD al, [bp-1] +007 00030E 8846FF MOV [bp-1], al +008 000311 8A46FE MOV al, [bp-2] +009 000314 2A46FF SUB al, [bp-1] +010 000317 8846FE MOV [bp-2], al +011 00031A 8A46FE MOV al, [bp-2] +012 00031D B400 MOV ah, 0 +013 00031F 8A56FF MOV dl, [bp-1] +014 000322 B600 MOV dh, 0 +015 000324 F7E2 MUL dx +016 000326 8846FE MOV [bp-2], al +017 000329 8A46FF MOV al, [bp-1] +018 00032C B400 MOV ah, 0 +019 00032E 8A56FE MOV dl, [bp-2] +020 000331 B600 MOV dh, 0 +021 000333 8BDA MOV bx, dx +022 000335 99 CWD +024 000336 F7FB IDIV bx +026 000338 8846FF MOV [bp-1], al +027 00033B 8A46FF MOV al, [bp-1] +028 00033E B400 MOV ah, 0 +029 000340 8A56FE MOV dl, [bp-2] +030 000343 B600 MOV dh, 0 +031 000345 8BDA MOV bx, dx +032 000347 99 CWD +034 000348 F7FB IDIV bx +036 00034A 8856FF MOV [bp-1], dl +037 00034D 8A46FE MOV al, [bp-2] +038 000350 B105 MOV cl, 5 +039 000352 D2E0 SHL al, cl +040 000354 8846FE MOV [bp-2], al +041 000357 8A46FF MOV al, [bp-1] +042 00035A 8A4EFE MOV cl, [bp-2] +043 00035D D2E8 SHR al, cl +044 00035F 8846FF MOV [bp-1], al +045 000362 8A46FF MOV al, [bp-1] +046 000365 B400 MOV ah, 0 +047 000367 50 PUSH ax +048 000368 8A46FE MOV al, [bp-2] +049 00036B B400 MOV ah, 0 +050 00036D 50 PUSH ax +051 00036E B89401 MOV ax, 194h +052 000371 50 PUSH ax +053 000372 E8AB06 CALL near ptr printf +054 000375 83C406 ADD sp, 6 +055 000378 8BE5 MOV sp, bp +056 00037A 5D POP bp +057 00037B C3 RET + + main ENDP + diff --git a/tests/prev_base/BYTEOPS.EXE.a2 b/tests/prev_base/BYTEOPS.EXE.a2 new file mode 100644 index 0000000..01f6b52 --- /dev/null +++ b/tests/prev_base/BYTEOPS.EXE.a2 @@ -0,0 +1,62 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC02 SUB sp, 2 +003 000300 C646FEFF MOV byte ptr [bp-2], 0FFh +004 000304 C646FF8F MOV byte ptr [bp-1], 8Fh +005 000308 8A46FE MOV al, [bp-2] +006 00030B 0246FF ADD al, [bp-1] +007 00030E 8846FF MOV [bp-1], al +008 000311 8A46FE MOV al, [bp-2] +009 000314 2A46FF SUB al, [bp-1] +010 000317 8846FE MOV [bp-2], al +011 00031A 8A46FE MOV al, [bp-2] +012 00031D B400 MOV ah, 0 +013 00031F 8A56FF MOV dl, [bp-1] +014 000322 B600 MOV dh, 0 +015 000324 F7E2 MUL dx +016 000326 8846FE MOV [bp-2], al +017 000329 8A46FF MOV al, [bp-1] +018 00032C B400 MOV ah, 0 +019 00032E 8A56FE MOV dl, [bp-2] +020 000331 B600 MOV dh, 0 +021 000333 8BDA MOV bx, dx +022 000335 99 CWD +023 MOV tmp, dx:ax ;Synthetic inst +024 000336 F7FB IDIV bx +025 MOD bx ;Synthetic inst +026 000338 8846FF MOV [bp-1], al +027 00033B 8A46FF MOV al, [bp-1] +028 00033E B400 MOV ah, 0 +029 000340 8A56FE MOV dl, [bp-2] +030 000343 B600 MOV dh, 0 +031 000345 8BDA MOV bx, dx +032 000347 99 CWD +033 MOV tmp, dx:ax ;Synthetic inst +034 000348 F7FB IDIV bx +035 MOD bx ;Synthetic inst +036 00034A 8856FF MOV [bp-1], dl +037 00034D 8A46FE MOV al, [bp-2] +038 000350 B105 MOV cl, 5 +039 000352 D2E0 SHL al, cl +040 000354 8846FE MOV [bp-2], al +041 000357 8A46FF MOV al, [bp-1] +042 00035A 8A4EFE MOV cl, [bp-2] +043 00035D D2E8 SHR al, cl +044 00035F 8846FF MOV [bp-1], al +045 000362 8A46FF MOV al, [bp-1] +046 000365 B400 MOV ah, 0 +047 000367 50 PUSH ax +048 000368 8A46FE MOV al, [bp-2] +049 00036B B400 MOV ah, 0 +050 00036D 50 PUSH ax +051 00036E B89401 MOV ax, 194h +052 000371 50 PUSH ax +053 000372 E8AB06 CALL near ptr printf +054 000375 83C406 ADD sp, 6 +055 000378 8BE5 MOV sp, bp +056 00037A 5D POP bp +057 00037B C3 RET + + main ENDP + diff --git a/tests/prev_base/BYTEOPS.b b/tests/prev_base/BYTEOPS.b new file mode 100644 index 0000000..219e8cd --- /dev/null +++ b/tests/prev_base/BYTEOPS.b @@ -0,0 +1,28 @@ +/* + * Input file : ./tests/inputs/BYTEOPS.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; + + loc1 = 255; + loc2 = 143; + loc2 = (loc1 + loc2); + loc1 = (loc1 - loc2); + loc1 = (loc1 * loc2); + loc2 = (loc2 / loc1); + loc2 = (loc2 % loc1); + loc1 = (loc1 << 5); + loc2 = (loc2 >> loc1); + printf ("a = %d, b = %d\n", loc1, loc2); +} + diff --git a/tests/prev_base/FIBOS.EXE.a1 b/tests/prev_base/FIBOS.EXE.a1 new file mode 100644 index 0000000..400cc2a --- /dev/null +++ b/tests/prev_base/FIBOS.EXE.a1 @@ -0,0 +1,90 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC04 SUB sp, 4 +003 000300 56 PUSH si +004 000301 57 PUSH di +005 000302 B89401 MOV ax, 194h +006 000305 50 PUSH ax +007 000306 E8080C CALL near ptr printf +008 000309 59 POP cx +009 00030A 8D46FC LEA ax, [bp-4] +010 00030D 50 PUSH ax +011 00030E B8B101 MOV ax, 1B1h +012 000311 50 PUSH ax +013 000312 E88514 CALL near ptr scanf +014 000315 59 POP cx +015 000316 59 POP cx +016 000317 BE0100 MOV si, 1 +017 00031A EB2D JMP L1 + +018 000349 3B76FC L1: CMP si, [bp-4] +019 00034C 7ECE JLE L2 +020 00034E 33C0 XOR ax, ax +021 000350 50 PUSH ax +022 000351 E87300 CALL near ptr exit +023 000354 59 POP cx +024 000355 5F POP di +025 000356 5E POP si +026 000357 8BE5 MOV sp, bp +027 000359 5D POP bp +028 00035A C3 RET + +029 00031C B8B401 L2: MOV ax, 1B4h +030 00031F 50 PUSH ax +031 000320 E8EE0B CALL near ptr printf +032 000323 59 POP cx +033 000324 8D46FE LEA ax, [bp-2] +034 000327 50 PUSH ax +035 000328 B8C301 MOV ax, 1C3h +036 00032B 50 PUSH ax +037 00032C E86B14 CALL near ptr scanf +038 00032F 59 POP cx +039 000330 59 POP cx +040 000331 FF76FE PUSH word ptr [bp-2] +041 000334 E82400 CALL near ptr proc_1 +042 000337 59 POP cx +043 000338 8BF8 MOV di, ax +044 00033A 57 PUSH di +045 00033B FF76FE PUSH word ptr [bp-2] +046 00033E B8C601 MOV ax, 1C6h +047 000341 50 PUSH ax +048 000342 E8CC0B CALL near ptr printf +049 000345 83C406 ADD sp, 6 +050 000348 46 INC si +051 JMP L1 ;Synthetic inst + + main ENDP + + proc_1 PROC NEAR +000 00035B 55 PUSH bp +001 00035C 8BEC MOV bp, sp +002 00035E 56 PUSH si +003 00035F 8B7604 MOV si, [bp+4] +004 000362 83FE02 CMP si, 2 +005 000365 7E1C JLE L3 +006 000367 8BC6 MOV ax, si +007 000369 48 DEC ax +008 00036A 50 PUSH ax +009 00036B E8EDFF CALL near ptr proc_1 +010 00036E 59 POP cx +011 00036F 50 PUSH ax +012 000370 8BC6 MOV ax, si +013 000372 05FEFF ADD ax, 0FFFEh +014 000375 50 PUSH ax +015 000376 E8E2FF CALL near ptr proc_1 +016 000379 59 POP cx +017 00037A 8BD0 MOV dx, ax +018 00037C 58 POP ax +019 00037D 03C2 ADD ax, dx +020 00037F EB07 JMP L4 + +021 000388 5E L4: POP si +022 000389 5D POP bp +023 00038A C3 RET + +024 000383 B80100 L3: MOV ax, 1 +025 000386 EB00 JMP L4 + + proc_1 ENDP + diff --git a/tests/prev_base/FIBOS.EXE.a2 b/tests/prev_base/FIBOS.EXE.a2 new file mode 100644 index 0000000..51f5edf --- /dev/null +++ b/tests/prev_base/FIBOS.EXE.a2 @@ -0,0 +1,88 @@ + proc_1 PROC NEAR +000 00035B 55 PUSH bp +001 00035C 8BEC MOV bp, sp +002 00035E 56 PUSH si +003 00035F 8B7604 MOV si, [bp+4] +004 000362 83FE02 CMP si, 2 +005 000365 7E1C JLE L1 +006 000367 8BC6 MOV ax, si +007 000369 48 DEC ax +008 00036A 50 PUSH ax +009 00036B E8EDFF CALL near ptr proc_1 +010 00036E 59 POP cx +011 00036F 50 PUSH ax +012 000370 8BC6 MOV ax, si +013 000372 05FEFF ADD ax, 0FFFEh +014 000375 50 PUSH ax +015 000376 E8E2FF CALL near ptr proc_1 +016 000379 59 POP cx +017 00037A 8BD0 MOV dx, ax +018 00037C 58 POP ax +019 00037D 03C2 ADD ax, dx + +021 000388 5E L2: POP si +022 000389 5D POP bp +023 00038A C3 RET + +024 000383 B80100 L1: MOV ax, 1 +025 000386 EB00 JMP L2 + + proc_1 ENDP + + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC04 SUB sp, 4 +003 000300 56 PUSH si +004 000301 57 PUSH di +005 000302 B89401 MOV ax, 194h +006 000305 50 PUSH ax +007 000306 E8080C CALL near ptr printf +008 000309 59 POP cx +009 00030A 8D46FC LEA ax, [bp-4] +010 00030D 50 PUSH ax +011 00030E B8B101 MOV ax, 1B1h +012 000311 50 PUSH ax +013 000312 E88514 CALL near ptr scanf +014 000315 59 POP cx +015 000316 59 POP cx +016 000317 BE0100 MOV si, 1 + +018 000349 3B76FC L3: CMP si, [bp-4] +019 00034C 7ECE JLE L4 +020 00034E 33C0 XOR ax, ax +021 000350 50 PUSH ax +022 000351 E87300 CALL near ptr exit +023 000354 59 POP cx +024 000355 5F POP di +025 000356 5E POP si +026 000357 8BE5 MOV sp, bp +027 000359 5D POP bp +028 00035A C3 RET + +029 00031C B8B401 L4: MOV ax, 1B4h +030 00031F 50 PUSH ax +031 000320 E8EE0B CALL near ptr printf +032 000323 59 POP cx +033 000324 8D46FE LEA ax, [bp-2] +034 000327 50 PUSH ax +035 000328 B8C301 MOV ax, 1C3h +036 00032B 50 PUSH ax +037 00032C E86B14 CALL near ptr scanf +038 00032F 59 POP cx +039 000330 59 POP cx +040 000331 FF76FE PUSH word ptr [bp-2] +041 000334 E82400 CALL near ptr proc_1 +042 000337 59 POP cx +043 000338 8BF8 MOV di, ax +044 00033A 57 PUSH di +045 00033B FF76FE PUSH word ptr [bp-2] +046 00033E B8C601 MOV ax, 1C6h +047 000341 50 PUSH ax +048 000342 E8CC0B CALL near ptr printf +049 000345 83C406 ADD sp, 6 +050 000348 46 INC si +051 JMP L3 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/FIBOS.b b/tests/prev_base/FIBOS.b new file mode 100644 index 0000000..aec76cf --- /dev/null +++ b/tests/prev_base/FIBOS.b @@ -0,0 +1,53 @@ +/* + * Input file : ./tests/inputs/FIBOS.EXE + * File type : EXE + */ + +#include "dcc.h" + + +int proc_1 (int arg0) +/* Takes 2 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; +int loc2; /* ax */ + + loc1 = arg0; + + if (loc1 > 2) { + loc2 = (proc_1 ((loc1 - 1)) + proc_1 ((loc1 + 0xfffe))); + } + else { + loc2 = 1; + } + return (loc2); +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; +int loc3; +int loc4; + + printf ("Input number of iterations: "); + scanf ("%d", &loc1); + loc3 = 1; + + while ((loc3 <= loc1)) { + printf ("Input number: "); + scanf ("%d", &loc2); + loc4 = proc_1 (loc2); + printf ("fibonacci(%d) = %u\n", loc2, loc4); + loc3 = (loc3 + 1); + } /* end of while */ + exit (0); +} + diff --git a/tests/prev_base/INTERCEP.EXE.a1 b/tests/prev_base/INTERCEP.EXE.a1 new file mode 100644 index 0000000..0ce1235 --- /dev/null +++ b/tests/prev_base/INTERCEP.EXE.a1 @@ -0,0 +1,284 @@ + start PROC NEAR +000 000110 B83500 MOV ax, 35h ;Segment constant +001 000113 8ED8 MOV ds, ax +002 000115 8EC0 MOV es, ax +003 000117 E89F01 CALL near ptr proc_1 +004 00011A B403 MOV ah, 3 +005 00011C B700 MOV bh, 0 +006 00011E CD10 INT 10h /* Unknown int */ + +007 000120 882E0600 MOV [6], ch +008 000124 880E0700 MOV [7], cl +009 000128 B401 MOV ah, 1 +010 00012A 80CD04 OR ch, 4 +011 00012D 80E50D AND ch, 0Dh +012 000130 CD10 INT 10h /* Unknown int */ + +013 000132 B60A MOV dh, 0Ah +014 000134 B21E MOV dl, 1Eh +015 000136 E89901 CALL near ptr proc_2 +016 000139 B2C9 MOV dl, 0C9h +017 00013B E89F01 CALL near ptr proc_3 +018 00013E B91100 MOV cx, 11h +019 000141 B2CD MOV dl, 0CDh + +020 000143 E89701 L1: CALL near ptr proc_3 +021 000146 E2FB LOOP L1 +022 000148 B2BB MOV dl, 0BBh +023 00014A E89001 CALL near ptr proc_3 +024 00014D B60E MOV dh, 0Eh +025 00014F B21E MOV dl, 1Eh +026 000151 E87E01 CALL near ptr proc_2 +027 000154 B2C8 MOV dl, 0C8h +028 000156 E88401 CALL near ptr proc_3 +029 000159 B91100 MOV cx, 11h +030 00015C B2CD MOV dl, 0CDh + +031 00015E E87C01 L2: CALL near ptr proc_3 +032 000161 E2FB LOOP L2 +033 000163 B2BC MOV dl, 0BCh +034 000165 E87501 CALL near ptr proc_3 +035 000168 B60B MOV dh, 0Bh +036 00016A B21E MOV dl, 1Eh +037 00016C E86301 CALL near ptr proc_2 +038 00016F B90300 MOV cx, 3 + +039 000172 52 L3: PUSH dx +040 000173 B2BA MOV dl, 0BAh +041 000175 E86501 CALL near ptr proc_3 +042 000178 5A POP dx +043 000179 FEC6 INC dh +044 00017B E85401 CALL near ptr proc_2 +045 00017E E2F2 LOOP L3 +046 000180 B60B MOV dh, 0Bh +047 000182 B230 MOV dl, 30h +048 000184 E84B01 CALL near ptr proc_2 +049 000187 B90300 MOV cx, 3 + +050 00018A 52 L4: PUSH dx +051 00018B B2BA MOV dl, 0BAh +052 00018D E84D01 CALL near ptr proc_3 +053 000190 5A POP dx +054 000191 FEC6 INC dh +055 000193 E83C01 CALL near ptr proc_2 +056 000196 E2F2 LOOP L4 +057 000198 B60C MOV dh, 0Ch +058 00019A B220 MOV dl, 20h +059 00019C E83301 CALL near ptr proc_2 +060 00019F BA0800 MOV dx, 8 +061 0001A2 E8F300 CALL near ptr proc_6 +062 0001A5 B616 MOV dh, 16h +063 0001A7 B220 MOV dl, 20h +064 0001A9 E82601 CALL near ptr proc_2 +065 0001AC BA1800 MOV dx, 18h +066 0001AF E8E600 CALL near ptr proc_6 +067 0001B2 B618 MOV dh, 18h +068 0001B4 B21E MOV dl, 1Eh +069 0001B6 E81901 CALL near ptr proc_2 +070 0001B9 BA2800 MOV dx, 28h +071 0001BC E8D900 CALL near ptr proc_6 +072 0001BF B91400 MOV cx, 14h + +073 0001C2 E8C400 L5: CALL near ptr proc_7 +074 0001C5 E2FB LOOP L5 +075 0001C7 E8EF00 CALL near ptr proc_1 +076 0001CA B600 MOV dh, 0 +077 0001CC B200 MOV dl, 0 +078 0001CE E80101 CALL near ptr proc_2 +079 0001D1 BA3B00 MOV dx, 3Bh +080 0001D4 E8C100 CALL near ptr proc_6 +081 0001D7 B601 MOV dh, 1 +082 0001D9 B200 MOV dl, 0 +083 0001DB E8F400 CALL near ptr proc_2 +084 0001DE BA8700 MOV dx, 87h +085 0001E1 E8B400 CALL near ptr proc_6 +086 0001E4 B602 MOV dh, 2 +087 0001E6 B200 MOV dl, 0 +088 0001E8 E8E700 CALL near ptr proc_2 +089 0001EB BAD000 MOV dx, 0D0h +090 0001EE E8A700 CALL near ptr proc_6 +091 0001F1 B603 MOV dh, 3 +092 0001F3 B200 MOV dl, 0 +093 0001F5 E8DA00 CALL near ptr proc_2 +094 0001F8 BA1F01 MOV dx, 11Fh +095 0001FB E89A00 CALL near ptr proc_6 +096 0001FE B604 MOV dh, 4 +097 000200 B200 MOV dl, 0 +098 000202 E8CD00 CALL near ptr proc_2 +099 000205 BA6A01 MOV dx, 16Ah +100 000208 E88D00 CALL near ptr proc_6 +101 00020B B607 MOV dh, 7 +102 00020D B200 MOV dl, 0 +103 00020F E8C000 CALL near ptr proc_2 +104 000212 BA8C01 MOV dx, 18Ch +105 000215 E88000 CALL near ptr proc_6 +106 000218 B608 MOV dh, 8 +107 00021A B200 MOV dl, 0 +108 00021C E8B300 CALL near ptr proc_2 +109 00021F BAD501 MOV dx, 1D5h +110 000222 E87300 CALL near ptr proc_6 +111 000225 B60B MOV dh, 0Bh +112 000227 B200 MOV dl, 0 +113 000229 E8A600 CALL near ptr proc_2 +114 00022C BAFD01 MOV dx, 1FDh +115 00022F E86600 CALL near ptr proc_6 +116 000232 B60D MOV dh, 0Dh +117 000234 B200 MOV dl, 0 +118 000236 E89900 CALL near ptr proc_2 +119 000239 BA3602 MOV dx, 236h +120 00023C E85900 CALL near ptr proc_6 +121 00023F B60F MOV dh, 0Fh +122 000241 B200 MOV dl, 0 +123 000243 E88C00 CALL near ptr proc_2 +124 000246 BA7C02 MOV dx, 27Ch +125 000249 E84C00 CALL near ptr proc_6 +126 00024C B610 MOV dh, 10h +127 00024E B200 MOV dl, 0 +128 000250 E87F00 CALL near ptr proc_2 +129 000253 BAC602 MOV dx, 2C6h +130 000256 E83F00 CALL near ptr proc_6 +131 000259 B618 MOV dh, 18h +132 00025B B200 MOV dl, 0 +133 00025D E87200 CALL near ptr proc_2 +134 000260 BAD802 MOV dx, 2D8h +135 000263 E83200 CALL near ptr proc_6 + +136 000266 B400 L6: MOV ah, 0 +137 000268 CD16 INT 16h /* Unknown int */ + +138 00026A 80FC1C CMP ah, 1Ch +139 00026D 75F7 JNE L6 +140 00026F B401 MOV ah, 1 +141 000271 8A2E0600 MOV ch, [6] +142 000275 8A0E0700 MOV cl, [7] +143 000279 CD10 INT 10h /* Unknown int */ + +144 00027B B8004C MOV ax, 4C00h +145 00027E CD21 INT 21h ;Exit to DOS /* Terminate process with return code */ + + + start ENDP + + proc_1 PROC NEAR +000 0002B9 50 PUSH ax +001 0002BA 53 PUSH bx +002 0002BB 51 PUSH cx +003 0002BC 52 PUSH dx +004 0002BD 32C0 XOR al, al +005 0002BF B500 MOV ch, 0 +006 0002C1 B100 MOV cl, 0 +007 0002C3 B618 MOV dh, 18h +008 0002C5 B24F MOV dl, 4Fh +009 0002C7 B707 MOV bh, 7 +010 0002C9 B406 MOV ah, 6 +011 0002CB CD10 INT 10h /* Unknown int */ + +012 0002CD 5A POP dx +013 0002CE 59 POP cx +014 0002CF 5B POP bx +015 0002D0 58 POP ax +016 0002D1 C3 RET + + proc_1 ENDP + + proc_2 PROC NEAR +000 0002D2 50 PUSH ax +001 0002D3 53 PUSH bx +002 0002D4 B700 MOV bh, 0 +003 0002D6 B402 MOV ah, 2 +004 0002D8 CD10 INT 10h /* Unknown int */ + +005 0002DA 5B POP bx +006 0002DB 58 POP ax +007 0002DC C3 RET + + proc_2 ENDP + + proc_3 PROC NEAR +000 0002DD 50 PUSH ax +001 0002DE 53 PUSH bx +002 0002DF 51 PUSH cx +003 0002E0 52 PUSH dx +004 0002E1 B409 MOV ah, 9 +005 0002E3 B700 MOV bh, 0 +006 0002E5 B90100 MOV cx, 1 +007 0002E8 8AC2 MOV al, dl +008 0002EA B307 MOV bl, 7 +009 0002EC CD10 INT 10h /* Unknown int */ + +010 0002EE E81E00 CALL near ptr proc_4 +011 0002F1 5A POP dx +012 0002F2 59 POP cx +013 0002F3 5B POP bx +014 0002F4 58 POP ax +015 0002F5 C3 RET + + proc_3 ENDP + + proc_4 PROC NEAR +000 00030F 50 PUSH ax +001 000310 53 PUSH bx +002 000311 51 PUSH cx +003 000312 52 PUSH dx +004 000313 B403 MOV ah, 3 +005 000315 B700 MOV bh, 0 +006 000317 CD10 INT 10h /* Unknown int */ + +007 000319 B402 MOV ah, 2 +008 00031B FEC2 INC dl +009 00031D 80FA4F CMP dl, 4Fh +010 000320 7606 JBE L7 +011 000322 E82000 CALL near ptr proc_5 +012 000325 EB03 JMP L8 + +013 00032A 5A L8: POP dx +014 00032B 59 POP cx +015 00032C 5B POP bx +016 00032D 58 POP ax +017 00032E C3 RET + +018 000328 CD10 L7: INT 10h /* Unknown int */ + +019 JMP L8 ;Synthetic inst + + proc_4 ENDP + + proc_5 PROC NEAR +000 000345 50 PUSH ax +001 000346 52 PUSH dx +002 000347 B402 MOV ah, 2 +003 000349 B20D MOV dl, 0Dh +004 00034B CD21 INT 21h /* Character output */ + +005 00034D B20A MOV dl, 0Ah +006 00034F CD21 INT 21h /* Character output */ + +007 000351 5A POP dx +008 000352 58 POP ax +009 000353 C3 RET + + proc_5 ENDP + + proc_6 PROC NEAR +000 000298 B409 MOV ah, 9 +001 00029A CD21 INT 21h /* Display string */ + +002 00029C C3 RET + + proc_6 ENDP + + proc_7 PROC NEAR +000 000289 51 PUSH cx +001 00028A B100 MOV cl, 0 + +002 00028C B500 L9: MOV ch, 0 + +003 00028E FECD L10: DEC ch +004 000290 75FC JNE L10 +005 000292 FEC9 DEC cl +006 000294 75F6 JNE L9 +007 000296 59 POP cx +008 000297 C3 RET + + proc_7 ENDP + diff --git a/tests/prev_base/INTERCEP.EXE.a2 b/tests/prev_base/INTERCEP.EXE.a2 new file mode 100644 index 0000000..5868898 --- /dev/null +++ b/tests/prev_base/INTERCEP.EXE.a2 @@ -0,0 +1,283 @@ + proc_7 PROC NEAR +000 000289 51 PUSH cx +001 00028A B100 MOV cl, 0 + +002 00028C B500 L1: MOV ch, 0 + +003 00028E FECD L2: DEC ch +004 000290 75FC JNE L2 +005 000292 FEC9 DEC cl +006 000294 75F6 JNE L1 +007 000296 59 POP cx +008 000297 C3 RET + + proc_7 ENDP + + proc_6 PROC NEAR +000 000298 B409 MOV ah, 9 +001 00029A CD21 INT 21h /* Display string */ + +002 00029C C3 RET + + proc_6 ENDP + + proc_5 PROC NEAR +000 000345 50 PUSH ax +001 000346 52 PUSH dx +002 000347 B402 MOV ah, 2 +003 000349 B20D MOV dl, 0Dh +004 00034B CD21 INT 21h /* Character output */ + +005 00034D B20A MOV dl, 0Ah +006 00034F CD21 INT 21h /* Character output */ + +007 000351 5A POP dx +008 000352 58 POP ax +009 000353 C3 RET + + proc_5 ENDP + + proc_4 PROC NEAR +000 00030F 50 PUSH ax +001 000310 53 PUSH bx +002 000311 51 PUSH cx +003 000312 52 PUSH dx +004 000313 B403 MOV ah, 3 +005 000315 B700 MOV bh, 0 +006 000317 CD10 INT 10h /* Unknown int */ + +007 000319 B402 MOV ah, 2 +008 00031B FEC2 INC dl +009 00031D 80FA4F CMP dl, 4Fh +010 000320 7606 JBE L3 +011 000322 E82000 CALL near ptr proc_5 + +013 00032A 5A L4: POP dx +014 00032B 59 POP cx +015 00032C 5B POP bx +016 00032D 58 POP ax +017 00032E C3 RET + +018 000328 CD10 L3: INT 10h /* Unknown int */ + +019 JMP L4 ;Synthetic inst + + proc_4 ENDP + + proc_3 PROC NEAR +000 0002DD 50 PUSH ax +001 0002DE 53 PUSH bx +002 0002DF 51 PUSH cx +003 0002E0 52 PUSH dx +004 0002E1 B409 MOV ah, 9 +005 0002E3 B700 MOV bh, 0 +006 0002E5 B90100 MOV cx, 1 +007 0002E8 8AC2 MOV al, dl +008 0002EA B307 MOV bl, 7 +009 0002EC CD10 INT 10h /* Unknown int */ + +010 0002EE E81E00 CALL near ptr proc_4 +011 0002F1 5A POP dx +012 0002F2 59 POP cx +013 0002F3 5B POP bx +014 0002F4 58 POP ax +015 0002F5 C3 RET + + proc_3 ENDP + + proc_2 PROC NEAR +000 0002D2 50 PUSH ax +001 0002D3 53 PUSH bx +002 0002D4 B700 MOV bh, 0 +003 0002D6 B402 MOV ah, 2 +004 0002D8 CD10 INT 10h /* Unknown int */ + +005 0002DA 5B POP bx +006 0002DB 58 POP ax +007 0002DC C3 RET + + proc_2 ENDP + + proc_1 PROC NEAR +000 0002B9 50 PUSH ax +001 0002BA 53 PUSH bx +002 0002BB 51 PUSH cx +003 0002BC 52 PUSH dx +004 0002BD 32C0 XOR al, al +005 0002BF B500 MOV ch, 0 +006 0002C1 B100 MOV cl, 0 +007 0002C3 B618 MOV dh, 18h +008 0002C5 B24F MOV dl, 4Fh +009 0002C7 B707 MOV bh, 7 +010 0002C9 B406 MOV ah, 6 +011 0002CB CD10 INT 10h /* Unknown int */ + +012 0002CD 5A POP dx +013 0002CE 59 POP cx +014 0002CF 5B POP bx +015 0002D0 58 POP ax +016 0002D1 C3 RET + + proc_1 ENDP + + start PROC NEAR +000 000110 B83500 MOV ax, 35h ;Segment constant +001 000113 8ED8 MOV ds, ax +002 000115 8EC0 MOV es, ax +003 000117 E89F01 CALL near ptr proc_1 +004 00011A B403 MOV ah, 3 +005 00011C B700 MOV bh, 0 +006 00011E CD10 INT 10h /* Unknown int */ + +007 000120 882E0600 MOV [6], ch +008 000124 880E0700 MOV [7], cl +009 000128 B401 MOV ah, 1 +010 00012A 80CD04 OR ch, 4 +011 00012D 80E50D AND ch, 0Dh +012 000130 CD10 INT 10h /* Unknown int */ + +013 000132 B60A MOV dh, 0Ah +014 000134 B21E MOV dl, 1Eh +015 000136 E89901 CALL near ptr proc_2 +016 000139 B2C9 MOV dl, 0C9h +017 00013B E89F01 CALL near ptr proc_3 +018 00013E B91100 MOV cx, 11h +019 000141 B2CD MOV dl, 0CDh + +020 000143 E89701 L5: CALL near ptr proc_3 +021 000146 E2FB LOOP L5 +022 000148 B2BB MOV dl, 0BBh +023 00014A E89001 CALL near ptr proc_3 +024 00014D B60E MOV dh, 0Eh +025 00014F B21E MOV dl, 1Eh +026 000151 E87E01 CALL near ptr proc_2 +027 000154 B2C8 MOV dl, 0C8h +028 000156 E88401 CALL near ptr proc_3 +029 000159 B91100 MOV cx, 11h +030 00015C B2CD MOV dl, 0CDh + +031 00015E E87C01 L6: CALL near ptr proc_3 +032 000161 E2FB LOOP L6 +033 000163 B2BC MOV dl, 0BCh +034 000165 E87501 CALL near ptr proc_3 +035 000168 B60B MOV dh, 0Bh +036 00016A B21E MOV dl, 1Eh +037 00016C E86301 CALL near ptr proc_2 +038 00016F B90300 MOV cx, 3 + +039 000172 52 L7: PUSH dx +040 000173 B2BA MOV dl, 0BAh +041 000175 E86501 CALL near ptr proc_3 +042 000178 5A POP dx +043 000179 FEC6 INC dh +044 00017B E85401 CALL near ptr proc_2 +045 00017E E2F2 LOOP L7 +046 000180 B60B MOV dh, 0Bh +047 000182 B230 MOV dl, 30h +048 000184 E84B01 CALL near ptr proc_2 +049 000187 B90300 MOV cx, 3 + +050 00018A 52 L8: PUSH dx +051 00018B B2BA MOV dl, 0BAh +052 00018D E84D01 CALL near ptr proc_3 +053 000190 5A POP dx +054 000191 FEC6 INC dh +055 000193 E83C01 CALL near ptr proc_2 +056 000196 E2F2 LOOP L8 +057 000198 B60C MOV dh, 0Ch +058 00019A B220 MOV dl, 20h +059 00019C E83301 CALL near ptr proc_2 +060 00019F BA0800 MOV dx, 8 +061 0001A2 E8F300 CALL near ptr proc_6 +062 0001A5 B616 MOV dh, 16h +063 0001A7 B220 MOV dl, 20h +064 0001A9 E82601 CALL near ptr proc_2 +065 0001AC BA1800 MOV dx, 18h +066 0001AF E8E600 CALL near ptr proc_6 +067 0001B2 B618 MOV dh, 18h +068 0001B4 B21E MOV dl, 1Eh +069 0001B6 E81901 CALL near ptr proc_2 +070 0001B9 BA2800 MOV dx, 28h +071 0001BC E8D900 CALL near ptr proc_6 +072 0001BF B91400 MOV cx, 14h + +073 0001C2 E8C400 L9: CALL near ptr proc_7 +074 0001C5 E2FB LOOP L9 +075 0001C7 E8EF00 CALL near ptr proc_1 +076 0001CA B600 MOV dh, 0 +077 0001CC B200 MOV dl, 0 +078 0001CE E80101 CALL near ptr proc_2 +079 0001D1 BA3B00 MOV dx, 3Bh +080 0001D4 E8C100 CALL near ptr proc_6 +081 0001D7 B601 MOV dh, 1 +082 0001D9 B200 MOV dl, 0 +083 0001DB E8F400 CALL near ptr proc_2 +084 0001DE BA8700 MOV dx, 87h +085 0001E1 E8B400 CALL near ptr proc_6 +086 0001E4 B602 MOV dh, 2 +087 0001E6 B200 MOV dl, 0 +088 0001E8 E8E700 CALL near ptr proc_2 +089 0001EB BAD000 MOV dx, 0D0h +090 0001EE E8A700 CALL near ptr proc_6 +091 0001F1 B603 MOV dh, 3 +092 0001F3 B200 MOV dl, 0 +093 0001F5 E8DA00 CALL near ptr proc_2 +094 0001F8 BA1F01 MOV dx, 11Fh +095 0001FB E89A00 CALL near ptr proc_6 +096 0001FE B604 MOV dh, 4 +097 000200 B200 MOV dl, 0 +098 000202 E8CD00 CALL near ptr proc_2 +099 000205 BA6A01 MOV dx, 16Ah +100 000208 E88D00 CALL near ptr proc_6 +101 00020B B607 MOV dh, 7 +102 00020D B200 MOV dl, 0 +103 00020F E8C000 CALL near ptr proc_2 +104 000212 BA8C01 MOV dx, 18Ch +105 000215 E88000 CALL near ptr proc_6 +106 000218 B608 MOV dh, 8 +107 00021A B200 MOV dl, 0 +108 00021C E8B300 CALL near ptr proc_2 +109 00021F BAD501 MOV dx, 1D5h +110 000222 E87300 CALL near ptr proc_6 +111 000225 B60B MOV dh, 0Bh +112 000227 B200 MOV dl, 0 +113 000229 E8A600 CALL near ptr proc_2 +114 00022C BAFD01 MOV dx, 1FDh +115 00022F E86600 CALL near ptr proc_6 +116 000232 B60D MOV dh, 0Dh +117 000234 B200 MOV dl, 0 +118 000236 E89900 CALL near ptr proc_2 +119 000239 BA3602 MOV dx, 236h +120 00023C E85900 CALL near ptr proc_6 +121 00023F B60F MOV dh, 0Fh +122 000241 B200 MOV dl, 0 +123 000243 E88C00 CALL near ptr proc_2 +124 000246 BA7C02 MOV dx, 27Ch +125 000249 E84C00 CALL near ptr proc_6 +126 00024C B610 MOV dh, 10h +127 00024E B200 MOV dl, 0 +128 000250 E87F00 CALL near ptr proc_2 +129 000253 BAC602 MOV dx, 2C6h +130 000256 E83F00 CALL near ptr proc_6 +131 000259 B618 MOV dh, 18h +132 00025B B200 MOV dl, 0 +133 00025D E87200 CALL near ptr proc_2 +134 000260 BAD802 MOV dx, 2D8h +135 000263 E83200 CALL near ptr proc_6 + +136 000266 B400 L10: MOV ah, 0 +137 000268 CD16 INT 16h /* Unknown int */ + +138 00026A 80FC1C CMP ah, 1Ch +139 00026D 75F7 JNE L10 +140 00026F B401 MOV ah, 1 +141 000271 8A2E0600 MOV ch, [6] +142 000275 8A0E0700 MOV cl, [7] +143 000279 CD10 INT 10h /* Unknown int */ + +144 00027B B8004C MOV ax, 4C00h +145 00027E CD21 INT 21h ;Exit to DOS /* Terminate process with return code */ + + + start ENDP + diff --git a/tests/prev_base/MIN.EXE.a1 b/tests/prev_base/MIN.EXE.a1 new file mode 100644 index 0000000..6036205 --- /dev/null +++ b/tests/prev_base/MIN.EXE.a1 @@ -0,0 +1,39 @@ + start PROC NEAR +000 000100 55 PUSH bp +001 000101 8BEC MOV bp, sp +002 000103 83EC02 SUB sp, 2 +003 000106 C746FE0000 MOV word ptr [bp-2], 0 +004 00010B 8B46FE MOV ax, [bp-2] +005 00010E 3D0600 CMP ax, 6 +006 000111 7735 JA L1 +007 000113 8BD8 MOV bx, ax +008 000115 D1E3 SHL bx, 1 +009 000117 2EFFA71C00 JMP word ptr cs:[bx+1Ch];Switch + +010 00012A B80200 MOV ax, 2 ;Case l0 +011 00012D EB1E JMP L2 + +012 00014D 8BE5 L2: MOV sp, bp +013 00014F 5D POP bp +014 000150 C3 RET + +015 00012F B80300 MOV ax, 3 ;Case l1 +016 000132 EB19 JMP L2 + +017 000134 B80700 MOV ax, 7 ;Case l2 +018 000137 EB14 JMP L2 + +019 000139 B80D00 MOV ax, 0Dh ;Case l3 +020 00013C EB0F JMP L2 + +021 000148 B82C00 L1: MOV ax, 2Ch ;Case l4 +022 00014B EB00 JMP L2 + +023 00013E B81700 MOV ax, 17h ;Case l5 +024 000141 EB0A JMP L2 + +025 000143 B80D00 MOV ax, 0Dh ;Case l6 +026 000146 EB05 JMP L2 + + start ENDP + diff --git a/tests/prev_base/MIN.EXE.a2 b/tests/prev_base/MIN.EXE.a2 new file mode 100644 index 0000000..692f456 --- /dev/null +++ b/tests/prev_base/MIN.EXE.a2 @@ -0,0 +1,38 @@ + start PROC NEAR +000 000100 55 PUSH bp +001 000101 8BEC MOV bp, sp +002 000103 83EC02 SUB sp, 2 +003 000106 C746FE0000 MOV word ptr [bp-2], 0 +004 00010B 8B46FE MOV ax, [bp-2] +005 00010E 3D0600 CMP ax, 6 +006 000111 7735 JA L1 +007 000113 8BD8 MOV bx, ax +008 000115 D1E3 SHL bx, 1 +009 000117 2EFFA71C00 JMP word ptr cs:[bx+1Ch];Switch + +010 00012A B80200 MOV ax, 2 ;Case l0 + +012 00014D 8BE5 L2: MOV sp, bp +013 00014F 5D POP bp +014 000150 C3 RET + +015 00012F B80300 MOV ax, 3 ;Case l1 +016 000132 EB19 JMP L2 + +017 000134 B80700 MOV ax, 7 ;Case l2 +018 000137 EB14 JMP L2 + +019 000139 B80D00 MOV ax, 0Dh ;Case l3 +020 00013C EB0F JMP L2 + +021 000148 B82C00 L1: MOV ax, 2Ch ;Case l4 +022 00014B EB00 JMP L2 + +023 00013E B81700 MOV ax, 17h ;Case l5 +024 000141 EB0A JMP L2 + +025 000143 B80D00 MOV ax, 0Dh ;Case l6 +026 000146 EB05 JMP L2 + + start ENDP + diff --git a/tests/prev_base/MIN.b b/tests/prev_base/MIN.b new file mode 100644 index 0000000..e5a1f30 --- /dev/null +++ b/tests/prev_base/MIN.b @@ -0,0 +1,27 @@ +/* + * Input file : ./tests/inputs/MIN.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void start () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; /* ax */ +int loc3; /* bx */ + + loc1 = 0; + loc2 = loc1; + + if (loc2 <= 6) { + loc3 = loc2; + } + else { + } +} +