diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ec9b5c..c70470d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,25 @@ PROJECT(dcc_original) -cmake_minimum_required(VERSION 2.8) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +OPTION(dcc_build_tests "Enable unit tests." OFF) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D__UNIX__ -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS) -if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)") +IF(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)") ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D__UNIX__ -D_CRT_NONSTDC_NO_DEPRECATE) - add_definitions(/W4) -else() + ADD_DEFINITIONS(/W4) +ELSE() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall --std=c++0x") - #SET(CMAKE_CXX_FLAGS_DEBUG "-D_GLIBCXX_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}" ) -endif() + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" ) #-D_GLIBCXX_DEBUG +ENDIF() + +SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeScripts;${CMAKE_MODULE_PATH}) FIND_PACKAGE(LLVM) FIND_PACKAGE(Boost) +IF(dcc_build_tests) + FIND_PACKAGE(GMock) +ENDIF() + llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native mc support) INCLUDE_DIRECTORIES( include @@ -87,6 +95,13 @@ set(dcc_HEADERS include/StackFrame.h include/BasicBlock.h ) +SOURCE_GROUP(Source FILES ${dcc_SOURCES}) +SOURCE_GROUP(Headers FILES ${dcc_HEADERS}) + ADD_EXECUTABLE(dcc_original ${dcc_SOURCES} ${dcc_HEADERS}) TARGET_LINK_LIBRARIES(dcc_original ${REQ_LLVM_LIBRARIES}) +if(dcc_build_tests) +ADD_SUBDIRECTORY(src) +endif() + diff --git a/CMakeScripts/FindGMock.cmake b/CMakeScripts/FindGMock.cmake new file mode 100644 index 0000000..12a347b --- /dev/null +++ b/CMakeScripts/FindGMock.cmake @@ -0,0 +1,89 @@ +# Locate the Google C++ Mocking Framework. +# +# Defines the following variables: +# +# GMOCK_FOUND - Found the Google Mocking framework +# GMOCK_INCLUDE_DIRS - Include directories +# +# Also defines the library variables below as normal +# variables. These contain debug/optimized keywords when +# a debugging library is found. +# +# GMOCK_BOTH_LIBRARIES - Both libgmock & libgmock-main +# GMOCK_LIBRARIES - libgmock +# GMOCK_MAIN_LIBRARIES - libgmock-main +# +# Accepts the following variables as input: +# +# GMOCK_ROOT - (as CMake or env. variable) +# The root directory of the gmock install prefix +# +#----------------------- +# Example Usage: +# +# enable_testing(true) +# find_package(GMock REQUIRED) +# include_directories(${GMOCK_INCLUDE_DIRS}) +# +# add_executable(foo foo.cc) +# target_link_libraries(foo ${GMOCK_BOTH_LIBRARIES}) +# +# add_test(AllTestsInFoo foo) +# + +set (GMOCK_FOUND FALSE) + +set (GMOCK_ROOT $ENV{GMOCK_ROOT} CACHE PATH "Path to the gmock root directory.") +if (NOT EXISTS ${GMOCK_ROOT}) + message (FATAL_ERROR "GMOCK_ROOT does not exist.") +endif () + +set (GMOCK_BUILD ${GMOCK_ROOT}/build CACHE PATH "Path to the gmock build directory.") +if (NOT EXISTS ${GMOCK_BUILD}) + message (FATAL_ERROR "GMOCK_BUILD does not exist.") +endif () + +# Find the include directory +find_path(GMOCK_INCLUDE_DIRS gmock/gmock.h + HINTS + ${GMOCK_ROOT}/include +) +mark_as_advanced(GMOCK_INCLUDE_DIRS) + +function(_gmock_find_library _name) + find_library(${_name} + NAMES ${ARGN} + HINTS + $ENV{GMOCK_ROOT} + ${GMOCK_ROOT} + ) + mark_as_advanced(${_name}) +endfunction() + +# Find the gmock libraries +if (MSVC) + find_library (GMOCK_LIBRARIES_DEBUG gmock ${GMOCK_BUILD}/Debug) + find_library (GMOCK_LIBRARIES_RELEASE gmock ${GMOCK_BUILD}/Release) + find_library (GMOCK_MAIN_LIBRARIES_DEBUG gmock_main ${GMOCK_BUILD}/Debug) + find_library (GMOCK_MAIN_LIBRARIES_RELEASE gmock_main ${GMOCK_BUILD}/Release) + set (GMOCK_LIBRARIES + debug ${GMOCK_LIBRARIES_DEBUG} + optimized ${GMOCK_LIBRARIES_RELEASE} + ) + set (GMOCK_MAIN_LIBRARIES + debug ${GMOCK_MAIN_LIBRARIES_DEBUG} + optimized ${GMOCK_MAIN_LIBRARIES_RELEASE} + ) +# message (STATUS "GMOCK_BOTH_LIBRARIES ARE ${GMOCK_BOTH_LIBRARIES}") +else () + find_library (GMOCK_LIBRARIES gmock ${GMOCK_BUILD}) + find_library (GMOCK_MAIN_LIBRARIES gmock_main ${GMOCK_BUILD}) + find_library (GTEST_LIBRARIES gtest ${GMOCK_BUILD}/gtest) + find_library (GTEST_MAIN_LIBRARIES gtest_main ${GMOCK_BUILD}) +endif () +set (GMOCK_BOTH_LIBRARIES + ${GMOCK_LIBRARIES} + ${GMOCK_MAIN_LIBRARIES} + ${GTEST_LIBRARIES} + ${GTEST_MAIN_LIBRARIES} +) diff --git a/include/IdentType.h b/include/IdentType.h index f7fd0a6..b743711 100644 --- a/include/IdentType.h +++ b/include/IdentType.h @@ -2,6 +2,7 @@ #include "ast.h" #include "types.h" #include "machine_x86.h" + struct IDENTTYPE { condId idType; diff --git a/include/Procedure.h b/include/Procedure.h index ddc25c7..3b57fc3 100644 --- a/include/Procedure.h +++ b/include/Procedure.h @@ -11,6 +11,13 @@ struct CALL_GRAPH; struct COND_EXPR; struct Disassembler; +struct Function; +struct CALL_GRAPH; + +typedef llvm::iplist FunctionListType; +typedef FunctionListType lFunction; +typedef lFunction::iterator ilFunction; + namespace llvm { // Traits for intrusive list of basic blocks... @@ -143,6 +150,7 @@ public: void buildCFG(Disassembler &ds); void controlFlowAnalysis(); void newRegArg(iICODE picode, iICODE ticode); + void writeProcComments(std::ostream &ostr); protected: // TODO: replace those with friend visitor ? void propLongReg(int loc_ident_idx, const ID &pLocId); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 82434c6..e0e2173 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,27 +1,7 @@ -SET(SOURCES ast.cpp backend.cpp bundle.cpp chklib.cpp -comwrite.cpp control.cpp dataflow.cpp dcc.cpp -disassem.cpp error.cpp fixwild.cpp frontend.cpp -graph.cpp hlicode.cpp icode.cpp -idioms.cpp locident.cpp parser.cpp -perfhlib.cpp procs.cpp proplong.cpp reducible.cpp -scanner.cpp symtab.cpp udm.cpp) -SET(dc_INCLUDES -${PROJECT_SOURCE_DIR}/include/ast.h -${PROJECT_SOURCE_DIR}/include/bundle.h -${PROJECT_SOURCE_DIR}/include/dcc.h -${PROJECT_SOURCE_DIR}/include/disassem.h -${PROJECT_SOURCE_DIR}/include/dosdcc.h -${PROJECT_SOURCE_DIR}/include/error.h -${PROJECT_SOURCE_DIR}/include/graph.h -${PROJECT_SOURCE_DIR}/include/hlicode.h -${PROJECT_SOURCE_DIR}/include/icode.h -${PROJECT_SOURCE_DIR}/include/locident.h -${PROJECT_SOURCE_DIR}/include/perfhlib.h -${PROJECT_SOURCE_DIR}/include/scanner.h -${PROJECT_SOURCE_DIR}/include/state.h -${PROJECT_SOURCE_DIR}/include/symtab.h -${PROJECT_SOURCE_DIR}/include/types.h -) -SOURCE_GROUP(Source FILES ${SOURCES}) -SOURCE_GROUP(Headers FILES ${dc_INCLUDES}) -ADD_EXECUTABLE(dcc_oo ${SOURCES} ${dc_INCLUDES}) \ No newline at end of file +SET(dcc_test_SOURCES tests/comwrite.cpp) +include_directories(${GMOCK_INCLUDE_DIRS} ${GMOCK_ROOT}/gtest/include) +enable_testing() +add_executable(tester ${dcc_test_SOURCES}) +target_link_libraries(tester + ${GMOCK_BOTH_LIBRARIES} ${REQ_LLVM_LIBRARIES}) +add_test(dcc-tests tester) diff --git a/src/bundle.cpp b/src/bundle.cpp index 0c48e35..55532da 100644 --- a/src/bundle.cpp +++ b/src/bundle.cpp @@ -50,8 +50,6 @@ static void writeStrTab (std::ostream &ios, strTable &strTab) void writeBundle (std::ostream &ios, bundle procCode) { writeStrTab (ios, procCode.decl); - if (procCode.decl[procCode.decl.size() - 1][0] != ' ') - ios << "\n"; writeStrTab (ios, procCode.code); } diff --git a/src/comwrite.cpp b/src/comwrite.cpp index 0bcbe9a..eb83413 100644 --- a/src/comwrite.cpp +++ b/src/comwrite.cpp @@ -184,6 +184,13 @@ void LLInst::writeIntComment (std::ostringstream &s) //, &cCode.decl void Function::writeProcComments() +{ + std::ostringstream ostr; + writeProcComments(ostr); + cCode.appendDecl(ostr.str()); +} + +void Function::writeProcComments(std::ostream &ostr) { int i; ID *id; /* Pointer to register argument identifier */ @@ -191,79 +198,82 @@ void Function::writeProcComments() /* About the parameters */ if (this->cbParam) - cCode.appendDecl("/* Takes %d bytes of parameters.\n",this->cbParam); + ostr << "/* Takes "<cbParam<<" bytes of parameters.\n"; else if (this->flg & REG_ARGS) { - cCode.appendDecl("/* Uses register arguments:\n"); + ostr << "/* Uses register arguments:\n"; for (i = 0; i < this->args.numArgs; i++) { psym = &this->args.sym[i]; + ostr << " * "<name<<" = "; if (psym->regs->expr.ident.idType == REGISTER) { id = &this->localId.id_arr[psym->regs->expr.ident.idNode.regiIdx]; - cCode.appendDecl(" * %s = %s.\n", psym->name, - Machine_X86::regName(id->id.regi).c_str()); + ostr << Machine_X86::regName(id->id.regi); } else /* long register */ { id = &this->localId.id_arr[psym->regs->expr.ident.idNode.longIdx]; - cCode.appendDecl(" * %s = %s:%s.\n", psym->name, - Machine_X86::regName(id->id.longId.h).c_str(), - Machine_X86::regName(id->id.longId.l).c_str()); + ostr << Machine_X86::regName(id->id.longId.h) << ":"; + ostr << Machine_X86::regName(id->id.longId.l); } + ostr << ".\n"; } } else - cCode.appendDecl("/* Takes no parameters.\n"); + ostr << "/* Takes no parameters.\n"; /* Type of procedure */ if (this->flg & PROC_RUNTIME) - cCode.appendDecl(" * Runtime support routine of the compiler.\n"); + ostr << " * Runtime support routine of the compiler.\n"; if (this->flg & PROC_IS_HLL) - cCode.appendDecl(" * High-level language prologue code.\n"); + ostr << " * High-level language prologue code.\n"; if (this->flg & PROC_ASM) { - cCode.appendDecl(" * Untranslatable routine. Assembler provided.\n"); + ostr << " * Untranslatable routine. Assembler provided.\n"; if (this->flg & PROC_IS_FUNC) - switch (this->retVal.type) { + switch (this->retVal.type) { // TODO: Functions return value in various regs case TYPE_BYTE_SIGN: case TYPE_BYTE_UNSIGN: - cCode.appendDecl(" * Return value in register al.\n"); + ostr << " * Return value in register al.\n"; break; case TYPE_WORD_SIGN: case TYPE_WORD_UNSIGN: - cCode.appendDecl(" * Return value in register ax.\n"); + ostr << " * Return value in register ax.\n"; break; case TYPE_LONG_SIGN: case TYPE_LONG_UNSIGN: - cCode.appendDecl(" * Return value in registers dx:ax.\n"); + ostr << " * Return value in registers dx:ax.\n"; break; } /* eos */ } /* Calling convention */ if (this->flg & CALL_PASCAL) - cCode.appendDecl(" * Pascal calling convention.\n"); + ostr << " * Pascal calling convention.\n"; else if (this->flg & CALL_C) - cCode.appendDecl(" * C calling convention.\n"); + ostr << " * C calling convention.\n"; else if (this->flg & CALL_UNKNOWN) - cCode.appendDecl(" * Unknown calling convention.\n"); + ostr << " * Unknown calling convention.\n"; /* Other flags */ if (this->flg & (PROC_BADINST | PROC_IJMP)) - cCode.appendDecl(" * Incomplete due to an %s.\n", - (this->flg & PROC_BADINST)? "untranslated opcode": - "indirect JMP"); + { + ostr << " * Incomplete due to an "; + if(this->flg & PROC_BADINST) + ostr << "untranslated opcode.\n"; + else + ostr << "indirect JMP.\n"; + } if (this->flg & PROC_ICALL) - cCode.appendDecl(" * Indirect call procedure.\n"); + ostr << " * Indirect call procedure.\n"; if (this->flg & IMPURE) - cCode.appendDecl(" * Contains impure code.\n"); + ostr << " * Contains impure code.\n"; if (this->flg & NOT_HLL) - cCode.appendDecl(" * Contains instructions not normally used by compilers.\n"); + ostr << " * Contains instructions not normally used by compilers.\n"; if (this->flg & FLOAT_OP) - cCode.appendDecl(" * Contains coprocessor instructions.\n"); + ostr << " * Contains coprocessor instructions.\n"; /* Graph reducibility */ if (this->flg & GRAPH_IRRED) - cCode.appendDecl(" * Irreducible control flow graph.\n"); - cCode.appendDecl(" */\n{\n"); + ostr << " * Irreducible control flow graph.\n"; + ostr << " */\n{\n"; } - diff --git a/src/tests/comwrite.cpp b/src/tests/comwrite.cpp new file mode 100644 index 0000000..61822c2 --- /dev/null +++ b/src/tests/comwrite.cpp @@ -0,0 +1,14 @@ +#include "dcc.h" +#include +#include + +TEST(CowriteTest, HandlesZeroInput) { + EXPECT_EQ(1, 1); +} + +int main(int argc, char** argv) { + // The following line must be executed to initialize Google Mock + // (and Google Test) before running the tests. + ::testing::InitGoogleMock(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tests/prev_base/BENCHFN.b b/tests/prev_base/BENCHFN.b index 41ae251..f758a7c 100644 --- a/tests/prev_base/BENCHFN.b +++ b/tests/prev_base/BENCHFN.b @@ -74,7 +74,6 @@ void main () { long loc1; long loc2; - printf ("enter number of iterations "); scanf ("%ld", &loc0); printf ("executing %ld iterations\n", loc2); diff --git a/tests/prev_base/BENCHLNG.b b/tests/prev_base/BENCHLNG.b index bfceece..cd27366 100644 --- a/tests/prev_base/BENCHLNG.b +++ b/tests/prev_base/BENCHLNG.b @@ -110,7 +110,6 @@ long loc3; long loc4; long loc5; int loc6; /* ax */ - scanf ("%ld", &loc0); printf ("executing %ld iterations\n", loc5); scanf ("%ld", &loc2); diff --git a/tests/prev_base/BENCHMUL.b b/tests/prev_base/BENCHMUL.b index e2f9357..48c2dd4 100644 --- a/tests/prev_base/BENCHMUL.b +++ b/tests/prev_base/BENCHMUL.b @@ -16,7 +16,6 @@ int loc2; long loc3; long loc4; int loc5; - printf ("enter number of iterations\n"); scanf ("%ld", &loc0); printf ("executing %ld iterations\n", loc4); diff --git a/tests/prev_base/BENCHMUS.b b/tests/prev_base/BENCHMUS.b index c36ff5c..b979d6a 100644 --- a/tests/prev_base/BENCHMUS.b +++ b/tests/prev_base/BENCHMUS.b @@ -16,7 +16,6 @@ long loc2; long loc3; int loc4; int loc5; - printf ("enter number of iterations\n"); scanf ("%ld", &loc0); printf ("executing %ld iterations\n", loc3); diff --git a/tests/prev_base/BENCHSHO.b b/tests/prev_base/BENCHSHO.b index 7786608..d213615 100644 --- a/tests/prev_base/BENCHSHO.b +++ b/tests/prev_base/BENCHSHO.b @@ -17,7 +17,6 @@ int loc3; long loc4; long loc5; int loc6; /* ax */ - scanf ("%ld", &loc0); printf ("executing %ld iterations\n", loc5); scanf ("%ld", &loc1); diff --git a/tests/prev_base/BYTEOPS.b b/tests/prev_base/BYTEOPS.b index 219e8cd..c91f9ae 100644 --- a/tests/prev_base/BYTEOPS.b +++ b/tests/prev_base/BYTEOPS.b @@ -13,7 +13,6 @@ void main () { int loc1; int loc2; - loc1 = 255; loc2 = 143; loc2 = (loc1 + loc2); diff --git a/tests/prev_base/DHAMP.EXE.a1 b/tests/prev_base/DHAMP.EXE.a1 new file mode 100644 index 0000000..d0f5555 --- /dev/null +++ b/tests/prev_base/DHAMP.EXE.a1 @@ -0,0 +1,639 @@ + main PROC FAR +000 0008B4 55 PUSH bp +001 0008B5 8BEC MOV bp, sp +002 0008B7 81ECD400 SUB sp, 0D4h +003 0008BB 56 PUSH si +004 0008BC 33F6 XOR si, si +005 0008BE B80700 MOV ax, 7 +006 0008C1 50 PUSH ax +007 0008C2 1E PUSH ds +008 0008C3 B89800 MOV ax, 98h +009 0008C6 50 PUSH ax +010 0008C7 9A02000E05 CALL far ptr printf +011 0008CC 83C406 ADD sp, 6 +012 0008CF E98401 JMP L1 + +013 000A56 83FE06 L1: CMP si, 6 +014 000A59 7D03 JGE L2 +015 000A5B E974FE JMP L3 + +016 0008D2 8BC6 L3: MOV ax, si +017 0008D4 3D0500 CMP ax, 5 +018 0008D7 7603 JBE L4 +019 0008D9 E97701 JMP L5 + +020 000A53 EB00 L5: JMP L6 + +021 000A55 46 L6: INC si +022 JMP L1 ;Synthetic inst + +023 0008DC 8BD8 L4: MOV bx, ax +024 0008DE D1E3 SHL bx, 1 +025 0008E0 2EFFA73500 JMP word ptr cs:[bx+35h];Switch + +026 0008F1 16 PUSH ss ;Case l0 +027 0008F2 8D4690 LEA ax, [bp-70h] +028 0008F5 50 PUSH ax +029 0008F6 16 PUSH ss +030 0008F7 8D862CFF LEA ax, [bp-0D4h] +031 0008FB 50 PUSH ax +032 0008FC 9AC2038B00 CALL far ptr proc_1 +033 000901 83C408 ADD sp, 8 +034 000904 A31806 MOV [618h], ax +035 000907 FF361806 PUSH word ptr [618h] +036 00090B 1E PUSH ds +037 00090C B8A500 MOV ax, 0A5h +038 00090F 50 PUSH ax +039 000910 9A02000E05 CALL far ptr printf +040 000915 83C406 ADD sp, 6 +041 000918 E93A01 JMP L6 + +042 00091B 9A1E058B00 CALL far ptr proc_4 ;Case l1 +043 000920 A31A06 MOV [61Ah], ax +044 000923 FF361A06 PUSH word ptr [61Ah] +045 000927 1E PUSH ds +046 000928 B8B400 MOV ax, 0B4h +047 00092B 50 PUSH ax +048 00092C 9A02000E05 CALL far ptr printf +049 000931 83C406 ADD sp, 6 +050 000934 E91E01 JMP L6 + +051 000937 B81800 MOV ax, 18h ;Case l2 +052 00093A 50 PUSH ax +053 00093B 9A90038B00 CALL far ptr proc_5 +054 000940 59 POP cx +055 000941 A31E06 MOV [61Eh], ax +056 000944 FF361E06 PUSH word ptr [61Eh] +057 000948 1E PUSH ds +058 000949 B8C300 MOV ax, 0C3h +059 00094C 50 PUSH ax +060 00094D 9A02000E05 CALL far ptr printf +061 000952 83C406 ADD sp, 6 +062 000955 E9FD00 JMP L6 + +063 000958 C746F60000 MOV word ptr [bp-0Ah], 0;Case l3 +064 00095D C746F40000 MOV word ptr [bp-0Ch], 0 +065 000962 FF76F6 PUSH word ptr [bp-0Ah] +066 000965 FF76F4 PUSH word ptr [bp-0Ch] +067 000968 9AC4018B00 CALL far ptr proc_6 +068 00096D 59 POP cx +069 00096E 59 POP cx +070 00096F 89162206 MOV [622h], dx +071 000973 A32006 MOV [620h], ax +072 000976 FF362206 PUSH word ptr [622h] +073 00097A FF362006 PUSH word ptr [620h] +074 00097E 9AC4018B00 CALL far ptr proc_6 +075 000983 59 POP cx +076 000984 59 POP cx +077 000985 8956F6 MOV [bp-0Ah], dx +078 000988 8946F4 MOV [bp-0Ch], ax +079 00098B FF362206 PUSH word ptr [622h] +080 00098F FF362006 PUSH word ptr [620h] +081 000993 1E PUSH ds +082 000994 B8D200 MOV ax, 0D2h +083 000997 50 PUSH ax +084 000998 9A02000E05 CALL far ptr printf +085 00099D 83C408 ADD sp, 8 +086 0009A0 FF76F6 PUSH word ptr [bp-0Ah] +087 0009A3 FF76F4 PUSH word ptr [bp-0Ch] +088 0009A6 1E PUSH ds +089 0009A7 B8E100 MOV ax, 0E1h +090 0009AA 50 PUSH ax +091 0009AB 9A02000E05 CALL far ptr printf +092 0009B0 83C408 ADD sp, 8 +093 0009B3 E99F00 JMP L6 + +094 0009B6 8B162206 MOV dx, [622h] ;Case l4 +095 0009BA A12006 MOV ax, [620h] +096 0009BD 52 PUSH dx +097 0009BE 50 PUSH ax +098 0009BF CD378626FF ESC FILD [bp-0DAh] +099 0009C4 CD3D INT 3Dh /* Unknown int */ + +100 0009C6 83C404 ADD sp, 4 +101 0009C9 83EC08 SUB sp, 8 +102 0009CC CD399E22FF ESC FSTP [bp-0DEh] +103 0009D1 CD3D INT 3Dh /* Unknown int */ + +104 0009D3 9A21028B00 CALL far ptr proc_7 +105 0009D8 83C408 ADD sp, 8 +106 0009DB CD391E2406 ESC FSTP [624h] +107 0009E0 CD3D INT 3Dh /* Unknown int */ + +108 0009E2 FF362A06 PUSH word ptr [62Ah] +109 0009E6 FF362806 PUSH word ptr [628h] +110 0009EA FF362606 PUSH word ptr [626h] +111 0009EE FF362406 PUSH word ptr [624h] +112 0009F2 1E PUSH ds +113 0009F3 B8F100 MOV ax, 0F1h +114 0009F6 50 PUSH ax +115 0009F7 9A02000E05 CALL far ptr printf +116 0009FC 83C40C ADD sp, 0Ch +117 0009FF FF362A06 PUSH word ptr [62Ah] +118 000A03 FF362806 PUSH word ptr [628h] +119 000A07 FF362606 PUSH word ptr [626h] +120 000A0B FF362406 PUSH word ptr [624h] +121 000A0F 9AE6028B00 CALL far ptr proc_9 +122 000A14 83C408 ADD sp, 8 +123 000A17 CD395EF8 ESC FSTP [bp-8] +124 000A1B CD3D INT 3Dh /* Unknown int */ + +125 000A1D FF76FE PUSH word ptr [bp-2] +126 000A20 FF76FC PUSH word ptr [bp-4] +127 000A23 FF76FA PUSH word ptr [bp-6] +128 000A26 FF76F8 PUSH word ptr [bp-8] +129 000A29 1E PUSH ds +130 000A2A B80001 MOV ax, 100h +131 000A2D 50 PUSH ax +132 000A2E 9A02000E05 CALL far ptr printf +133 000A33 83C40C ADD sp, 0Ch +134 000A36 EB1D JMP L6 + +135 000A38 9A73048B00 CALL far ptr proc_10 ;Case l5 +136 000A3D A31C06 MOV [61Ch], ax +137 000A40 FF361C06 PUSH word ptr [61Ch] +138 000A44 1E PUSH ds +139 000A45 B80E01 MOV ax, 10Eh +140 000A48 50 PUSH ax +141 000A49 9A02000E05 CALL far ptr printf +142 000A4E 83C406 ADD sp, 6 +143 000A51 EB02 JMP L6 + +144 000A5E B80700 L2: MOV ax, 7 +145 000A61 50 PUSH ax +146 000A62 1E PUSH ds +147 000A63 B81C01 MOV ax, 11Ch +148 000A66 50 PUSH ax +149 000A67 9A02000E05 CALL far ptr printf +150 000A6C 83C406 ADD sp, 6 +151 000A6F 5E POP si +152 000A70 8BE5 MOV sp, bp +153 000A72 5D POP bp +154 000A73 CB RETF + + main ENDP + + proc_1 PROC FAR +000 000C72 55 PUSH bp +001 000C73 8BEC MOV bp, sp +002 000C75 56 PUSH si +003 000C76 57 PUSH di +004 000C77 33F6 XOR si, si +005 000C79 33FF XOR di, di +006 000C7B EB3D JMP L7 + +007 000CBA 81FE2823 L7: CMP si, 2328h +008 000CBE 7CBD JL L8 +009 000CC0 8BC7 MOV ax, di +010 000CC2 EB00 JMP L9 + +011 000CC4 5F L9: POP di +012 000CC5 5E POP si +013 000CC6 5D POP bp +014 000CC7 CB RETF + +015 000C7D 1E L8: PUSH ds +016 000C7E B83701 MOV ax, 137h +017 000C81 50 PUSH ax +018 000C82 FF7608 PUSH word ptr [bp+8] +019 000C85 FF7606 PUSH word ptr [bp+6] +020 000C88 9A56048B00 CALL far ptr proc_2 +021 000C8D 83C408 ADD sp, 8 +022 000C90 1E PUSH ds +023 000C91 B84801 MOV ax, 148h +024 000C94 50 PUSH ax +025 000C95 FF760C PUSH word ptr [bp+0Ch] +026 000C98 FF760A PUSH word ptr [bp+0Ah] +027 000C9B 9A56048B00 CALL far ptr proc_2 +028 000CA0 83C408 ADD sp, 8 +029 000CA3 FF760C PUSH word ptr [bp+0Ch] +030 000CA6 FF760A PUSH word ptr [bp+0Ah] +031 000CA9 FF7608 PUSH word ptr [bp+8] +032 000CAC FF7606 PUSH word ptr [bp+6] +033 000CAF 9A18048B00 CALL far ptr proc_3 +034 000CB4 83C408 ADD sp, 8 +035 000CB7 03F8 ADD di, ax +036 000CB9 46 INC si +037 JMP L7 ;Synthetic inst + + proc_1 ENDP + + proc_2 PROC FAR +000 000D06 55 PUSH bp +001 000D07 8BEC MOV bp, sp +002 000D09 EB00 JMP L10 + +003 000D0B C45E0A L10: LES bx, dword ptr[bp+0Ah] +004 000D0E FF460A INC word ptr [bp+0Ah] +005 000D11 268A07 MOV al, es:[bx] +006 000D14 C45E06 LES bx, dword ptr[bp+6] +007 000D17 FF4606 INC word ptr [bp+6] +008 000D1A 268807 MOV es:[bx], al +009 000D1D 0AC0 OR al, al +010 000D1F 75EA JNE L10 +011 000D21 5D POP bp +012 000D22 CB RETF + + proc_2 ENDP + + proc_3 PROC FAR +000 000CC8 55 PUSH bp +001 000CC9 8BEC MOV bp, sp +002 000CCB EB13 JMP L11 + +003 000CE0 C45E06 L11: LES bx, dword ptr[bp+6] +004 000CE3 268A07 MOV al, es:[bx] +005 000CE6 C45E0A LES bx, dword ptr[bp+0Ah] +006 000CE9 263A07 CMP al, es:[bx] +007 000CEC 74DF JE L12 +008 000CEE C45E06 LES bx, dword ptr[bp+6] +009 000CF1 268A07 MOV al, es:[bx] +010 000CF4 98 CWD +011 000CF5 C45E0A LES bx, dword ptr[bp+0Ah] +012 000CF8 50 PUSH ax +013 000CF9 268A07 MOV al, es:[bx] +014 000CFC 98 CWD +015 000CFD 8BD0 MOV dx, ax +016 000CFF 58 POP ax +017 000D00 2BC2 SUB ax, dx +018 000D02 EB00 JMP L13 + +019 000D04 5D L13: POP bp +020 000D05 CB RETF + +021 000CCD C45E06 L12: LES bx, dword ptr[bp+6] +022 000CD0 26803F00 CMP byte ptr es:[bx], 0 +023 000CD4 7504 JNE L14 +024 000CD6 33C0 XOR ax, ax +025 000CD8 EB2A JMP L13 + +026 000CDA FF4606 L14: INC word ptr [bp+6] +027 000CDD FF460A INC word ptr [bp+0Ah] +028 JMP L11 ;Synthetic inst + + proc_3 ENDP + + proc_4 PROC FAR +000 000DCE 55 PUSH bp +001 000DCF 8BEC MOV bp, sp +002 000DD1 83EC04 SUB sp, 4 +003 000DD4 56 PUSH si +004 000DD5 57 PUSH di +005 000DD6 33F6 XOR si, si +006 000DD8 EB20 JMP L15 + +007 000DFA 81FEE803 L15: CMP si, 3E8h +008 000DFE 7CDA JL L16 +009 000E00 8B46FE MOV ax, [bp-2] +010 000E03 EB00 JMP L17 + +011 000E05 5F L17: POP di +012 000E06 5E POP si +013 000E07 8BE5 MOV sp, bp +014 000E09 5D POP bp +015 000E0A CB RETF + +016 000DDA C746FE0000 L16: MOV word ptr [bp-2], 0 +017 000DDF 33FF XOR di, di +018 000DE1 C746FC0100 MOV word ptr [bp-4], 1 +019 000DE6 EB0B JMP L18 + +020 000DF3 81FFB300 L18: CMP di, 0B3h +021 000DF7 7CEF JL L19 +022 000DF9 46 INC si +023 JMP L15 ;Synthetic inst + +024 000DE8 8B46FC L19: MOV ax, [bp-4] +025 000DEB 0146FE ADD [bp-2], ax +026 000DEE 8346FC02 ADD word ptr [bp-4], 2 +027 000DF2 47 INC di +028 JMP L18 ;Synthetic inst + + proc_4 ENDP + + proc_5 PROC FAR +000 000C40 55 PUSH bp +001 000C41 8BEC MOV bp, sp +002 000C43 56 PUSH si +003 000C44 8B7606 MOV si, [bp+6] +004 000C47 83FE02 CMP si, 2 +005 000C4A 7E1E JLE L20 +006 000C4C 8BC6 MOV ax, si +007 000C4E 48 DEC ax +008 000C4F 50 PUSH ax +009 000C50 0E PUSH cs +010 000C51 E8ECFF CALL near ptr proc_5 +011 000C54 59 POP cx +012 000C55 50 PUSH ax +013 000C56 8BC6 MOV ax, si +014 000C58 05FEFF ADD ax, 0FFFEh +015 000C5B 50 PUSH ax +016 000C5C 0E PUSH cs +017 000C5D E8E0FF CALL near ptr proc_5 +018 000C60 59 POP cx +019 000C61 8BD0 MOV dx, ax +020 000C63 58 POP ax +021 000C64 03C2 ADD ax, dx +022 000C66 EB07 JMP L21 + +023 000C6F 5E L21: POP si +024 000C70 5D POP bp +025 000C71 CB RETF + +026 000C6A B80100 L20: MOV ax, 1 +027 000C6D EB00 JMP L21 + + proc_5 ENDP + + proc_6 PROC FAR +000 000A74 55 PUSH bp +001 000A75 8BEC MOV bp, sp +002 000A77 56 PUSH si +003 000A78 8B4606 MOV ax, [bp+6] +004 000A7B 0B4608 OR ax, [bp+8] +005 000A7E 7524 JNE L22 +006 000A80 33F6 XOR si, si +007 000A82 EB18 JMP L23 + +008 000A9C 81FE2823 L23: CMP si, 2328h +009 000AA0 7CE2 JL L24 +010 000AA2 EB22 JMP L25 + +011 000AC6 8B5608 L25: MOV dx, [bp+8] +012 000AC9 8B4606 MOV ax, [bp+6] +013 000ACC EB00 JMP L26 + +014 000ACE 5E L26: POP si +015 000ACF 5D POP bp +016 000AD0 CB RETF + +017 000A84 8B169600 L24: MOV dx, [96h] +018 000A88 A19400 MOV ax, [94h] +019 000A8B 014606 ADD [bp+6], ax +020 000A8E 115608 ADC [bp+8], dx +021 000A91 8306940002 ADD word ptr [94h], 2 +022 000A96 8316960000 ADC word ptr [96h], 0 +023 000A9B 46 INC si +024 JMP L23 ;Synthetic inst + +025 000AA4 33F6 L22: XOR si, si +026 000AA6 EB18 JMP L27 + +027 000AC0 81FE2823 L27: CMP si, 2328h +028 000AC4 7CE2 JL L28 +029 JMP L25 ;Synthetic inst + +030 000AA8 832E940002 L28: SUB word ptr [94h], 2 +031 000AAD 831E960000 SBB word ptr [96h], 0 +032 000AB2 8B169600 MOV dx, [96h] +033 000AB6 A19400 MOV ax, [94h] +034 000AB9 294606 SUB [bp+6], ax +035 000ABC 195608 SBB [bp+8], dx +036 000ABF 46 INC si +037 JMP L27 ;Synthetic inst + + proc_6 ENDP + + proc_7 PROC FAR +000 000AD1 55 PUSH bp +001 000AD2 8BEC MOV bp, sp +002 000AD4 83EC10 SUB sp, 10h +003 000AD7 CD394606 ESC FLD [bp+6] +004 000ADB CD38362701 ESC FDIV [127h] +005 000AE0 CD395EF8 ESC FSTP [bp-8] +006 000AE4 CD3D INT 3Dh /* Unknown int */ + +007 000AE6 8B460C MOV ax, [bp+0Ch] +008 000AE9 8946F6 MOV [bp-0Ah], ax +009 000AEC 8B460A MOV ax, [bp+0Ah] +010 000AEF 8946F4 MOV [bp-0Ch], ax +011 000AF2 8B4608 MOV ax, [bp+8] +012 000AF5 8946F2 MOV [bp-0Eh], ax +013 000AF8 8B4606 MOV ax, [bp+6] +014 000AFB 8946F0 MOV [bp-10h], ax +015 000AFE EB43 JMP L29 + +016 000B43 CD39062F01 L29: ESC FLD [12Fh] +017 000B48 CD384EF8 ESC FMUL [bp-8] +018 000B4C CD385EF0 ESC FCOMP [bp-10h] +019 000B50 CD393E2C06 ESC FSTSW [62Ch] +020 000B55 CD3D INT 3Dh /* Unknown int */ + +021 000B57 8A262D06 MOV ah, [62Dh] +022 000B5B 9E SAHF +023 000B5C 72A2 JB L30 +024 000B5E CD3946F8 ESC FLD [bp-8] +025 000B62 EB00 JMP L31 + +026 000B64 8BE5 L31: MOV sp, bp +027 000B66 5D POP bp +028 000B67 CB RETF + +029 000B00 CD394606 L30: ESC FLD [bp+6] +030 000B04 CD3876F8 ESC FDIV [bp-8] +031 000B08 CD3866F8 ESC FSUB [bp-8] +032 000B0C CD395EF0 ESC FSTP [bp-10h] +033 000B10 CD3D INT 3Dh /* Unknown int */ + +034 000B12 FF76F6 PUSH word ptr [bp-0Ah] +035 000B15 FF76F4 PUSH word ptr [bp-0Ch] +036 000B18 FF76F2 PUSH word ptr [bp-0Eh] +037 000B1B FF76F0 PUSH word ptr [bp-10h] +038 000B1E 9AB8028B00 CALL far ptr proc_8 +039 000B23 83C408 ADD sp, 8 +040 000B26 CD395EF0 ESC FSTP [bp-10h] +041 000B2A CD3D INT 3Dh /* Unknown int */ + +042 000B2C CD394606 ESC FLD [bp+6] +043 000B30 CD3876F8 ESC FDIV [bp-8] +044 000B34 CD3846F8 ESC FADD [bp-8] +045 000B38 CD38362701 ESC FDIV [127h] +046 000B3D CD395EF8 ESC FSTP [bp-8] +047 000B41 CD3D INT 3Dh /* Unknown int */ + +048 JMP L29 ;Synthetic inst + + proc_7 ENDP + + proc_8 PROC FAR +000 000B68 55 PUSH bp +001 000B69 8BEC MOV bp, sp +002 000B6B CD39062601 ESC FLD [126h] +003 000B70 CD394606 ESC FLD [bp+6] +004 000B74 CD3AD9 ESC FCOMPP +005 000B77 CD393E2C06 ESC FSTSW [62Ch] +006 000B7C CD3D INT 3Dh /* Unknown int */ + +007 000B7E 8A262D06 MOV ah, [62Dh] +008 000B82 9E SAHF +009 000B83 7309 JAE L32 +010 000B85 CD394606 ESC FLD [bp+6] +011 000B89 CD35E0 ESC FCHS +012 000B8C EB04 JMP L33 + +013 000B92 EB00 L33: JMP L34 + +014 000B94 5D L34: POP bp +015 000B95 CB RETF + +016 000B8E CD394606 L32: ESC FLD [bp+6] +017 JMP L33 ;Synthetic inst + + proc_8 ENDP + + proc_9 PROC FAR +000 000B96 55 PUSH bp +001 000B97 8BEC MOV bp, sp +002 000B99 83EC08 SUB sp, 8 +003 000B9C 56 PUSH si +004 000B9D BE6400 MOV si, 64h +005 000BA0 E98800 JMP L35 + +006 000C2B 8BC6 L35: MOV ax, si +007 000C2D 4E DEC si +008 000C2E 0BC0 OR ax, ax +009 000C30 7403 JE L36 +010 000C32 E96EFF JMP L37 + +011 000BA3 CD394606 L37: ESC FLD [bp+6] +012 000BA7 CD384E06 ESC FMUL [bp+6] +013 000BAB CD384E06 ESC FMUL [bp+6] +014 000BAF CD384E06 ESC FMUL [bp+6] +015 000BB3 CD384E06 ESC FMUL [bp+6] +016 000BB7 CD384E06 ESC FMUL [bp+6] +017 000BBB CD384E06 ESC FMUL [bp+6] +018 000BBF CD395EF8 ESC FSTP [bp-8] +019 000BC3 CD3D INT 3Dh /* Unknown int */ + +020 000BC5 CD3946F8 ESC FLD [bp-8] +021 000BC9 CD387606 ESC FDIV [bp+6] +022 000BCD CD387606 ESC FDIV [bp+6] +023 000BD1 CD387606 ESC FDIV [bp+6] +024 000BD5 CD387606 ESC FDIV [bp+6] +025 000BD9 CD387606 ESC FDIV [bp+6] +026 000BDD CD387606 ESC FDIV [bp+6] +027 000BE1 CD395EF8 ESC FSTP [bp-8] +028 000BE5 CD3D INT 3Dh /* Unknown int */ + +029 000BE7 CD3946F8 ESC FLD [bp-8] +030 000BEB CD384606 ESC FADD [bp+6] +031 000BEF CD384606 ESC FADD [bp+6] +032 000BF3 CD384606 ESC FADD [bp+6] +033 000BF7 CD384606 ESC FADD [bp+6] +034 000BFB CD384606 ESC FADD [bp+6] +035 000BFF CD384606 ESC FADD [bp+6] +036 000C03 CD395EF8 ESC FSTP [bp-8] +037 000C07 CD3D INT 3Dh /* Unknown int */ + +038 000C09 CD3946F8 ESC FLD [bp-8] +039 000C0D CD386606 ESC FSUB [bp+6] +040 000C11 CD386606 ESC FSUB [bp+6] +041 000C15 CD386606 ESC FSUB [bp+6] +042 000C19 CD386606 ESC FSUB [bp+6] +043 000C1D CD386606 ESC FSUB [bp+6] +044 000C21 CD386606 ESC FSUB [bp+6] +045 000C25 CD395EF8 ESC FSTP [bp-8] +046 000C29 CD3D INT 3Dh /* Unknown int */ + +047 JMP L35 ;Synthetic inst + +048 000C35 CD3946F8 L36: ESC FLD [bp-8] +049 000C39 EB00 JMP L38 + +050 000C3B 5E L38: POP si +051 000C3C 8BE5 MOV sp, bp +052 000C3E 5D POP bp +053 000C3F CB RETF + + proc_9 ENDP + + proc_10 PROC FAR +000 000D23 55 PUSH bp +001 000D24 8BEC MOV bp, sp +002 000D26 83EC68 SUB sp, 68h +003 000D29 56 PUSH si +004 000D2A 57 PUSH di +005 000D2B 1E PUSH ds +006 000D2C B85901 MOV ax, 159h +007 000D2F 50 PUSH ax +008 000D30 16 PUSH ss +009 000D31 8D469C LEA ax, [bp-64h] +010 000D34 50 PUSH ax +011 000D35 0E PUSH cs +012 000D36 E8CDFF CALL near ptr proc_2 +013 000D39 83C408 ADD sp, 8 +014 000D3C 1E PUSH ds +015 000D3D B87001 MOV ax, 170h +016 000D40 50 PUSH ax +017 000D41 1E PUSH ds +018 000D42 B86701 MOV ax, 167h +019 000D45 50 PUSH ax +020 000D46 9A24022904 CALL far ptr fopen +021 000D4B 83C408 ADD sp, 8 +022 000D4E 89569A MOV [bp-66h], dx +023 000D51 894698 MOV [bp-68h], ax +024 000D54 0BD0 OR dx, ax +025 000D56 7516 JNE L39 +026 000D58 1E PUSH ds +027 000D59 B87201 MOV ax, 172h +028 000D5C 50 PUSH ax +029 000D5D 9A02000E05 CALL far ptr printf +030 000D62 59 POP cx +031 000D63 59 POP cx +032 000D64 B8FFFF MOV ax, 0FFFFh +033 000D67 50 PUSH ax +034 000D68 9A0200DA03 CALL far ptr exit +035 000D6D 59 POP cx + +036 000D6E 33FF L39: XOR di, di +037 000D70 EB3D JMP L40 + +038 000DAF 47 L40: INC di +039 000DB0 8BC7 MOV ax, di +040 000DB2 3DE803 CMP ax, 3E8h +041 000DB5 7CBB JL L41 +042 000DB7 FF769A PUSH word ptr [bp-66h] +043 000DBA FF7698 PUSH word ptr [bp-68h] +044 000DBD 9A0800A104 CALL far ptr fclose +045 000DC2 59 POP cx +046 000DC3 59 POP cx +047 000DC4 8BC7 MOV ax, di +048 000DC6 EB00 JMP L42 + +049 000DC8 5F L42: POP di +050 000DC9 5E POP si +051 000DCA 8BE5 MOV sp, bp +052 000DCC 5D POP bp +053 000DCD CB RETF + +054 000D72 33F6 L41: XOR si, si +055 000D74 EB32 JMP L43 + +056 000DA8 36807A9C00 L43: CMP byte ptr ss:[bp+si-64h], 0 +057 000DAD 75C7 JNE L44 +058 JMP L40 ;Synthetic inst + +059 000D76 C45E98 L44: LES bx, dword ptr[bp-68h] +060 000D79 26FF07 INC word ptr es:[bx] +061 000D7C 7D17 JGE L45 +062 000D7E 368A429C MOV al, ss:[bp+si-64h] +063 000D82 C45E98 LES bx, dword ptr[bp-68h] +064 000D85 26FF470C INC word ptr es:[bx+0Ch] +065 000D89 26C45F0C LES bx, dword ptres:[bx+0Ch] +066 000D8D 4B DEC bx +067 000D8E 268807 MOV es:[bx], al +068 000D91 B400 MOV ah, 0 +069 000D93 EB12 JMP L46 + +070 000DA7 46 L46: INC si +071 JMP L43 ;Synthetic inst + +072 000D95 FF769A L45: PUSH word ptr [bp-66h] +073 000D98 FF7698 PUSH word ptr [bp-68h] +074 000D9B 36FF729C PUSH word ptr ss:[bp+si-64h] +075 000D9F 9A06001005 CALL far ptr _fputc +076 000DA4 83C406 ADD sp, 6 +077 JMP L46 ;Synthetic inst + + proc_10 ENDP + diff --git a/tests/prev_base/DHAMP.EXE.a2 b/tests/prev_base/DHAMP.EXE.a2 new file mode 100644 index 0000000..33e51cd --- /dev/null +++ b/tests/prev_base/DHAMP.EXE.a2 @@ -0,0 +1,601 @@ + proc_10 PROC FAR +000 000D23 55 PUSH bp +001 000D24 8BEC MOV bp, sp +002 000D26 83EC68 SUB sp, 68h +003 000D29 56 PUSH si +004 000D2A 57 PUSH di +005 000D2B 1E PUSH ds +006 000D2C B85901 MOV ax, 159h +007 000D2F 50 PUSH ax +008 000D30 16 PUSH ss +009 000D31 8D469C LEA ax, [bp-64h] +010 000D34 50 PUSH ax +011 000D35 0E PUSH cs +012 000D36 E8CDFF CALL near ptr proc_2 +013 000D39 83C408 ADD sp, 8 +014 000D3C 1E PUSH ds +015 000D3D B87001 MOV ax, 170h +016 000D40 50 PUSH ax +017 000D41 1E PUSH ds +018 000D42 B86701 MOV ax, 167h +019 000D45 50 PUSH ax +020 000D46 9A24022904 CALL far ptr fopen +021 000D4B 83C408 ADD sp, 8 +022 000D4E 89569A MOV [bp-66h], dx +023 000D51 894698 MOV [bp-68h], ax +024 000D54 0BD0 OR dx, ax +025 000D56 7516 JNE L1 +026 000D58 1E PUSH ds +027 000D59 B87201 MOV ax, 172h +028 000D5C 50 PUSH ax +029 000D5D 9A02000E05 CALL far ptr printf +030 000D62 59 POP cx +031 000D63 59 POP cx +032 000D64 B8FFFF MOV ax, 0FFFFh +033 000D67 50 PUSH ax +034 000D68 9A0200DA03 CALL far ptr exit +035 000D6D 59 POP cx + +036 000D6E 33FF L1: XOR di, di + +038 000DAF 47 L2: INC di +039 000DB0 8BC7 MOV ax, di +040 000DB2 3DE803 CMP ax, 3E8h +041 000DB5 7CBB JL L3 +042 000DB7 FF769A PUSH word ptr [bp-66h] +043 000DBA FF7698 PUSH word ptr [bp-68h] +044 000DBD 9A0800A104 CALL far ptr fclose +045 000DC2 59 POP cx +046 000DC3 59 POP cx +047 000DC4 8BC7 MOV ax, di +049 000DC8 5F POP di +050 000DC9 5E POP si +051 000DCA 8BE5 MOV sp, bp +052 000DCC 5D POP bp +053 000DCD CB RETF + +054 000D72 33F6 L3: XOR si, si + +056 000DA8 36807A9C00 L4: CMP byte ptr ss:[bp+si-64h], 0 +057 000DAD 75C7 JNE L5 + +059 000D76 C45E98 L5: LES bx, dword ptr[bp-68h] +060 000D79 26FF07 INC word ptr es:[bx] +061 000D7C 7D17 JGE L6 +062 000D7E 368A429C MOV al, ss:[bp+si-64h] +063 000D82 C45E98 LES bx, dword ptr[bp-68h] +064 000D85 26FF470C INC word ptr es:[bx+0Ch] +065 000D89 26C45F0C LES bx, dword ptres:[bx+0Ch] +066 000D8D 4B DEC bx +067 000D8E 268807 MOV es:[bx], al +068 000D91 B400 MOV ah, 0 + +070 000DA7 46 L7: INC si +071 JMP L4 ;Synthetic inst + +072 000D95 FF769A L6: PUSH word ptr [bp-66h] +073 000D98 FF7698 PUSH word ptr [bp-68h] +074 000D9B 36FF729C PUSH word ptr ss:[bp+si-64h] +075 000D9F 9A06001005 CALL far ptr _fputc +076 000DA4 83C406 ADD sp, 6 +077 JMP L7 ;Synthetic inst + + proc_10 ENDP + + proc_9 PROC FAR +000 000B96 55 PUSH bp +001 000B97 8BEC MOV bp, sp +002 000B99 83EC08 SUB sp, 8 +003 000B9C 56 PUSH si +004 000B9D BE6400 MOV si, 64h + +006 000C2B 8BC6 L8: MOV ax, si +007 000C2D 4E DEC si +008 000C2E 0BC0 OR ax, ax +009 000C30 7403 JE L9 + +011 000BA3 CD394606 L10: ESC FLD [bp+6] +012 000BA7 CD384E06 ESC FMUL [bp+6] +013 000BAB CD384E06 ESC FMUL [bp+6] +014 000BAF CD384E06 ESC FMUL [bp+6] +015 000BB3 CD384E06 ESC FMUL [bp+6] +016 000BB7 CD384E06 ESC FMUL [bp+6] +017 000BBB CD384E06 ESC FMUL [bp+6] +018 000BBF CD395EF8 ESC FSTP [bp-8] +019 000BC3 CD3D INT 3Dh /* Unknown int */ + +020 000BC5 CD3946F8 ESC FLD [bp-8] +021 000BC9 CD387606 ESC FDIV [bp+6] +022 000BCD CD387606 ESC FDIV [bp+6] +023 000BD1 CD387606 ESC FDIV [bp+6] +024 000BD5 CD387606 ESC FDIV [bp+6] +025 000BD9 CD387606 ESC FDIV [bp+6] +026 000BDD CD387606 ESC FDIV [bp+6] +027 000BE1 CD395EF8 ESC FSTP [bp-8] +028 000BE5 CD3D INT 3Dh /* Unknown int */ + +029 000BE7 CD3946F8 ESC FLD [bp-8] +030 000BEB CD384606 ESC FADD [bp+6] +031 000BEF CD384606 ESC FADD [bp+6] +032 000BF3 CD384606 ESC FADD [bp+6] +033 000BF7 CD384606 ESC FADD [bp+6] +034 000BFB CD384606 ESC FADD [bp+6] +035 000BFF CD384606 ESC FADD [bp+6] +036 000C03 CD395EF8 ESC FSTP [bp-8] +037 000C07 CD3D INT 3Dh /* Unknown int */ + +038 000C09 CD3946F8 ESC FLD [bp-8] +039 000C0D CD386606 ESC FSUB [bp+6] +040 000C11 CD386606 ESC FSUB [bp+6] +041 000C15 CD386606 ESC FSUB [bp+6] +042 000C19 CD386606 ESC FSUB [bp+6] +043 000C1D CD386606 ESC FSUB [bp+6] +044 000C21 CD386606 ESC FSUB [bp+6] +045 000C25 CD395EF8 ESC FSTP [bp-8] +046 000C29 CD3D INT 3Dh /* Unknown int */ + +047 JMP L8 ;Synthetic inst + +048 000C35 CD3946F8 L9: ESC FLD [bp-8] +050 000C3B 5E POP si +051 000C3C 8BE5 MOV sp, bp +052 000C3E 5D POP bp +053 000C3F CB RETF + + proc_9 ENDP + + proc_8 PROC FAR +000 000B68 55 PUSH bp +001 000B69 8BEC MOV bp, sp +002 000B6B CD39062601 ESC FLD [126h] +003 000B70 CD394606 ESC FLD [bp+6] +004 000B74 CD3AD9 ESC FCOMPP +005 000B77 CD393E2C06 ESC FSTSW [62Ch] +006 000B7C CD3D INT 3Dh /* Unknown int */ + +007 000B7E 8A262D06 MOV ah, [62Dh] +008 000B82 9E SAHF +009 000B83 7309 JAE L11 +010 000B85 CD394606 ESC FLD [bp+6] +011 000B89 CD35E0 ESC FCHS + +014 000B94 5D L12: POP bp +015 000B95 CB RETF + +016 000B8E CD394606 L11: ESC FLD [bp+6] +017 JMP L12 ;Synthetic inst + + proc_8 ENDP + + proc_7 PROC FAR +000 000AD1 55 PUSH bp +001 000AD2 8BEC MOV bp, sp +002 000AD4 83EC10 SUB sp, 10h +003 000AD7 CD394606 ESC FLD [bp+6] +004 000ADB CD38362701 ESC FDIV [127h] +005 000AE0 CD395EF8 ESC FSTP [bp-8] +006 000AE4 CD3D INT 3Dh /* Unknown int */ + +007 000AE6 8B460C MOV ax, [bp+0Ch] +008 000AE9 8946F6 MOV [bp-0Ah], ax +009 000AEC 8B460A MOV ax, [bp+0Ah] +010 000AEF 8946F4 MOV [bp-0Ch], ax +011 000AF2 8B4608 MOV ax, [bp+8] +012 000AF5 8946F2 MOV [bp-0Eh], ax +013 000AF8 8B4606 MOV ax, [bp+6] +014 000AFB 8946F0 MOV [bp-10h], ax + +016 000B43 CD39062F01 L13: ESC FLD [12Fh] +017 000B48 CD384EF8 ESC FMUL [bp-8] +018 000B4C CD385EF0 ESC FCOMP [bp-10h] +019 000B50 CD393E2C06 ESC FSTSW [62Ch] +020 000B55 CD3D INT 3Dh /* Unknown int */ + +021 000B57 8A262D06 MOV ah, [62Dh] +022 000B5B 9E SAHF +023 000B5C 72A2 JB L14 +024 000B5E CD3946F8 ESC FLD [bp-8] +026 000B64 8BE5 MOV sp, bp +027 000B66 5D POP bp +028 000B67 CB RETF + +029 000B00 CD394606 L14: ESC FLD [bp+6] +030 000B04 CD3876F8 ESC FDIV [bp-8] +031 000B08 CD3866F8 ESC FSUB [bp-8] +032 000B0C CD395EF0 ESC FSTP [bp-10h] +033 000B10 CD3D INT 3Dh /* Unknown int */ + +034 000B12 FF76F6 PUSH word ptr [bp-0Ah] +035 000B15 FF76F4 PUSH word ptr [bp-0Ch] +036 000B18 FF76F2 PUSH word ptr [bp-0Eh] +037 000B1B FF76F0 PUSH word ptr [bp-10h] +038 000B1E 9AB8028B00 CALL far ptr proc_8 +039 000B23 83C408 ADD sp, 8 +040 000B26 CD395EF0 ESC FSTP [bp-10h] +041 000B2A CD3D INT 3Dh /* Unknown int */ + +042 000B2C CD394606 ESC FLD [bp+6] +043 000B30 CD3876F8 ESC FDIV [bp-8] +044 000B34 CD3846F8 ESC FADD [bp-8] +045 000B38 CD38362701 ESC FDIV [127h] +046 000B3D CD395EF8 ESC FSTP [bp-8] +047 000B41 CD3D INT 3Dh /* Unknown int */ + +048 JMP L13 ;Synthetic inst + + proc_7 ENDP + + proc_6 PROC FAR +000 000A74 55 PUSH bp +001 000A75 8BEC MOV bp, sp +002 000A77 56 PUSH si +003 000A78 8B4606 MOV ax, [bp+6] +004 000A7B 0B4608 OR ax, [bp+8] +005 000A7E 7524 JNE L15 +006 000A80 33F6 XOR si, si + +008 000A9C 81FE2823 L16: CMP si, 2328h +009 000AA0 7CE2 JL L17 + +011 000AC6 8B5608 L18: MOV dx, [bp+8] +012 000AC9 8B4606 MOV ax, [bp+6] +014 000ACE 5E POP si +015 000ACF 5D POP bp +016 000AD0 CB RETF + +017 000A84 8B169600 L17: MOV dx, [96h] +018 000A88 A19400 MOV ax, [94h] +019 000A8B 014606 ADD [bp+6], ax +020 000A8E 115608 ADC [bp+8], dx +021 000A91 8306940002 ADD word ptr [94h], 2 +022 000A96 8316960000 ADC word ptr [96h], 0 +023 000A9B 46 INC si +024 JMP L16 ;Synthetic inst + +025 000AA4 33F6 L15: XOR si, si + +027 000AC0 81FE2823 L19: CMP si, 2328h +028 000AC4 7CE2 JL L20 + +030 000AA8 832E940002 L20: SUB word ptr [94h], 2 +031 000AAD 831E960000 SBB word ptr [96h], 0 +032 000AB2 8B169600 MOV dx, [96h] +033 000AB6 A19400 MOV ax, [94h] +034 000AB9 294606 SUB [bp+6], ax +035 000ABC 195608 SBB [bp+8], dx +036 000ABF 46 INC si +037 JMP L19 ;Synthetic inst + + proc_6 ENDP + + proc_5 PROC FAR +000 000C40 55 PUSH bp +001 000C41 8BEC MOV bp, sp +002 000C43 56 PUSH si +003 000C44 8B7606 MOV si, [bp+6] +004 000C47 83FE02 CMP si, 2 +005 000C4A 7E1E JLE L21 +006 000C4C 8BC6 MOV ax, si +007 000C4E 48 DEC ax +008 000C4F 50 PUSH ax +009 000C50 0E PUSH cs +010 000C51 E8ECFF CALL near ptr proc_5 +011 000C54 59 POP cx +012 000C55 50 PUSH ax +013 000C56 8BC6 MOV ax, si +014 000C58 05FEFF ADD ax, 0FFFEh +015 000C5B 50 PUSH ax +016 000C5C 0E PUSH cs +017 000C5D E8E0FF CALL near ptr proc_5 +018 000C60 59 POP cx +019 000C61 8BD0 MOV dx, ax +020 000C63 58 POP ax +021 000C64 03C2 ADD ax, dx + +023 000C6F 5E L22: POP si +024 000C70 5D POP bp +025 000C71 CB RETF + +026 000C6A B80100 L21: MOV ax, 1 +027 000C6D EB00 JMP L22 + + proc_5 ENDP + + proc_4 PROC FAR +000 000DCE 55 PUSH bp +001 000DCF 8BEC MOV bp, sp +002 000DD1 83EC04 SUB sp, 4 +003 000DD4 56 PUSH si +004 000DD5 57 PUSH di +005 000DD6 33F6 XOR si, si + +007 000DFA 81FEE803 L23: CMP si, 3E8h +008 000DFE 7CDA JL L24 +009 000E00 8B46FE MOV ax, [bp-2] +011 000E05 5F POP di +012 000E06 5E POP si +013 000E07 8BE5 MOV sp, bp +014 000E09 5D POP bp +015 000E0A CB RETF + +016 000DDA C746FE0000 L24: MOV word ptr [bp-2], 0 +017 000DDF 33FF XOR di, di +018 000DE1 C746FC0100 MOV word ptr [bp-4], 1 + +020 000DF3 81FFB300 L25: CMP di, 0B3h +021 000DF7 7CEF JL L26 +022 000DF9 46 INC si +023 JMP L23 ;Synthetic inst + +024 000DE8 8B46FC L26: MOV ax, [bp-4] +025 000DEB 0146FE ADD [bp-2], ax +026 000DEE 8346FC02 ADD word ptr [bp-4], 2 +027 000DF2 47 INC di +028 JMP L25 ;Synthetic inst + + proc_4 ENDP + + proc_3 PROC FAR +000 000CC8 55 PUSH bp +001 000CC9 8BEC MOV bp, sp + +003 000CE0 C45E06 L27: LES bx, dword ptr[bp+6] +004 000CE3 268A07 MOV al, es:[bx] +005 000CE6 C45E0A LES bx, dword ptr[bp+0Ah] +006 000CE9 263A07 CMP al, es:[bx] +007 000CEC 74DF JE L28 +008 000CEE C45E06 LES bx, dword ptr[bp+6] +009 000CF1 268A07 MOV al, es:[bx] +010 000CF4 98 CWD +011 000CF5 C45E0A LES bx, dword ptr[bp+0Ah] +012 000CF8 50 PUSH ax +013 000CF9 268A07 MOV al, es:[bx] +014 000CFC 98 CWD +015 000CFD 8BD0 MOV dx, ax +016 000CFF 58 POP ax +017 000D00 2BC2 SUB ax, dx + +019 000D04 5D L29: POP bp +020 000D05 CB RETF + +021 000CCD C45E06 L28: LES bx, dword ptr[bp+6] +022 000CD0 26803F00 CMP byte ptr es:[bx], 0 +023 000CD4 7504 JNE L30 +024 000CD6 33C0 XOR ax, ax +025 000CD8 EB2A JMP L29 + +026 000CDA FF4606 L30: INC word ptr [bp+6] +027 000CDD FF460A INC word ptr [bp+0Ah] +028 JMP L27 ;Synthetic inst + + proc_3 ENDP + + proc_2 PROC FAR +000 000D06 55 PUSH bp +001 000D07 8BEC MOV bp, sp + +003 000D0B C45E0A L31: LES bx, dword ptr[bp+0Ah] +004 000D0E FF460A INC word ptr [bp+0Ah] +005 000D11 268A07 MOV al, es:[bx] +006 000D14 C45E06 LES bx, dword ptr[bp+6] +007 000D17 FF4606 INC word ptr [bp+6] +008 000D1A 268807 MOV es:[bx], al +009 000D1D 0AC0 OR al, al +010 000D1F 75EA JNE L31 +011 000D21 5D POP bp +012 000D22 CB RETF + + proc_2 ENDP + + proc_1 PROC FAR +000 000C72 55 PUSH bp +001 000C73 8BEC MOV bp, sp +002 000C75 56 PUSH si +003 000C76 57 PUSH di +004 000C77 33F6 XOR si, si +005 000C79 33FF XOR di, di + +007 000CBA 81FE2823 L32: CMP si, 2328h +008 000CBE 7CBD JL L33 +009 000CC0 8BC7 MOV ax, di +011 000CC4 5F POP di +012 000CC5 5E POP si +013 000CC6 5D POP bp +014 000CC7 CB RETF + +015 000C7D 1E L33: PUSH ds +016 000C7E B83701 MOV ax, 137h +017 000C81 50 PUSH ax +018 000C82 FF7608 PUSH word ptr [bp+8] +019 000C85 FF7606 PUSH word ptr [bp+6] +020 000C88 9A56048B00 CALL far ptr proc_2 +021 000C8D 83C408 ADD sp, 8 +022 000C90 1E PUSH ds +023 000C91 B84801 MOV ax, 148h +024 000C94 50 PUSH ax +025 000C95 FF760C PUSH word ptr [bp+0Ch] +026 000C98 FF760A PUSH word ptr [bp+0Ah] +027 000C9B 9A56048B00 CALL far ptr proc_2 +028 000CA0 83C408 ADD sp, 8 +029 000CA3 FF760C PUSH word ptr [bp+0Ch] +030 000CA6 FF760A PUSH word ptr [bp+0Ah] +031 000CA9 FF7608 PUSH word ptr [bp+8] +032 000CAC FF7606 PUSH word ptr [bp+6] +033 000CAF 9A18048B00 CALL far ptr proc_3 +034 000CB4 83C408 ADD sp, 8 +035 000CB7 03F8 ADD di, ax +036 000CB9 46 INC si +037 JMP L32 ;Synthetic inst + + proc_1 ENDP + + main PROC FAR +000 0008B4 55 PUSH bp +001 0008B5 8BEC MOV bp, sp +002 0008B7 81ECD400 SUB sp, 0D4h +003 0008BB 56 PUSH si +004 0008BC 33F6 XOR si, si +005 0008BE B80700 MOV ax, 7 +006 0008C1 50 PUSH ax +007 0008C2 1E PUSH ds +008 0008C3 B89800 MOV ax, 98h +009 0008C6 50 PUSH ax +010 0008C7 9A02000E05 CALL far ptr printf +011 0008CC 83C406 ADD sp, 6 + +013 000A56 83FE06 L34: CMP si, 6 +014 000A59 7D03 JGE L35 + +016 0008D2 8BC6 L36: MOV ax, si +017 0008D4 3D0500 CMP ax, 5 +018 0008D7 7603 JBE L37 + +021 000A55 46 L38: INC si +022 JMP L34 ;Synthetic inst + +023 0008DC 8BD8 L37: MOV bx, ax +024 0008DE D1E3 SHL bx, 1 +025 0008E0 2EFFA73500 JMP word ptr cs:[bx+35h];Switch + +026 0008F1 16 PUSH ss ;Case l0 +027 0008F2 8D4690 LEA ax, [bp-70h] +028 0008F5 50 PUSH ax +029 0008F6 16 PUSH ss +030 0008F7 8D862CFF LEA ax, [bp-0D4h] +031 0008FB 50 PUSH ax +032 0008FC 9AC2038B00 CALL far ptr proc_1 +033 000901 83C408 ADD sp, 8 +034 000904 A31806 MOV [618h], ax +035 000907 FF361806 PUSH word ptr [618h] +036 00090B 1E PUSH ds +037 00090C B8A500 MOV ax, 0A5h +038 00090F 50 PUSH ax +039 000910 9A02000E05 CALL far ptr printf +040 000915 83C406 ADD sp, 6 +041 000918 E93A01 JMP L38 + +042 00091B 9A1E058B00 CALL far ptr proc_4 ;Case l1 +043 000920 A31A06 MOV [61Ah], ax +044 000923 FF361A06 PUSH word ptr [61Ah] +045 000927 1E PUSH ds +046 000928 B8B400 MOV ax, 0B4h +047 00092B 50 PUSH ax +048 00092C 9A02000E05 CALL far ptr printf +049 000931 83C406 ADD sp, 6 +050 000934 E91E01 JMP L38 + +051 000937 B81800 MOV ax, 18h ;Case l2 +052 00093A 50 PUSH ax +053 00093B 9A90038B00 CALL far ptr proc_5 +054 000940 59 POP cx +055 000941 A31E06 MOV [61Eh], ax +056 000944 FF361E06 PUSH word ptr [61Eh] +057 000948 1E PUSH ds +058 000949 B8C300 MOV ax, 0C3h +059 00094C 50 PUSH ax +060 00094D 9A02000E05 CALL far ptr printf +061 000952 83C406 ADD sp, 6 +062 000955 E9FD00 JMP L38 + +063 000958 C746F60000 MOV word ptr [bp-0Ah], 0;Case l3 +064 00095D C746F40000 MOV word ptr [bp-0Ch], 0 +065 000962 FF76F6 PUSH word ptr [bp-0Ah] +066 000965 FF76F4 PUSH word ptr [bp-0Ch] +067 000968 9AC4018B00 CALL far ptr proc_6 +068 00096D 59 POP cx +069 00096E 59 POP cx +070 00096F 89162206 MOV [622h], dx +071 000973 A32006 MOV [620h], ax +072 000976 FF362206 PUSH word ptr [622h] +073 00097A FF362006 PUSH word ptr [620h] +074 00097E 9AC4018B00 CALL far ptr proc_6 +075 000983 59 POP cx +076 000984 59 POP cx +077 000985 8956F6 MOV [bp-0Ah], dx +078 000988 8946F4 MOV [bp-0Ch], ax +079 00098B FF362206 PUSH word ptr [622h] +080 00098F FF362006 PUSH word ptr [620h] +081 000993 1E PUSH ds +082 000994 B8D200 MOV ax, 0D2h +083 000997 50 PUSH ax +084 000998 9A02000E05 CALL far ptr printf +085 00099D 83C408 ADD sp, 8 +086 0009A0 FF76F6 PUSH word ptr [bp-0Ah] +087 0009A3 FF76F4 PUSH word ptr [bp-0Ch] +088 0009A6 1E PUSH ds +089 0009A7 B8E100 MOV ax, 0E1h +090 0009AA 50 PUSH ax +091 0009AB 9A02000E05 CALL far ptr printf +092 0009B0 83C408 ADD sp, 8 +093 0009B3 E99F00 JMP L38 + +094 0009B6 8B162206 MOV dx, [622h] ;Case l4 +095 0009BA A12006 MOV ax, [620h] +096 0009BD 52 PUSH dx +097 0009BE 50 PUSH ax +098 0009BF CD378626FF ESC FILD [bp-0DAh] +099 0009C4 CD3D INT 3Dh /* Unknown int */ + +100 0009C6 83C404 ADD sp, 4 +101 0009C9 83EC08 SUB sp, 8 +102 0009CC CD399E22FF ESC FSTP [bp-0DEh] +103 0009D1 CD3D INT 3Dh /* Unknown int */ + +104 0009D3 9A21028B00 CALL far ptr proc_7 +105 0009D8 83C408 ADD sp, 8 +106 0009DB CD391E2406 ESC FSTP [624h] +107 0009E0 CD3D INT 3Dh /* Unknown int */ + +108 0009E2 FF362A06 PUSH word ptr [62Ah] +109 0009E6 FF362806 PUSH word ptr [628h] +110 0009EA FF362606 PUSH word ptr [626h] +111 0009EE FF362406 PUSH word ptr [624h] +112 0009F2 1E PUSH ds +113 0009F3 B8F100 MOV ax, 0F1h +114 0009F6 50 PUSH ax +115 0009F7 9A02000E05 CALL far ptr printf +116 0009FC 83C40C ADD sp, 0Ch +117 0009FF FF362A06 PUSH word ptr [62Ah] +118 000A03 FF362806 PUSH word ptr [628h] +119 000A07 FF362606 PUSH word ptr [626h] +120 000A0B FF362406 PUSH word ptr [624h] +121 000A0F 9AE6028B00 CALL far ptr proc_9 +122 000A14 83C408 ADD sp, 8 +123 000A17 CD395EF8 ESC FSTP [bp-8] +124 000A1B CD3D INT 3Dh /* Unknown int */ + +125 000A1D FF76FE PUSH word ptr [bp-2] +126 000A20 FF76FC PUSH word ptr [bp-4] +127 000A23 FF76FA PUSH word ptr [bp-6] +128 000A26 FF76F8 PUSH word ptr [bp-8] +129 000A29 1E PUSH ds +130 000A2A B80001 MOV ax, 100h +131 000A2D 50 PUSH ax +132 000A2E 9A02000E05 CALL far ptr printf +133 000A33 83C40C ADD sp, 0Ch +134 000A36 EB1D JMP L38 + +135 000A38 9A73048B00 CALL far ptr proc_10 ;Case l5 +136 000A3D A31C06 MOV [61Ch], ax +137 000A40 FF361C06 PUSH word ptr [61Ch] +138 000A44 1E PUSH ds +139 000A45 B80E01 MOV ax, 10Eh +140 000A48 50 PUSH ax +141 000A49 9A02000E05 CALL far ptr printf +142 000A4E 83C406 ADD sp, 6 +143 000A51 EB02 JMP L38 + +144 000A5E B80700 L35: MOV ax, 7 +145 000A61 50 PUSH ax +146 000A62 1E PUSH ds +147 000A63 B81C01 MOV ax, 11Ch +148 000A66 50 PUSH ax +149 000A67 9A02000E05 CALL far ptr printf +150 000A6C 83C406 ADD sp, 6 +151 000A6F 5E POP si +152 000A70 8BE5 MOV sp, bp +153 000A72 5D POP bp +154 000A73 CB RETF + + main ENDP + diff --git a/tests/prev_base/DHAMP.b b/tests/prev_base/DHAMP.b new file mode 100644 index 0000000..07b658d --- /dev/null +++ b/tests/prev_base/DHAMP.b @@ -0,0 +1,396 @@ +/* + * Input file : ./tests/inputs/DHAMP.EXE + * File type : EXE + */ + +#include "dcc.h" + + +int proc_2 (long arg0, long arg1) +/* Takes 8 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +char loc1; /* al */ +int loc2; /* al */ +int loc3; /* bx */ + + do { + arg0 = (arg0 + 1); + loc1 = es[bx]; + arg1 = (arg1 + 1); + es[bx] = loc1; + } while ((loc2 != 0)); + return (loc3); +} + + +int proc_3 (long arg0, long arg1) +/* Takes 8 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; /* ax */ + + while ((es[bx] == es[bx])) { + + if (es[bx] == 0) { + loc1 = 0; + return (loc1); + } + else { + arg0 = (arg0 + 1); + arg1 = (arg1 + 1); + } + } /* end of while */ + loc1 = (es[bx] - es[bx]); +} + + +int proc_1 (int arg0, int arg1, int arg2, int arg3) +/* Takes 8 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; /* si */ +int loc2; /* di */ + loc1 = 0; + loc2 = 0; + + while ((loc1 < 0x2328)) { + proc_2 (arg1, arg0, 311); + proc_2 (arg3, arg2, 328); + loc2 = (loc2 + proc_3 (arg1, arg0, arg3, arg2)); + loc1 = (loc1 + 1); + } /* end of while */ + return (loc2); +} + + +int proc_4 () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; +int loc3; +int loc4; + loc3 = 0; + + while ((loc3 < 0x3e8)) { + loc1 = 0; + loc4 = 0; + loc2 = 1; + + while ((loc4 < 179)) { + loc1 = (loc1 + loc2); + loc2 = (loc2 + 2); + loc4 = (loc4 + 1); + } /* end of while */ + loc3 = (loc3 + 1); + } /* end of while */ + return (loc1); +} + + +int proc_5 (int arg0) +/* Takes 2 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; /* si */ +int loc2; /* ax */ + loc1 = arg0; + + if (loc1 > 2) { + loc2 = (proc_5 ((loc1 - 1)) + proc_5 ((loc1 + 0xfffe))); + } + else { + loc2 = 1; + } + return (loc2); +} + + +long proc_6 (int arg0, int arg1) +/* Takes 4 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +long loc1; +int loc2; /* si */ + + if ((arg0 | arg1) == 0) { + loc2 = 0; + + while ((loc2 < 0x2328)) { + loc1 = (loc1 + [23798]); + [23798] = ([23798] + 2); + loc2 = (loc2 + 1); + } /* end of while */ + } + else { + loc2 = 0; + + while ((loc2 < 0x2328)) { + [23798] = ([23798] - 2); + loc1 = (loc1 - [23798]); + loc2 = (loc2 + 1); + } /* end of while */ + } + return (loc1); +} + + +void proc_8 (int arg0) +/* Takes 8 bytes of parameters. + * High-level language prologue code. + * Untranslatable routine. Assembler provided. + * C calling convention. + * Contains instructions not normally used by compilers. + * Contains coprocessor instructions. + */ +{ + PUSH bp + MOV bp, sp + ESC FLD [126h] + ESC FLD [bp+6] + ESC FCOMPP + ESC FSTSW [62Ch] + INT 3Dh /* Unknown int */ + + MOV ah, [62Dh] + SAHF + JAE L1 + ESC FLD [bp+6] + ESC FCHS + + L2: POP bp + RETF + + L1: ESC FLD [bp+6] + JMP L2 ;Synthetic inst +} + + + proc_7 (int arg0, int arg1, int arg2, int arg3) +/* Takes 8 bytes of parameters. + * High-level language prologue code. + * Untranslatable routine. Assembler provided. + * C calling convention. + * Contains instructions not normally used by compilers. + * Contains coprocessor instructions. + */ +{ + PUSH bp + MOV bp, sp + SUB sp, 10h + ESC FLD [bp+6] + ESC FDIV [127h] + ESC FSTP [bp-8] + INT 3Dh /* Unknown int */ + + MOV ax, [bp+0Ch] + MOV [bp-0Ah], ax + MOV ax, [bp+0Ah] + MOV [bp-0Ch], ax + MOV ax, [bp+8] + MOV [bp-0Eh], ax + MOV ax, [bp+6] + MOV [bp-10h], ax + + L1: ESC FLD [12Fh] + ESC FMUL [bp-8] + ESC FCOMP [bp-10h] + ESC FSTSW [62Ch] + INT 3Dh /* Unknown int */ + + MOV ah, [62Dh] + SAHF + JB L2 + ESC FLD [bp-8] + MOV sp, bp + POP bp + RETF + + L2: ESC FLD [bp+6] + ESC FDIV [bp-8] + ESC FSUB [bp-8] + ESC FSTP [bp-10h] + INT 3Dh /* Unknown int */ + + PUSH word ptr [bp-0Ah] + PUSH word ptr [bp-0Ch] + PUSH word ptr [bp-0Eh] + PUSH word ptr [bp-10h] + CALL far ptr proc_8 + ADD sp, 8 + ESC FSTP [bp-10h] + INT 3Dh /* Unknown int */ + + ESC FLD [bp+6] + ESC FDIV [bp-8] + ESC FADD [bp-8] + ESC FDIV [127h] + ESC FSTP [bp-8] + INT 3Dh /* Unknown int */ + + JMP L1 ;Synthetic inst +} + + + proc_9 (int arg0) +/* Takes 8 bytes of parameters. + * High-level language prologue code. + * C calling convention. + * Contains instructions not normally used by compilers. + * Contains coprocessor instructions. + */ +{ +int loc1; +int loc2; +int loc3; /* ax */ + loc2 = 100; + loc3 = loc2; + loc2 = (loc2 - 1); + + while (((loc3 | loc3) != 0)) { + loc3 = loc2; + loc2 = (loc2 - 1); + } /* end of while */ + return (var06278); +} + + +int proc_10 () +/* Takes no parameters. + * High-level language prologue code. + * Untranslatable routine. Assembler provided. + * Return value in register ax. + * Contains instructions not normally used by compilers. + */ +{ + PUSH bp + MOV bp, sp + SUB sp, 68h + PUSH si + PUSH di + PUSH ds + MOV ax, 159h + PUSH ax + PUSH ss + LEA ax, [bp-64h] + PUSH ax + PUSH cs + CALL near ptr proc_2 + ADD sp, 8 + PUSH ds + MOV ax, 170h + PUSH ax + PUSH ds + MOV ax, 167h + PUSH ax + CALL far ptr fopen + ADD sp, 8 + MOV [bp-66h], dx + MOV [bp-68h], ax + OR dx, ax + JNE L1 + PUSH ds + MOV ax, 172h + PUSH ax + CALL far ptr printf + POP cx + POP cx + MOV ax, 0FFFFh + PUSH ax + CALL far ptr exit + POP cx + + L1: XOR di, 0 + + L2: INC di + MOV ax, di + CMP ax, 3E8h + JL L3 + PUSH word ptr [bp-66h] + PUSH word ptr [bp-68h] + CALL far ptr fclose + POP cx + POP cx + MOV ax, di + POP di + POP si + MOV sp, bp + POP bp + RETF + + L3: XOR si, 0 + + L4: CMP byte ptr ss:[bp+si-64h], 0 + JNE L5 + + L5: LES bx, dword ptr[bp-68h] + INC word ptr es:[bx] + JGE L6 + MOV al, ss:[bp+si-64h] + LES bx, dword ptr[bp-68h] + INC word ptr es:[bx+0Ch] + LES bx, dword ptres:[bx+0Ch] + DEC bx + MOV es:[bx], al + MOV ah, 0 + + L7: INC si + JMP L4 ;Synthetic inst + + L6: PUSH word ptr [bp-66h] + PUSH word ptr [bp-68h] + PUSH word ptr ss:[bp+si-64h] + CALL far ptr _fputc + ADD sp, 6 + JMP L7 ;Synthetic inst +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + * Contains instructions not normally used by compilers. + * Contains coprocessor instructions. + */ +{ +int loc1; +int loc2; +int loc3; +int loc4; +int loc5; +int loc6; +int loc7; +int loc8; +int loc9; +int loc10; +int loc11; +int loc12; /* ax */ +int loc13; /* bx */ + printf ("Start...%c\n\n", 7); + + while ((loc11 < 6)) { + loc12 = loc11; + + if (loc12 <= 5) { + loc13 = (loc12 << 1); + var06278 = proc_1 (&loc2, &loc1, , ); + printf ("\ncresult = %d\n", var06278); + } + loc11 = (loc11 + 1); + } /* end of while */ + printf ("\n\n...End%c", 7); +} + diff --git a/tests/prev_base/FIBOL.EXE.a1 b/tests/prev_base/FIBOL.EXE.a1 new file mode 100644 index 0000000..35c0a19 --- /dev/null +++ b/tests/prev_base/FIBOL.EXE.a1 @@ -0,0 +1,99 @@ + main PROC FAR +000 0004C2 55 PUSH bp +001 0004C3 8BEC MOV bp, sp +002 0004C5 83EC04 SUB sp, 4 +003 0004C8 56 PUSH si +004 0004C9 57 PUSH di +005 0004CA 1E PUSH ds +006 0004CB B89400 MOV ax, 94h +007 0004CE 50 PUSH ax +008 0004CF 9A0E004D01 CALL far ptr printf +009 0004D4 59 POP cx +010 0004D5 59 POP cx +011 0004D6 16 PUSH ss +012 0004D7 8D46FC LEA ax, [bp-4] +013 0004DA 50 PUSH ax +014 0004DB 1E PUSH ds +015 0004DC B8B100 MOV ax, 0B1h +016 0004DF 50 PUSH ax +017 0004E0 9A07000102 CALL far ptr scanf +018 0004E5 83C408 ADD sp, 8 +019 0004E8 BE0100 MOV si, 1 +020 0004EB EB3B JMP L1 + +021 000528 3B76FC L1: CMP si, [bp-4] +022 00052B 7EC0 JLE L2 +023 00052D 33C0 XOR ax, ax +024 00052F 50 PUSH ax +025 000530 9A0A005A00 CALL far ptr exit +026 000535 59 POP cx +027 000536 5F POP di +028 000537 5E POP si +029 000538 8BE5 MOV sp, bp +030 00053A 5D POP bp +031 00053B CB RETF + +032 0004ED 1E L2: PUSH ds +033 0004EE B8B400 MOV ax, 0B4h +034 0004F1 50 PUSH ax +035 0004F2 9A0E004D01 CALL far ptr printf +036 0004F7 59 POP cx +037 0004F8 59 POP cx +038 0004F9 16 PUSH ss +039 0004FA 8D46FE LEA ax, [bp-2] +040 0004FD 50 PUSH ax +041 0004FE 1E PUSH ds +042 0004FF B8C300 MOV ax, 0C3h +043 000502 50 PUSH ax +044 000503 9A07000102 CALL far ptr scanf +045 000508 83C408 ADD sp, 8 +046 00050B FF76FE PUSH word ptr [bp-2] +047 00050E 9A7C004C00 CALL far ptr proc_1 +048 000513 59 POP cx +049 000514 8BF8 MOV di, ax +050 000516 57 PUSH di +051 000517 FF76FE PUSH word ptr [bp-2] +052 00051A 1E PUSH ds +053 00051B B8C600 MOV ax, 0C6h +054 00051E 50 PUSH ax +055 00051F 9A0E004D01 CALL far ptr printf +056 000524 83C408 ADD sp, 8 +057 000527 46 INC si +058 JMP L1 ;Synthetic inst + + main ENDP + + proc_1 PROC FAR +000 00053C 55 PUSH bp +001 00053D 8BEC MOV bp, sp +002 00053F 56 PUSH si +003 000540 8B7606 MOV si, [bp+6] +004 000543 83FE02 CMP si, 2 +005 000546 7E1E JLE L3 +006 000548 8BC6 MOV ax, si +007 00054A 48 DEC ax +008 00054B 50 PUSH ax +009 00054C 0E PUSH cs +010 00054D E8ECFF CALL near ptr proc_1 +011 000550 59 POP cx +012 000551 50 PUSH ax +013 000552 8BC6 MOV ax, si +014 000554 05FEFF ADD ax, 0FFFEh +015 000557 50 PUSH ax +016 000558 0E PUSH cs +017 000559 E8E0FF CALL near ptr proc_1 +018 00055C 59 POP cx +019 00055D 8BD0 MOV dx, ax +020 00055F 58 POP ax +021 000560 03C2 ADD ax, dx +022 000562 EB07 JMP L4 + +023 00056B 5E L4: POP si +024 00056C 5D POP bp +025 00056D CB RETF + +026 000566 B80100 L3: MOV ax, 1 +027 000569 EB00 JMP L4 + + proc_1 ENDP + diff --git a/tests/prev_base/FIBOL.EXE.a2 b/tests/prev_base/FIBOL.EXE.a2 new file mode 100644 index 0000000..6c2a102 --- /dev/null +++ b/tests/prev_base/FIBOL.EXE.a2 @@ -0,0 +1,97 @@ + proc_1 PROC FAR +000 00053C 55 PUSH bp +001 00053D 8BEC MOV bp, sp +002 00053F 56 PUSH si +003 000540 8B7606 MOV si, [bp+6] +004 000543 83FE02 CMP si, 2 +005 000546 7E1E JLE L1 +006 000548 8BC6 MOV ax, si +007 00054A 48 DEC ax +008 00054B 50 PUSH ax +009 00054C 0E PUSH cs +010 00054D E8ECFF CALL near ptr proc_1 +011 000550 59 POP cx +012 000551 50 PUSH ax +013 000552 8BC6 MOV ax, si +014 000554 05FEFF ADD ax, 0FFFEh +015 000557 50 PUSH ax +016 000558 0E PUSH cs +017 000559 E8E0FF CALL near ptr proc_1 +018 00055C 59 POP cx +019 00055D 8BD0 MOV dx, ax +020 00055F 58 POP ax +021 000560 03C2 ADD ax, dx + +023 00056B 5E L2: POP si +024 00056C 5D POP bp +025 00056D CB RETF + +026 000566 B80100 L1: MOV ax, 1 +027 000569 EB00 JMP L2 + + proc_1 ENDP + + main PROC FAR +000 0004C2 55 PUSH bp +001 0004C3 8BEC MOV bp, sp +002 0004C5 83EC04 SUB sp, 4 +003 0004C8 56 PUSH si +004 0004C9 57 PUSH di +005 0004CA 1E PUSH ds +006 0004CB B89400 MOV ax, 94h +007 0004CE 50 PUSH ax +008 0004CF 9A0E004D01 CALL far ptr printf +009 0004D4 59 POP cx +010 0004D5 59 POP cx +011 0004D6 16 PUSH ss +012 0004D7 8D46FC LEA ax, [bp-4] +013 0004DA 50 PUSH ax +014 0004DB 1E PUSH ds +015 0004DC B8B100 MOV ax, 0B1h +016 0004DF 50 PUSH ax +017 0004E0 9A07000102 CALL far ptr scanf +018 0004E5 83C408 ADD sp, 8 +019 0004E8 BE0100 MOV si, 1 + +021 000528 3B76FC L3: CMP si, [bp-4] +022 00052B 7EC0 JLE L4 +023 00052D 33C0 XOR ax, ax +024 00052F 50 PUSH ax +025 000530 9A0A005A00 CALL far ptr exit +026 000535 59 POP cx +027 000536 5F POP di +028 000537 5E POP si +029 000538 8BE5 MOV sp, bp +030 00053A 5D POP bp +031 00053B CB RETF + +032 0004ED 1E L4: PUSH ds +033 0004EE B8B400 MOV ax, 0B4h +034 0004F1 50 PUSH ax +035 0004F2 9A0E004D01 CALL far ptr printf +036 0004F7 59 POP cx +037 0004F8 59 POP cx +038 0004F9 16 PUSH ss +039 0004FA 8D46FE LEA ax, [bp-2] +040 0004FD 50 PUSH ax +041 0004FE 1E PUSH ds +042 0004FF B8C300 MOV ax, 0C3h +043 000502 50 PUSH ax +044 000503 9A07000102 CALL far ptr scanf +045 000508 83C408 ADD sp, 8 +046 00050B FF76FE PUSH word ptr [bp-2] +047 00050E 9A7C004C00 CALL far ptr proc_1 +048 000513 59 POP cx +049 000514 8BF8 MOV di, ax +050 000516 57 PUSH di +051 000517 FF76FE PUSH word ptr [bp-2] +052 00051A 1E PUSH ds +053 00051B B8C600 MOV ax, 0C6h +054 00051E 50 PUSH ax +055 00051F 9A0E004D01 CALL far ptr printf +056 000524 83C408 ADD sp, 8 +057 000527 46 INC si +058 JMP L3 ;Synthetic inst + + main ENDP + diff --git a/tests/prev_base/FIBOL.b b/tests/prev_base/FIBOL.b new file mode 100644 index 0000000..dab19da --- /dev/null +++ b/tests/prev_base/FIBOL.b @@ -0,0 +1,51 @@ +/* + * Input file : ./tests/inputs/FIBOL.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; /* si */ +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. + * Contains instructions not normally used by compilers. + */ +{ +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, ); + printf ("fibonacci(%d) = %u\n", loc2, proc_1 (loc2)); + loc3 = (loc3 + 1); + } /* end of while */ + exit (0); +} + diff --git a/tests/prev_base/FIBOS.b b/tests/prev_base/FIBOS.b index 4a650fd..76365a1 100644 --- a/tests/prev_base/FIBOS.b +++ b/tests/prev_base/FIBOS.b @@ -14,7 +14,6 @@ int proc_1 (int arg0) { int loc1; /* si */ int loc2; /* ax */ - loc1 = arg0; if (loc1 > 2) { @@ -36,7 +35,6 @@ int loc1; int loc2; int loc3; int loc4; - printf ("Input number of iterations: "); scanf ("%d", &loc1); loc3 = 1; diff --git a/tests/prev_base/INTOPS.EXE.a1 b/tests/prev_base/INTOPS.EXE.a1 new file mode 100644 index 0000000..7c627a4 --- /dev/null +++ b/tests/prev_base/INTOPS.EXE.a1 @@ -0,0 +1,45 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC02 SUB sp, 2 +003 000300 56 PUSH si +004 000301 C746FEFF00 MOV word ptr [bp-2], 0FFh +005 000306 BE8F00 MOV si, 8Fh +006 000309 8B46FE MOV ax, [bp-2] +007 00030C 03C6 ADD ax, si +008 00030E 8BF0 MOV si, ax +009 000310 8B46FE MOV ax, [bp-2] +010 000313 2BC6 SUB ax, si +011 000315 8946FE MOV [bp-2], ax +012 000318 8B46FE MOV ax, [bp-2] +013 00031B F7E6 MUL si +014 00031D 8946FE MOV [bp-2], ax +015 000320 8BC6 MOV ax, si +016 000322 99 CWD +018 000323 F77EFE IDIV word ptr [bp-2] +020 000326 8BF0 MOV si, ax +021 000328 8BC6 MOV ax, si +022 00032A 99 CWD +024 00032B F77EFE IDIV word ptr [bp-2] +026 00032E 8BF2 MOV si, dx +027 000330 8B46FE MOV ax, [bp-2] +028 000333 B105 MOV cl, 5 +029 000335 D3E0 SHL ax, cl +030 000337 8946FE MOV [bp-2], ax +031 00033A 8BC6 MOV ax, si +032 00033C 8A4EFE MOV cl, [bp-2] +033 00033F D3F8 SAR ax, cl +034 000341 8BF0 MOV si, ax +035 000343 56 PUSH si +036 000344 FF76FE PUSH word ptr [bp-2] +037 000347 B89401 MOV ax, 194h +038 00034A 50 PUSH ax +039 00034B E8AC06 CALL near ptr printf +040 00034E 83C406 ADD sp, 6 +041 000351 5E POP si +042 000352 8BE5 MOV sp, bp +043 000354 5D POP bp +044 000355 C3 RET + + main ENDP + diff --git a/tests/prev_base/INTOPS.EXE.a2 b/tests/prev_base/INTOPS.EXE.a2 new file mode 100644 index 0000000..fe665de --- /dev/null +++ b/tests/prev_base/INTOPS.EXE.a2 @@ -0,0 +1,49 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC02 SUB sp, 2 +003 000300 56 PUSH si +004 000301 C746FEFF00 MOV word ptr [bp-2], 0FFh +005 000306 BE8F00 MOV si, 8Fh +006 000309 8B46FE MOV ax, [bp-2] +007 00030C 03C6 ADD ax, si +008 00030E 8BF0 MOV si, ax +009 000310 8B46FE MOV ax, [bp-2] +010 000313 2BC6 SUB ax, si +011 000315 8946FE MOV [bp-2], ax +012 000318 8B46FE MOV ax, [bp-2] +013 00031B F7E6 MUL si +014 00031D 8946FE MOV [bp-2], ax +015 000320 8BC6 MOV ax, si +016 000322 99 CWD +017 MOV tmp, dx:ax ;Synthetic inst +018 000323 F77EFE IDIV word ptr [bp-2] +019 MOD word ptr [bp-2] ;Synthetic inst +020 000326 8BF0 MOV si, ax +021 000328 8BC6 MOV ax, si +022 00032A 99 CWD +023 MOV tmp, dx:ax ;Synthetic inst +024 00032B F77EFE IDIV word ptr [bp-2] +025 MOD word ptr [bp-2] ;Synthetic inst +026 00032E 8BF2 MOV si, dx +027 000330 8B46FE MOV ax, [bp-2] +028 000333 B105 MOV cl, 5 +029 000335 D3E0 SHL ax, cl +030 000337 8946FE MOV [bp-2], ax +031 00033A 8BC6 MOV ax, si +032 00033C 8A4EFE MOV cl, [bp-2] +033 00033F D3F8 SAR ax, cl +034 000341 8BF0 MOV si, ax +035 000343 56 PUSH si +036 000344 FF76FE PUSH word ptr [bp-2] +037 000347 B89401 MOV ax, 194h +038 00034A 50 PUSH ax +039 00034B E8AC06 CALL near ptr printf +040 00034E 83C406 ADD sp, 6 +041 000351 5E POP si +042 000352 8BE5 MOV sp, bp +043 000354 5D POP bp +044 000355 C3 RET + + main ENDP + diff --git a/tests/prev_base/INTOPS.b b/tests/prev_base/INTOPS.b new file mode 100644 index 0000000..7968608 --- /dev/null +++ b/tests/prev_base/INTOPS.b @@ -0,0 +1,23 @@ +/* + * Input file : ./tests/inputs/INTOPS.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; + loc1 = 255; + loc2 = (loc1 + 143); + loc1 = (loc1 - loc2); + loc1 = (loc1 * loc2); + loc1 = (loc1 << 5); + printf ("a = %d, b = %d\n", loc1, (((loc2 / loc1) % loc1) >> loc1)); +} + diff --git a/tests/prev_base/LONGOPS.EXE.a1 b/tests/prev_base/LONGOPS.EXE.a1 new file mode 100644 index 0000000..7a06c82 --- /dev/null +++ b/tests/prev_base/LONGOPS.EXE.a1 @@ -0,0 +1,291 @@ + 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 + + LXMUL@ PROC FAR +000 0009C3 56 PUSH si +007 0009C6 85C0 TEST ax, ax +008 0009C8 7402 JE L1 +009 0009CA F7E3 MUL bx +013 0009CD 85C0 TEST ax, ax +014 0009CF 7404 JE L2 +015 0009D1 F7E6 MUL si +016 0009D3 03C8 ADD cx, ax +020 0009D6 F7E3 MUL bx +021 0009D8 03D1 ADD dx, cx +022 0009DA 5E POP si +023 0009DB CB RETF + + LXMUL@ ENDP + + LDIV@ PROC FAR +000 0011C6 33C9 XOR cx, cx +001 0011C8 EB0D JMP L3 + +002 0011D7 55 L3: 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 L4 +013 0011EE 0BD2 OR dx, dx +014 0011F0 7469 JE L5 +015 0011F2 0BDB OR bx, bx +016 0011F4 7465 JE L5 + +017 0011F6 F7C70100 L4: TEST di, 1 +018 0011FA 751C JNE L6 +019 0011FC 0BD2 OR dx, dx +020 0011FE 790A JNS L7 +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 L7: OR cx, cx +026 00120C 790A JNS L6 +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 L6: 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 L8: 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 L9 +042 00122E 7704 JA L10 +043 001230 3BF3 CMP si, bx +044 001232 7205 JB L9 + +045 001234 2BF3 L10: SUB si, bx +046 001236 1BFD SBB di, bp +047 001238 40 INC ax + +048 001239 E2E7 L9: LOOP L8 +049 00123B 5B POP bx +050 00123C F7C30200 TEST bx, 2 +051 001240 7406 JE L11 +052 001242 8BC6 MOV ax, si +053 001244 8BD7 MOV dx, di +054 001246 D1EB SHR bx, 1 + +055 001248 F7C30400 L11: TEST bx, 4 +056 00124C 7407 JE L12 +057 00124E F7DA NEG dx +058 001250 F7D8 NEG ax +059 001252 83DA00 SBB dx, 0 + +060 001255 5F L12: POP di +061 001256 5E POP si +062 001257 5D POP bp +063 001258 CA0800 RETF 8 +065 00125B F7F3 DIV bx +067 00125D F7C70200 TEST di, 2 +068 001261 7402 JE L13 +069 001263 8BC2 MOV ax, dx + +070 001265 33D2 L13: XOR dx, dx +071 001267 EBEC JMP L12 + + LDIV@ ENDP + + LMOD@ PROC FAR +000 0011CF B90200 MOV cx, 2 +001 0011D2 EB03 JMP L14 + +002 0011D7 55 L14: 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 L15 +013 0011EE 0BD2 OR dx, dx +014 0011F0 7469 JE L16 +015 0011F2 0BDB OR bx, bx +016 0011F4 7465 JE L16 + +017 0011F6 F7C70100 L15: TEST di, 1 +018 0011FA 751C JNE L17 +019 0011FC 0BD2 OR dx, dx +020 0011FE 790A JNS L18 +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 L18: OR cx, cx +026 00120C 790A JNS L17 +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 L17: 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 L19: 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 L20 +042 00122E 7704 JA L21 +043 001230 3BF3 CMP si, bx +044 001232 7205 JB L20 + +045 001234 2BF3 L21: SUB si, bx +046 001236 1BFD SBB di, bp +047 001238 40 INC ax + +048 001239 E2E7 L20: LOOP L19 +049 00123B 5B POP bx +050 00123C F7C30200 TEST bx, 2 +051 001240 7406 JE L22 +052 001242 8BC6 MOV ax, si +053 001244 8BD7 MOV dx, di +054 001246 D1EB SHR bx, 1 + +055 001248 F7C30400 L22: TEST bx, 4 +056 00124C 7407 JE L23 +057 00124E F7DA NEG dx +058 001250 F7D8 NEG ax +059 001252 83DA00 SBB dx, 0 + +060 001255 5F L23: POP di +061 001256 5E POP si +062 001257 5D POP bp +063 001258 CA0800 RETF 8 +065 00125B F7F3 DIV bx +067 00125D F7C70200 TEST di, 2 +068 001261 7402 JE L24 +069 001263 8BC2 MOV ax, dx + +070 001265 33D2 L24: XOR dx, dx +071 001267 EBEC JMP L23 + + LMOD@ ENDP + + LXLSH@ PROC FAR +000 001287 80F910 CMP cl, 10h +001 00128A 7310 JAE L25 +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 L25: 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 + + LXRSH@ PROC FAR +000 001269 80F910 CMP cl, 10h +001 00126C 7310 JAE L26 +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 L26: 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 + diff --git a/tests/prev_base/LONGOPS.EXE.a2 b/tests/prev_base/LONGOPS.EXE.a2 new file mode 100644 index 0000000..d3b18a2 --- /dev/null +++ b/tests/prev_base/LONGOPS.EXE.a2 @@ -0,0 +1,307 @@ + 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 + diff --git a/tests/prev_base/LONGOPS.b b/tests/prev_base/LONGOPS.b new file mode 100644 index 0000000..d7cf9ea --- /dev/null +++ b/tests/prev_base/LONGOPS.b @@ -0,0 +1,294 @@ +/* + * Input file : ./tests/inputs/LONGOPS.EXE + * File type : EXE + */ + +#include "dcc.h" + + +long LXMUL@ (long arg0, long arg1) +/* Uses register arguments: + * arg0 = dx:ax. + * arg1 = cx:bx. + * Runtime support routine of the compiler. + */ +{ +int loc1; +int loc2; /* tmp */ + loc2 = LO(arg0); + LO(arg0) = loc1; + loc1 = loc2; + loc2 = LO(arg0); + LO(arg0) = HI(arg0); + + if ((LO(arg0) & LO(arg0)) != 0) { + } + loc2 = LO(arg0); + LO(arg0) = HI(arg1); + HI(arg1) = loc2; + + if ((LO(arg0) & LO(arg0)) != 0) { + LO(arg0) = (LO(arg0) * loc1); + HI(arg1) = (HI(arg1) + LO(arg0)); + } + loc2 = LO(arg0); + arg0 = (loc1 * LO(arg1)); + HI(arg0) = (HI(arg0) + HI(arg1)); + return (arg0); +} + + +long LDIV@ (long arg0, int arg3) +/* Takes 8 bytes of parameters. + * Runtime support routine of the compiler. + * High-level language prologue code. + * Untranslatable routine. Assembler provided. + * Return value in registers dx:ax. + * Pascal calling convention. + */ +{ + XOR cx, 0 + 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 +} + + +long LMOD@ (long arg0, int arg3) +/* Takes 8 bytes of parameters. + * Runtime support routine of the compiler. + * High-level language prologue code. + * 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 +} + + +long LXLSH@ (long arg0, char arg1) +/* Uses register arguments: + * arg0 = dx:ax. + * arg1 = cl. + * Runtime support routine of the compiler. + */ +{ +int loc1; /* bx */ + + if (arg1 < 16) { + loc1 = LO(arg0); + LO(arg0) = (LO(arg0) << arg1); + HI(arg0) = (HI(arg0) << arg1); + HI(arg0) = (HI(arg0) | (loc1 >> (!arg1 + 16))); + return (arg0); + } + else { + HI(arg0) = LO(arg0); + LO(arg0) = 0; + HI(arg0) = (HI(arg0) << (arg1 - 16)); + return (arg0); + } +} + + +long LXRSH@ (long arg0, char arg1) +/* Uses register arguments: + * arg0 = dx:ax. + * arg1 = cl. + * Runtime support routine of the compiler. + */ +{ +int loc1; /* bx */ + + if (arg1 < 16) { + loc1 = HI(arg0); + LO(arg0) = (LO(arg0) >> arg1); + HI(arg0) = (HI(arg0) >> arg1); + LO(arg0) = (LO(arg0) | (loc1 << (!arg1 + 16))); + return (arg0); + } + else { + arg0 = HI(arg0); + LO(arg0) = (LO(arg0) >> (arg1 - 16)); + return (arg0); + } +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +long loc1; +long loc2; + loc2 = 255; + loc1 = 143; + loc1 = (loc2 + loc1); + loc2 = (loc2 - loc1); + loc2 = LXMUL@ (loc2, loc1); + loc1 = LDIV@ (loc1, loc2); + loc1 = LMOD@ (loc1, loc2); + loc2 = LXLSH@ (loc2, 5); + loc1 = LXRSH@ (loc1, loc1); + printf ("a = %ld, b = %ld\n", loc2, loc1); +} + diff --git a/tests/prev_base/MATRIXMU.EXE.a1 b/tests/prev_base/MATRIXMU.EXE.a1 new file mode 100644 index 0000000..a9288e8 --- /dev/null +++ b/tests/prev_base/MATRIXMU.EXE.a1 @@ -0,0 +1,98 @@ + main PROC NEAR +000 000383 55 PUSH bp +001 000384 8BEC MOV bp, sp +002 000386 83EC78 SUB sp, 78h +003 000389 8D46D8 LEA ax, [bp-28h] +004 00038C 50 PUSH ax +005 00038D 8D46B0 LEA ax, [bp-50h] +006 000390 50 PUSH ax +007 000391 8D4688 LEA ax, [bp-78h] +008 000394 50 PUSH ax +009 000395 E862FF CALL near ptr proc_1 +010 000398 83C406 ADD sp, 6 +011 00039B 8BE5 MOV sp, bp +012 00039D 5D POP bp +013 00039E C3 RET + + main ENDP + + proc_1 PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC02 SUB sp, 2 +003 000300 56 PUSH si +004 000301 57 PUSH di +005 000302 33F6 XOR si, si +006 000304 EB72 JMP L1 + +007 000378 83FE05 L1: CMP si, 5 +008 00037B 7C89 JL L2 +009 00037D 5F POP di +010 00037E 5E POP si +011 00037F 8BE5 MOV sp, bp +012 000381 5D POP bp +013 000382 C3 RET + +014 000306 33FF L2: XOR di, di +015 000308 EB68 JMP L3 + +016 000372 83FF04 L3: CMP di, 4 +017 000375 7C93 JL L4 +018 000377 46 INC si +019 JMP L1 ;Synthetic inst + +020 00030A C746FE0000 L4: MOV word ptr [bp-2], 0 +021 00030F EB5A JMP L5 + +022 00036B 837EFE04 L5: CMP word ptr [bp-2], 4 +023 00036F 7CA0 JL L6 +024 000371 47 INC di +025 JMP L3 ;Synthetic inst + +026 000311 8BDE L6: MOV bx, si +027 000313 D1E3 SHL bx, 1 +028 000315 D1E3 SHL bx, 1 +029 000317 D1E3 SHL bx, 1 +030 000319 035E04 ADD bx, [bp+4] +031 00031C 8B46FE MOV ax, [bp-2] +032 00031F D1E0 SHL ax, 1 +033 000321 03D8 ADD bx, ax +034 000323 8B07 MOV ax, [bx] +035 000325 50 PUSH ax +036 000326 8B46FE MOV ax, [bp-2] +037 000329 BA0A00 MOV dx, 0Ah +038 00032C F7E2 MUL dx +039 00032E 8BD8 MOV bx, ax +040 000330 035E06 ADD bx, [bp+6] +041 000333 8BC7 MOV ax, di +042 000335 D1E0 SHL ax, 1 +043 000337 03D8 ADD bx, ax +044 000339 58 POP ax +045 00033A F727 MUL word ptr [bx] +046 00033C 50 PUSH ax +047 00033D 8BC6 MOV ax, si +048 00033F BA0A00 MOV dx, 0Ah +049 000342 F7E2 MUL dx +050 000344 8BD8 MOV bx, ax +051 000346 035E08 ADD bx, [bp+8] +052 000349 8BC7 MOV ax, di +053 00034B D1E0 SHL ax, 1 +054 00034D 03D8 ADD bx, ax +055 00034F 58 POP ax +056 000350 0307 ADD ax, [bx] +057 000352 50 PUSH ax +058 000353 8BC6 MOV ax, si +059 000355 BA0A00 MOV dx, 0Ah +060 000358 F7E2 MUL dx +061 00035A 8BD8 MOV bx, ax +062 00035C 035E08 ADD bx, [bp+8] +063 00035F 8BC7 MOV ax, di +064 000361 D1E0 SHL ax, 1 +065 000363 03D8 ADD bx, ax +066 000365 58 POP ax +067 000366 8907 MOV [bx], ax +068 000368 FF46FE INC word ptr [bp-2] +069 JMP L5 ;Synthetic inst + + proc_1 ENDP + diff --git a/tests/prev_base/MATRIXMU.EXE.a2 b/tests/prev_base/MATRIXMU.EXE.a2 new file mode 100644 index 0000000..2737d64 --- /dev/null +++ b/tests/prev_base/MATRIXMU.EXE.a2 @@ -0,0 +1,95 @@ + proc_1 PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC02 SUB sp, 2 +003 000300 56 PUSH si +004 000301 57 PUSH di +005 000302 33F6 XOR si, si + +007 000378 83FE05 L1: CMP si, 5 +008 00037B 7C89 JL L2 +009 00037D 5F POP di +010 00037E 5E POP si +011 00037F 8BE5 MOV sp, bp +012 000381 5D POP bp +013 000382 C3 RET + +014 000306 33FF L2: XOR di, di + +016 000372 83FF04 L3: CMP di, 4 +017 000375 7C93 JL L4 +018 000377 46 INC si +019 JMP L1 ;Synthetic inst + +020 00030A C746FE0000 L4: MOV word ptr [bp-2], 0 + +022 00036B 837EFE04 L5: CMP word ptr [bp-2], 4 +023 00036F 7CA0 JL L6 +024 000371 47 INC di +025 JMP L3 ;Synthetic inst + +026 000311 8BDE L6: MOV bx, si +027 000313 D1E3 SHL bx, 1 +028 000315 D1E3 SHL bx, 1 +029 000317 D1E3 SHL bx, 1 +030 000319 035E04 ADD bx, [bp+4] +031 00031C 8B46FE MOV ax, [bp-2] +032 00031F D1E0 SHL ax, 1 +033 000321 03D8 ADD bx, ax +034 000323 8B07 MOV ax, [bx] +035 000325 50 PUSH ax +036 000326 8B46FE MOV ax, [bp-2] +037 000329 BA0A00 MOV dx, 0Ah +038 00032C F7E2 MUL dx +039 00032E 8BD8 MOV bx, ax +040 000330 035E06 ADD bx, [bp+6] +041 000333 8BC7 MOV ax, di +042 000335 D1E0 SHL ax, 1 +043 000337 03D8 ADD bx, ax +044 000339 58 POP ax +045 00033A F727 MUL word ptr [bx] +046 00033C 50 PUSH ax +047 00033D 8BC6 MOV ax, si +048 00033F BA0A00 MOV dx, 0Ah +049 000342 F7E2 MUL dx +050 000344 8BD8 MOV bx, ax +051 000346 035E08 ADD bx, [bp+8] +052 000349 8BC7 MOV ax, di +053 00034B D1E0 SHL ax, 1 +054 00034D 03D8 ADD bx, ax +055 00034F 58 POP ax +056 000350 0307 ADD ax, [bx] +057 000352 50 PUSH ax +058 000353 8BC6 MOV ax, si +059 000355 BA0A00 MOV dx, 0Ah +060 000358 F7E2 MUL dx +061 00035A 8BD8 MOV bx, ax +062 00035C 035E08 ADD bx, [bp+8] +063 00035F 8BC7 MOV ax, di +064 000361 D1E0 SHL ax, 1 +065 000363 03D8 ADD bx, ax +066 000365 58 POP ax +067 000366 8907 MOV [bx], ax +068 000368 FF46FE INC word ptr [bp-2] +069 JMP L5 ;Synthetic inst + + proc_1 ENDP + + main PROC NEAR +000 000383 55 PUSH bp +001 000384 8BEC MOV bp, sp +002 000386 83EC78 SUB sp, 78h +003 000389 8D46D8 LEA ax, [bp-28h] +004 00038C 50 PUSH ax +005 00038D 8D46B0 LEA ax, [bp-50h] +006 000390 50 PUSH ax +007 000391 8D4688 LEA ax, [bp-78h] +008 000394 50 PUSH ax +009 000395 E862FF CALL near ptr proc_1 +010 000398 83C406 ADD sp, 6 +011 00039B 8BE5 MOV sp, bp +012 00039D 5D POP bp +013 00039E C3 RET + + main ENDP + diff --git a/tests/prev_base/MATRIXMU.b b/tests/prev_base/MATRIXMU.b new file mode 100644 index 0000000..f645886 --- /dev/null +++ b/tests/prev_base/MATRIXMU.b @@ -0,0 +1,47 @@ +/* + * Input file : ./tests/inputs/MATRIXMU.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void proc_1 (int arg0, int arg1, int arg2) +/* Takes 6 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; +int loc2; +int loc3; + loc2 = 0; + + while ((loc2 < 5)) { + loc3 = 0; + + while ((loc3 < 4)) { + loc1 = 0; + + while ((loc1 < 4)) { + *((((loc2 * 10) + arg2) + (loc3 << 1))) = ((*(((((loc2 << 3) << 1) + arg0) + (loc1 << 1))) * *((((loc1 * 10) + arg1) + (loc3 << 1)))) + *((((loc2 * 10) + arg2) + (loc3 << 1)))); + loc1 = (loc1 + 1); + } /* end of while */ + loc3 = (loc3 + 1); + } /* end of while */ + loc2 = (loc2 + 1); + } /* end of while */ +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; +int loc3; + proc_1 (&loc3, &loc2, &loc1); +} + diff --git a/tests/prev_base/MAX.EXE.a1 b/tests/prev_base/MAX.EXE.a1 new file mode 100644 index 0000000..a5e6230 --- /dev/null +++ b/tests/prev_base/MAX.EXE.a1 @@ -0,0 +1,54 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC04 SUB sp, 4 +003 000300 B89401 MOV ax, 194h +004 000303 50 PUSH ax +005 000304 E8D10B CALL near ptr printf +006 000307 59 POP cx +007 000308 8D46FE LEA ax, [bp-2] +008 00030B 50 PUSH ax +009 00030C 8D46FC LEA ax, [bp-4] +010 00030F 50 PUSH ax +011 000310 B8A601 MOV ax, 1A6h +012 000313 50 PUSH ax +013 000314 E84A14 CALL near ptr scanf +014 000317 83C406 ADD sp, 6 +015 00031A 8B46FC MOV ax, [bp-4] +016 00031D 3B46FE CMP ax, [bp-2] +017 000320 7415 JE L1 +018 000322 FF76FE PUSH word ptr [bp-2] +019 000325 FF76FC PUSH word ptr [bp-4] +020 000328 E81000 CALL near ptr proc_1 +021 00032B 59 POP cx +022 00032C 59 POP cx +023 00032D 50 PUSH ax +024 00032E B8AC01 MOV ax, 1ACh +025 000331 50 PUSH ax +026 000332 E8A30B CALL near ptr printf +027 000335 59 POP cx +028 000336 59 POP cx + +029 000337 8BE5 L1: MOV sp, bp +030 000339 5D POP bp +031 00033A C3 RET + + main ENDP + + proc_1 PROC NEAR +000 00033B 55 PUSH bp +001 00033C 8BEC MOV bp, sp +002 00033E 8B4604 MOV ax, [bp+4] +003 000341 3B4606 CMP ax, [bp+6] +004 000344 7E05 JLE L2 +005 000346 8B4604 MOV ax, [bp+4] +006 000349 EB05 JMP L3 + +007 000350 5D L3: POP bp +008 000351 C3 RET + +009 00034B 8B4606 L2: MOV ax, [bp+6] +010 00034E EB00 JMP L3 + + proc_1 ENDP + diff --git a/tests/prev_base/MAX.EXE.a2 b/tests/prev_base/MAX.EXE.a2 new file mode 100644 index 0000000..6059710 --- /dev/null +++ b/tests/prev_base/MAX.EXE.a2 @@ -0,0 +1,53 @@ + proc_1 PROC NEAR +000 00033B 55 PUSH bp +001 00033C 8BEC MOV bp, sp +002 00033E 8B4604 MOV ax, [bp+4] +003 000341 3B4606 CMP ax, [bp+6] +004 000344 7E05 JLE L1 +005 000346 8B4604 MOV ax, [bp+4] + +007 000350 5D L2: POP bp +008 000351 C3 RET + +009 00034B 8B4606 L1: MOV ax, [bp+6] +010 00034E 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 B89401 MOV ax, 194h +004 000303 50 PUSH ax +005 000304 E8D10B CALL near ptr printf +006 000307 59 POP cx +007 000308 8D46FE LEA ax, [bp-2] +008 00030B 50 PUSH ax +009 00030C 8D46FC LEA ax, [bp-4] +010 00030F 50 PUSH ax +011 000310 B8A601 MOV ax, 1A6h +012 000313 50 PUSH ax +013 000314 E84A14 CALL near ptr scanf +014 000317 83C406 ADD sp, 6 +015 00031A 8B46FC MOV ax, [bp-4] +016 00031D 3B46FE CMP ax, [bp-2] +017 000320 7415 JE L3 +018 000322 FF76FE PUSH word ptr [bp-2] +019 000325 FF76FC PUSH word ptr [bp-4] +020 000328 E81000 CALL near ptr proc_1 +021 00032B 59 POP cx +022 00032C 59 POP cx +023 00032D 50 PUSH ax +024 00032E B8AC01 MOV ax, 1ACh +025 000331 50 PUSH ax +026 000332 E8A30B CALL near ptr printf +027 000335 59 POP cx +028 000336 59 POP cx + +029 000337 8BE5 L3: MOV sp, bp +030 000339 5D POP bp +031 00033A C3 RET + + main ENDP + diff --git a/tests/prev_base/MAX.b b/tests/prev_base/MAX.b new file mode 100644 index 0000000..16d7edb --- /dev/null +++ b/tests/prev_base/MAX.b @@ -0,0 +1,41 @@ +/* + * Input file : ./tests/inputs/MAX.EXE + * File type : EXE + */ + +#include "dcc.h" + + +int proc_1 (int arg0, int arg1) +/* Takes 4 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; /* ax */ + + if (arg0 > arg1) { + loc1 = arg0; + } + else { + loc1 = arg1; + } + return (loc1); +} + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; + printf ("Enter 2 numbers: "); + scanf ("%d %d", &loc2, &loc1); + + if (loc2 != loc1) { + printf ("Maximum: %d\n", proc_1 (loc2, loc1)); + } +} + diff --git a/tests/prev_base/MIN.b b/tests/prev_base/MIN.b index e5a1f30..2d82e45 100644 --- a/tests/prev_base/MIN.b +++ b/tests/prev_base/MIN.b @@ -14,7 +14,6 @@ void start () int loc1; int loc2; /* ax */ int loc3; /* bx */ - loc1 = 0; loc2 = loc1; diff --git a/tests/prev_base/STRLEN.EXE.a1 b/tests/prev_base/STRLEN.EXE.a1 new file mode 100644 index 0000000..386c745 --- /dev/null +++ b/tests/prev_base/STRLEN.EXE.a1 @@ -0,0 +1,34 @@ + main PROC NEAR +000 0002FA 56 PUSH si +001 0002FB BE9401 MOV si, 194h +002 0002FE 56 PUSH si +003 0002FF E80300 CALL near ptr proc_1 +004 000302 59 POP cx +005 000303 5E POP si +006 000304 C3 RET + + main ENDP + + proc_1 PROC NEAR +000 000305 55 PUSH bp +001 000306 8BEC MOV bp, sp +002 000308 56 PUSH si +003 000309 33F6 XOR si, si +004 00030B EB01 JMP L1 + +005 00030E 8B5E04 L1: MOV bx, [bp+4] +006 000311 FF4604 INC word ptr [bp+4] +007 000314 803F00 CMP byte ptr [bx], 0 +008 000317 75F4 JNE L2 +009 000319 8BC6 MOV ax, si +010 00031B EB00 JMP L3 + +011 00031D 5E L3: POP si +012 00031E 5D POP bp +013 00031F C3 RET + +014 00030D 46 L2: INC si +015 JMP L1 ;Synthetic inst + + proc_1 ENDP + diff --git a/tests/prev_base/STRLEN.EXE.a2 b/tests/prev_base/STRLEN.EXE.a2 new file mode 100644 index 0000000..f1ba604 --- /dev/null +++ b/tests/prev_base/STRLEN.EXE.a2 @@ -0,0 +1,31 @@ + proc_1 PROC NEAR +000 000305 55 PUSH bp +001 000306 8BEC MOV bp, sp +002 000308 56 PUSH si +003 000309 33F6 XOR si, si + +005 00030E 8B5E04 L1: MOV bx, [bp+4] +006 000311 FF4604 INC word ptr [bp+4] +007 000314 803F00 CMP byte ptr [bx], 0 +008 000317 75F4 JNE L2 +009 000319 8BC6 MOV ax, si +011 00031D 5E POP si +012 00031E 5D POP bp +013 00031F C3 RET + +014 00030D 46 L2: INC si +015 JMP L1 ;Synthetic inst + + proc_1 ENDP + + main PROC NEAR +000 0002FA 56 PUSH si +001 0002FB BE9401 MOV si, 194h +002 0002FE 56 PUSH si +003 0002FF E80300 CALL near ptr proc_1 +004 000302 59 POP cx +005 000303 5E POP si +006 000304 C3 RET + + main ENDP + diff --git a/tests/prev_base/STRLEN.b b/tests/prev_base/STRLEN.b new file mode 100644 index 0000000..6253f1e --- /dev/null +++ b/tests/prev_base/STRLEN.b @@ -0,0 +1,34 @@ +/* + * Input file : ./tests/inputs/STRLEN.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void proc_1 (int arg0) +/* Takes 2 bytes of parameters. + * High-level language prologue code. + * C calling convention. + */ +{ +int loc1; /* si */ + loc1 = 0; + arg0 = (arg0 + 1); + + while ((*arg0 != 0)) { + loc1 = (loc1 + 1); + arg0 = (arg0 + 1); + } /* end of while */ +} + + +void main () +/* Takes no parameters. + */ +{ +int loc1; + loc1 = 404; + proc_1 (loc1); +} + diff --git a/tests/prev_base/TESTLONG.EXE.a1 b/tests/prev_base/TESTLONG.EXE.a1 new file mode 100644 index 0000000..8eb4a90 --- /dev/null +++ b/tests/prev_base/TESTLONG.EXE.a1 @@ -0,0 +1,40 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC08 SUB sp, 8 +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 E84A14 CALL near ptr scanf +008 00030B 59 POP cx +009 00030C 59 POP cx +010 00030D 8D46F8 LEA ax, [bp-8] +011 000310 50 PUSH ax +012 000311 B89701 MOV ax, 197h +013 000314 50 PUSH ax +014 000315 E83D14 CALL near ptr scanf +015 000318 59 POP cx +016 000319 59 POP cx +017 00031A 8D46FC LEA ax, [bp-4] +018 00031D 50 PUSH ax +019 00031E 8D46F8 LEA ax, [bp-8] +020 000321 50 PUSH ax +021 000322 B89A01 MOV ax, 19Ah +022 000325 50 PUSH ax +023 000326 E82C14 CALL near ptr scanf +024 000329 83C406 ADD sp, 6 +025 00032C FF76FE PUSH word ptr [bp-2] +026 00032F FF76FC PUSH word ptr [bp-4] +027 000332 FF76FA PUSH word ptr [bp-6] +028 000335 FF76F8 PUSH word ptr [bp-8] +029 000338 B8A001 MOV ax, 1A0h +030 00033B 50 PUSH ax +031 00033C E88D0B CALL near ptr printf +032 00033F 83C40A ADD sp, 0Ah +033 000342 8BE5 MOV sp, bp +034 000344 5D POP bp +035 000345 C3 RET + + main ENDP + diff --git a/tests/prev_base/TESTLONG.EXE.a2 b/tests/prev_base/TESTLONG.EXE.a2 new file mode 100644 index 0000000..8eb4a90 --- /dev/null +++ b/tests/prev_base/TESTLONG.EXE.a2 @@ -0,0 +1,40 @@ + main PROC NEAR +000 0002FA 55 PUSH bp +001 0002FB 8BEC MOV bp, sp +002 0002FD 83EC08 SUB sp, 8 +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 E84A14 CALL near ptr scanf +008 00030B 59 POP cx +009 00030C 59 POP cx +010 00030D 8D46F8 LEA ax, [bp-8] +011 000310 50 PUSH ax +012 000311 B89701 MOV ax, 197h +013 000314 50 PUSH ax +014 000315 E83D14 CALL near ptr scanf +015 000318 59 POP cx +016 000319 59 POP cx +017 00031A 8D46FC LEA ax, [bp-4] +018 00031D 50 PUSH ax +019 00031E 8D46F8 LEA ax, [bp-8] +020 000321 50 PUSH ax +021 000322 B89A01 MOV ax, 19Ah +022 000325 50 PUSH ax +023 000326 E82C14 CALL near ptr scanf +024 000329 83C406 ADD sp, 6 +025 00032C FF76FE PUSH word ptr [bp-2] +026 00032F FF76FC PUSH word ptr [bp-4] +027 000332 FF76FA PUSH word ptr [bp-6] +028 000335 FF76F8 PUSH word ptr [bp-8] +029 000338 B8A001 MOV ax, 1A0h +030 00033B 50 PUSH ax +031 00033C E88D0B CALL near ptr printf +032 00033F 83C40A ADD sp, 0Ah +033 000342 8BE5 MOV sp, bp +034 000344 5D POP bp +035 000345 C3 RET + + main ENDP + diff --git a/tests/prev_base/TESTLONG.b b/tests/prev_base/TESTLONG.b new file mode 100644 index 0000000..efc7dcb --- /dev/null +++ b/tests/prev_base/TESTLONG.b @@ -0,0 +1,23 @@ +/* + * Input file : ./tests/inputs/TESTLONG.EXE + * File type : EXE + */ + +#include "dcc.h" + + +void main () +/* Takes no parameters. + * High-level language prologue code. + */ +{ +int loc1; +int loc2; +int loc3; +int loc4; + scanf ("%d", &loc1); + scanf ("%d", &loc2); + scanf ("%d %d", &loc2, &loc1); + printf ("%ld %ld", loc2, loc4, loc1, loc3); +} +