当前位置: 代码迷 >> 汇编语言 >> 用tc3.0和masm6混合编程,入口点函数如何定义
  详细解决方案

用tc3.0和masm6混合编程,入口点函数如何定义

热度:5378   发布时间:2013-02-26 00:00:00.0
用tc3.0和masm6混合编程,入口点函数怎么定义?
源代码:
kernel.asm
.386
.model   small,   c
                  .code
PUBLIC A
PUBLIC B

B PROC
xor   ecx,   ecx
xor   edx,   edx
B ENDP

A PROC
xor   eax,   eax
xor   ebx,   ebx
ret
A ENDP

END

start.c
extern   void   A();
extern   void   B();

int   main()
{
A();
return   0;
}

编译连接的命令行:
TCC.EXE   -c   /ms   start.c
ML.EXE   kernel.asm
TLINK.EXE   /3   start.obj   kernel.obj  

生成的exe文件反汇编发现是这样的:

xor   ecx,   ecx
xor   edx,   edx
xor   eax,   eax
xor   ebx,   ebx
                  ret
也就是说程序根本没有把main当成入口点,而是把程序的入口点设在kernel.asm的开头,要怎么样定义才能使程序的入口点在main那里?
谢谢!

------解决方案--------------------------------------------------------
ML.EXE /c kernel.asm
TCC.EXE /ms start.c kernel.obj

------解决方案--------------------------------------------------------
单独使用编译链接命令,我不知道你的连接器是什么,可以使用参数 entry 试一试,如
link start.obj kenel.obj /entry:_main
------解决方案--------------------------------------------------------
用TCC编译,TLINK连接时,后面必须包含C启动代码文件,好像是C0M.obj(小模式),C0L.obj(大模式)等,那才是程序真正的入口代码,main函数就是由该代码启动的