writeProcComments is now member of Function, at it has an ostream based overload, also added gmock framework to dependencies

This commit is contained in:
Artur K 2012-03-13 00:16:09 +01:00
parent bc395da6ab
commit d39449124a
40 changed files with 3660 additions and 72 deletions

View File

@ -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()

View File

@ -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}
)

View File

@ -2,6 +2,7 @@
#include "ast.h"
#include "types.h"
#include "machine_x86.h"
struct IDENTTYPE
{
condId idType;

View File

@ -11,6 +11,13 @@
struct CALL_GRAPH;
struct COND_EXPR;
struct Disassembler;
struct Function;
struct CALL_GRAPH;
typedef llvm::iplist<Function> 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);

View File

@ -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})
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)

View File

@ -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);
}

View File

@ -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 "<<this->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 << " * "<<psym->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";
}

14
src/tests/comwrite.cpp Normal file
View File

@ -0,0 +1,14 @@
#include "dcc.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
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();
}

View File

@ -74,7 +74,6 @@ void main ()
{
long loc1;
long loc2;
printf ("enter number of iterations ");
scanf ("%ld", &loc0);
printf ("executing %ld iterations\n", loc2);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -13,7 +13,6 @@ void main ()
{
int loc1;
int loc2;
loc1 = 255;
loc2 = 143;
loc2 = (loc1 + loc2);

View File

@ -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

View File

@ -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

396
tests/prev_base/DHAMP.b Normal file
View File

@ -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);
}

View File

@ -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

View File

@ -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

51
tests/prev_base/FIBOL.b Normal file
View File

@ -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);
}

View File

@ -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;

View File

@ -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

View File

@ -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

23
tests/prev_base/INTOPS.b Normal file
View File

@ -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));
}

View File

@ -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

View File

@ -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

294
tests/prev_base/LONGOPS.b Normal file
View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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

41
tests/prev_base/MAX.b Normal file
View File

@ -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));
}
}

View File

@ -14,7 +14,6 @@ void start ()
int loc1;
int loc2; /* ax */
int loc3; /* bx */
loc1 = 0;
loc2 = loc1;

View File

@ -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

View File

@ -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

34
tests/prev_base/STRLEN.b Normal file
View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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);
}