读书人

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

发布时间: 2012-03-16 16:34:56 作者: rapoo

用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函数就是由该代码启动的

读书人网 >汇编语言

热点推荐