用tc3.0和masm6混合编程,入口点函数怎么定义?
源代码:
kernel.asm
.386
.model small, c
.code
PUBLICA
PUBLICB
BPROC
xor ecx, ecx
xor edx, edx
BENDP
APROC
xor eax, eax
xor ebx, ebx
ret
AENDP
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函数就是由该代码启动的