c如何连接汇编的obj文件?
// CASM.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
extern int product(int x,int y);
int main(int argc, char* argv[])
{
printf("%d",product(25,3));
return 0;
}
product的汇编文件
public _product
_text segment byte public 'CODE'
assume cs:_text
_product proc near
push bp
mov bp,sp
mov ax,[bp+4]
mov cx,[bp+6]
sar ax,cl
pop bp
_product endp
_text ends
end
生成了product.obj
用vc编译上面那个cpp时找不到product
问题点数:20、回复次数:7Top
1 楼bluecrest(高歌)回复于 2004-08-01 19:22:20 得分 0
我的意思是混合编程,不是内嵌。Top
2 楼ldarmy(你的武器已破碎)回复于 2004-08-01 20:32:12 得分 10
在分别生成obj后,再连接,可以用汇编的link main.obj+product.obj
也可以用c的,同样是在连接项里设置Top
3 楼wuanswer(hello)回复于 2004-08-01 20:48:56 得分 0
我也不会哦.
帮你upTop
4 楼mydo(侯佩|hopy|ks)回复于 2004-08-02 13:22:15 得分 5
一旦你的C源文件里包括了这些好东西,则必须用TCC.EXE的COMMAND-LINE来编译,具体的命令参数TCC.EXE已经提供,这里不复阐述了.最简单的是:TCC C源文件名(使用这个方法,TCC会自动调用TASM.EXE和TLINK.EXE,并且能够使TLINK.EXE正确的找到需要的.obj和.lib文件,如果你单步编译的话,可能会碰到很多的问题,主要是TLINK.EXE它自己并不会去找.obj和.lib文件,你自己可以建一个.bat文件,如果要指定.lib文件的目录的话可以用/L参数,在文章的后面有一个例子).但大家要注意了,看一下你的TC目录下面到底是否有TASM.EXE文件,并在TURBOC.CFG(这个文件包括TCC.EXE运行期参数,这里面所有参数在运很期都将被自动TCC.EXE使用,例如:-IH:\TC\INCLUDE-LH:\TC\LIB\)文件中设置好一些参数,并确认TASM.EXE的版本号要2.0以上,以及是否能够向下兼容.但是在大多数的情况下TC的目录是没有TASM.EXE的,或是版本不正常.
如果你有TASM.EXE文件并且TURBOC.CFG文件也已经写好了,但是还要注意一个
问题:运行TCC.EXE时要在独立的DOS SHELL下面(不要害怕,这不是一个新东西,我的意思
是,不在诸如TC下的DOS SHELL下面运行,我曾经败在这个问题下,当我发现时直想揍电脑
一顿,还好没有,不然就没有这篇文件了.)
还有一句重要的话:TC2.0支持大部分8086指令(当然用法有一些约定,不过现在我并不打算
进行详细说明,因为那是一件很繁杂的事,以后有时间或许会写出来----如果大家需要的话).
如果说上面我所说的那些约定很繁杂的话,那么下面的方法该是多么简单啊!
让我们使用Borland为TC2.0内建的变量来进行伪汇编.
或许你还不知道在TC2.0中还有一些内建的pseudo寄存器(可以看作是register 型的变量,但是它们比register型的变量好用的多)
_AX,_AH,_AL,
_BX,_BH,_BL,
_CX,_CH,_CL,
_DX,_DH,_DL,
_DI,_SI,_SP,
_CS,_DS,_ES,_SS
注意这些寄存器的size,_AX,_BX,_CX,_DX,_CS,_DS,_ES,_SS,_SI,_DI,_SP等都是16位的寄存器相当于C语言的unsigned int类型,其余的都是8位的寄存器(相当于unsigned char)(TC怎么可能支持32位的寄存呢,所以EAX等是不能用的,FS,GS和IP寄存器都是无效的),还有就是在传递参数的时候千万不要忘记使用强制类型转换.
Top
5 楼ldarmy(你的武器已破碎)回复于 2004-08-02 14:22:22 得分 0
晕~~Top
6 楼xghost(菜鸟)回复于 2004-08-03 01:16:56 得分 0
upTop
7 楼elyta(流连忘返)回复于 2004-08-10 15:49:06 得分 5
不嫌麻烦的话,除了ldarmy(你的武器已破碎)说的方法以外,还可以用makefile的嘛。Top




