首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-03-16 
用tc3.0和masm6混合编程,入口点函数怎么定义?源代码:kernel.asm.386.modelsmall,c.codePUBLICAPUBLICBBPRO

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

热点排行