第8章+汇编语言和C的混合编程.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(8)嵌入汇编不仅可以编写C∕C++函数,还可以调用C函数(包括C库函数)和非重载的全局C++函数,也可以调用任何用extern C说明的函数,但不能调用C++的成员函数。因为所有的标准头文件都采用extern C说明库函数,所以C++程序中的嵌入式汇编可以调用C库函数。 (9)汇编语句通过参数名就可以引用参数,采用return语句返回出口参数。返回值的约定是:对于小于等于32位的数据扩展为32位,存放在EAX寄存器中返回;4~8字节的返回值存放在EDX.EAX寄存器对中返回;更大字节数据则将它们的地址指针存放在EAX中返回。 8.3.2 调用汇编语言模块 1)采用一致的调用协议 Visual C++语言具有3种调用协议(calling convention):_cdecl、_stdcall和_fastcall。 Visual C++默认的是_cdecl方式,按从右至左的顺序压参数入栈,由调用者把参数弹出栈,而传送参数的内存栈是由调用者来维护的,返回值在EAX中。 Windows API则采用_stdcall方式,按从右至左的顺序压参数入栈,由被调用者把参数弹出栈,而传送参数的内存栈是由被调用者来维护的,返回值在EAX中。_stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数 _fastcall调用的主要特点是速度快,因为它是通过寄存器来传送参数的。实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈,而传送参数的内存栈是由被调用者来维护的。_fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数 2)声明公用函数名和变量名 对Visual C++和汇编语言使用的公用函数和变量应该进行声明,并且标识符应该一致,C++语言对标识符区分字母的大小写,而汇编不区分大小写。 在Visual C++语言程序中,采用extern C{ }对所调用的函数和变量给予说明。说明形式如下: 对函数的说明:extern C{ 返回值类型 调用协议函数名称(参数类型表);} 对变量的说明:extern C{ 变量类型 变量名;} 汇编语言程序中供外部使用的标识符应该标识PUBLIC属性,使用外部标识符应该用extern说明。 3)入口参数和返回参数的约定 C/C++语言中不论采用何种调用规范,传送的参数形式都是“传值”(by value),但除了数组(因为数组名表示的是第一个元素的地址)。参数“传址”(by reference)应利用指针数据类型。 不论何种整数类型进行参数传递时都扩展成32位,Visual C++中没有远、近调用之分,所有调用都是32位的偏移地址,所有的地址参数也都是32位偏移地址,在堆栈中占4字节。 参数返回时,对于小于等于32位的数据扩展为32位,存放在EAX寄存器中返回;4~8字节的返回值存放在EDX.EAX寄存器中返回;更大字节数据则将它们的地址指针存放在EAX中返回。 采用模块调用方式进行混合编程一般执行的步骤如下: (1)建立C++源程序(扩展名为.cpp)。 (2)建立汇编语言源程序,并把汇编语言汇编成.obj文件。 (3)建立工程文件.prj,将C++源程序和.obj文件放入该工程项目。 (4)对工程文件进行编译、连接,生成可执行文件.exe。 本章要点 混合编程是指使用两种或两种以上的程序设计语言,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程。采用高级语言与汇编语言混合编程,从而充分利用各种程序设计语言各自的优势,即程序的大部分采用高级语言编写,以提高程序的开发效率;在某些部分利用汇编语言编写,以提高程序的运行效率。  Turbo C嵌入汇编方式  Turbo C模块连接方式  汇编语言在Visual C++中的应用 8.1 Turbo C嵌入汇编方式 C语言与汇编语言的混合编程的第一种方法是在C语言中嵌入汇编语言,又称嵌入式编程。其优点是内嵌的汇编代码显得更加简洁直观,程序员不用考虑外部链接、命名以及参数传递协议等问题,主要缺点是代码缺乏可移植性,功能较弱。此种方法一般只用于需要插入汇编语句较少的情况。 8.1.1 嵌入汇编语句格式 在Turbo C中,C程序中嵌入汇编语言语句必须以关键字ASM开头,其格式如下: ASM 操作码 操作数 ;或回车换行/*注释*/ 在使用此种格式时,应注意以下几点: (1)ASM作为关键字不能省略,带有ASM标识的汇编语言代码可以看成是C语言的部分程序代码

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档