CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

c如何连接汇编的obj文件?

楼主bluecrest(高歌)2004-08-01 18:29:45 在 其他开发语言 / 汇编语言 提问

//   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

相关问题

  • 如果在C++源文件中加入汇编代码?
  • C++builder编译时如何输出汇编文件?
  • c与汇编
  • c++变汇编?
  • 怎么样在borland c里面使得汇编文件和c文件一起编译??
  • 如何在vc6.0中把一个C++文件编译成汇编代码!(在线)
  • arm-elf-gcc无法编译含有嵌入式汇编的C源文件
  • 如何设置vc,使vc能加入/链接汇编产生的obj文件?
  • 如何设置vc,使vc能加入/链接汇编产生的obj文件?
  • 怎样了解汇编代码是如何转成obj文件的?

关键词

  • 汇编
  • 文件
  • 连接
  • tcc
  • tlink
  • 参数
  • bp
  • obj
  • product
  • exe

得分解答快速导航

  • 帖主:bluecrest
  • ldarmy
  • mydo
  • elyta

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo