有关模块程序设计中的编译的问题

qepe 2003-01-17 11:16:21
谁能告诉我用TC与ASM混和编程中,TC为主程序,ASM为分程序,代码完成后怎样编译和连接?用TC和MASM5.0。
...全文
45 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
clumsy 2003-01-18
  • 打赏
  • 举报
回复
从使用方便的角度来看, 我建议的方法是:
1. masm bb.asm;
2. tcc aa.c bb.obj

如果自己调用link创建exe的话, 必须将所有使用到的.obj和.lib包括进去才行:
link c0?.obj+aa.obj+bb.obj+c?.lib
如果用到了数学函数, 还要加入math?.lib ...
其中c0?.obj是tc的初始化模块, c?.lib是常用函数库
上面的?是你的程序使用的内存模式: t=tiny s=small c=compact...
而如果采用tcc aa.c bb.obj的方法的话, tcc会自动去将所需要的模块或库文件加进去, 省了好多事.
作为知识的积累, 了解link的具体的用法也有好处.
qepe 2003-01-18
  • 打赏
  • 举报
回复
好了,谢谢 clumsy(希望, 你可还在?) 兄
又学了一招,谢谢,
结贴
clumsy 2003-01-18
  • 打赏
  • 举报
回复
你的tlink.exe不和tcc.exe在一起吗? 或者不是在path设定的路径下吗?
qepe 2003-01-18
  • 打赏
  • 举报
回复
重新设置好后
执行 tcc aa.c bb.obj
还是提示错:
aa.c:
Error 11: Unable to execute command 'tlink.exe'
clumsy 2003-01-18
  • 打赏
  • 举报
回复
那是你的tc的配置, lib(编译时还要include)的路径没有指定或指定的不对:
1. tcc可以用命令行中指定 -Le:\tc\lib e:\tc\lib为lib的目录 (临时性)
2. 在tc目录下有个turboc.cfg文件, 可以在其中指定: (一直可用)
type turboc.cfg
-Le:\tc\lib
-Ie:\tc\include 这是include的目录
在tc的集成开发环境中, 是在 "Options" 下拉菜单的 "Directories" 中指定.
qepe 2003-01-18
  • 打赏
  • 举报
回复
clumsy(希望, 你可还在?)兄:

谢谢指教,不过用你的方法还是有问题:
masm bb.asm 完了后,tcc aa.c bb.obj 提示:
c0s.obj : unable to open file
Available memory 440206
今天有事耽误了一天,刚回来,所以才看到你的回复,
望能帮解决,先谢了
qepe 2003-01-17
  • 打赏
  • 举报
回复
我的主程序是aa.c,被调用函数是bb.asm,
tcc -ms -c aa.c
masm bb.asm
然后是用MASM的LINK
link aa.obj+bb.obj


LINK: warning L2029:Unresolved externals:

_printf in file(s):
AA.OBJ(aa.c)


我的aa.c中有printf函数,麻烦clumsy(希望, 你可还在?) 帮看一下,谢谢!
clumsy 2003-01-17
  • 打赏
  • 举报
回复
我的建议还是用masm生成.obj后, 被tc直接使用(加到你的tc的工程里, 或者tcc cfile.c asmobj.obj). 用tasm和tlink的话, 命令行比较复杂, 容易出错.
不知你LINK时出的错误的信息是什么?
qepe 2003-01-17
  • 打赏
  • 举报
回复
谢谢,我是看杨季文的那本书上的,讲得也比较详细,我也能看懂,但他那里边用TCC编译*.C,用TASM、TLINK汇编和连接,而我用的是MASM,不太一样,结果LINK 时老是出错
clumsy 2003-01-17
  • 打赏
  • 举报
回复
asm先用masm编译为.obj, 将这个.obj加到你的tc的工程中去, 就可以在tc的IDE里写c了, 而且可以进行各种手段的调试, 当然是不能对asm模块内的进行的.
tc和asm混编, 首先要确定正确的内存模式, 这关系到调用是的堆栈操作的正确性. 在tiny或small下, asm里段的定义方式为:
代码段:
_TEXT segment byte public 'CODE'
数据段:
_DATA segment word public 'DATA'
要清楚这些怎么定义, 就要清楚tc在不同内存模式下段名的定义规则. 你还是找本tc的书看比较具体.
另外缺省的设定下, 所有被tc中引用的asm中的标号, 要加前导下划线:
如在tc里为extern int asmfun(void);
则在汇编里的定义:
public _asmfun
_asmfun proc
...
qepe 2003-01-17
  • 打赏
  • 举报
回复
asmgirl:
按你的方法试了,不行呀,
Unable to execute command 'tmasm.exe'
sunwhite 2003-01-17
  • 打赏
  • 举报
回复
可以把汇编程序嵌入式到C程序中一同编译
asmgirl 2003-01-17
  • 打赏
  • 举报
回复
/* testc.c and testa.asm */
tcc -ms testc testa.asm
qepe 2003-01-17
  • 打赏
  • 举报
回复
怎样编译?能详细说说吗?拜托了,谢谢!
极速小王子 2003-01-17
  • 打赏
  • 举报
回复
可以在TC中编译 asm

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧