新闻中心

EEPW首页>嵌入式系统>设计应用> Visual C++中调用汇编语言的研究与实现

Visual C++中调用汇编语言的研究与实现

作者: 时间:2011-08-18 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/150333.htm

  (3) 声明公用函数名和变量名

  对C++和使用的公用函数和变量应该进行声明,并且标识符应该一致,C++语言对标识符区分字母的大小写,而汇编不区分大小写。在C++语言程序中,采用extern “C”{ }对所的函数和变量给予说明。说明形式如下:

  对函数的说明:extern “C” { 返回值类型协议 函数名称(参数类型表);}

  对变量的说明:extern “C” { 变量类型 变量名;}

程序中供外部使用的标识符应该标识PUBLIC属性,使用外部标识符应该用extern说明。

  2.3 模块混合编程的步骤

  采用模块调用方式进行混合编程一般执行的步骤如下:(1)建立C++源程序(.cpp);(2)建立源程序,并把汇编语言汇编成.obj文件;(3)建立工程文件.prj,将C++源程序和.obj文件放入该工程项目;(4)对工程文件进行编译、连接,生成可执行文件.exe。

  在与C++混合编程的汇编语言过程中,编程环境是32位的,应该注意与16位MS-DOS环境的区别,在这种环境下的寄存器是32位的,因此汇编语言过程存取堆栈应该使用32位寄存器EBP进行相对寻址,而不是采用BP。汇编语言简化段定义的格式应该采用flat模式,并且汇编时采用选项/coff,ML命令的选项/coff使得产生的.obj文件采用32位的格式。

3 在Visual C++中调用汇编语言的第三种方法

  通常以上两种方法就能够C++与汇编语言混合编程,但是在一些特殊的情况下,用这两种方法却不能满足功能的需要,我们提出了一种新的方法二者的混合编程:通过数组借助指针实现二者的混合编程。下面结合我们开发的课题DD数控系统逻辑控制系统软件开发,来进行具体说明。

  该课题在Visual C++ 6.0的环境下进行开发的,上层采用C++语言,最底层采用了汇编语言,在C++语言中要调用汇编语言的编译的结果,并进行回填,如果用通用的混合编程方法无法实现二者的调用,因为底层汇编语言是把所有的逻辑运算功能指令汇编在一起,而在C++语言中根据需要在需要的地方调用汇编语言中的某一功能模块,因此对汇编语言编译后的.OBJ文件无法进行控制。具体实现方法如下:

  (1)把包括所有的逻辑指令的汇编语句编成一个汇编模块程序,在汇编编译器(如masm 6.x)中将汇编程序编译成.OBJ文件。

  (2)将汇编生成的机代码放在一个数组中,

  例如定义一个数组变量unsigned char OBJMOD[1241]。

  (3)定义多个指针类型变量指向OBJMOD数组元素的地址,该地址对应每个汇编功能模块的首地址,如定义一个指针变量unsigned char *LIBC21=OBJMOD[869]。

  (4)通过函数COPILE(*pModal)模块,例如编译汇编LIBC21功能模块时,通过调用COPILE(LIBC21) 函数,把汇编编译生成的机代码分别传递到工作区域WKAREA中,通过WKAREA[POSIRR]=BUFRIS[PTRIS]来实现二次填充,把汇编机代码中改写的内容改写成需要的地址或值,最后通过调用一系列函数,把结果保存到文件中。

  本课题采用这种方法实现了C++和汇编语言的混合编程,从而实现C++语言与汇编语言的无缝结合。

4 结束语

  Visual C++和汇编语言混合编程可以实现优势互补,尤其用在高级语言开发底层软件方面,例如用Visual C++6.0环境开发数控软件PLC的控制功能,这种优势更为明显,具有很好的实际应用价值。

c++相关文章:c++教程



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭