[工学]32位汇编语言07.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]32位汇编语言07

32位汇编语言程序设计 第7章 与Visual C++的混合编程 第7章 与Visual C++的混合编程 7.1 嵌入汇编 7.2 模块连接 7.3 调用高级语言函数 7.4 使用Visual C++开发环境 第7章 与Visual C++的混合编程 掌握嵌入汇编和模块连接进行混合编程方法,理解堆栈帧的作用 熟悉汇编语言调用高级语言函数和开发调试过程 混合编程 软件开发通常采用高级语言,以提高开发效率 某些部分利用汇编语言,以提高程序的运行效率 汇编语言的优点:开发的程序占用存储空间小、运行速度快等 汇编语言的缺点:与机器密切相关、移植性差,编程烦琐、对汇编语言程序员要求较高 混合编程:汇编语言与高级语言、或高级语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程 汇编语言与C和C++语言的混合编程 嵌入汇编 模块连接 7.1 嵌入汇编 嵌入汇编 =内嵌汇编=内联汇编=行内(in-line)汇编 直接在C和C++语言的源程序中插入汇编语言指令 使用“_ _asm”关键字指示嵌入汇编 //_ _asm程序段 _ _asm { mov eax,01h //支持汇编语言的注释格式 mov dx,0xD007 ;0xD007=0D007H out dx,eax ;OUT是输出指令 } 1.嵌入汇编语句中使用汇编语言的注意事项 1)Visual C++ 6.0支持通用整数和浮点指令集,以及MMX指令集的嵌入汇编 2)嵌入汇编可以使用MASM的表达式和的注释风格 3)嵌入汇编可以使用C++的数据类型和数据对象,但不可以使用MASM的绝大多数伪指令和宏汇编方法 4)在用嵌入汇编书写的函数中,不必保存EAX、EBX、ECX、EDX、ESI和EDI寄存器;但必须保存函数中使用的其他寄存器(如DS、SS、ESP、EBP和整数标志寄存器) 嵌入汇编引用段时应该通过寄存器而不是通过段名;段超越时,必须清晰地用段寄存器说明 2.嵌入汇编语句中使用C++语言的注意事项 1)嵌入汇编可使用C++的下列元素:符号、常量、宏和预处理指令、注释、类型名及结构、联合的成员 2)嵌入汇编可使用汇编语言或C++格式表示整数常量 3)嵌入汇编不能使用C++的专用操作符,对两种语言都有的操作符在汇编语句中作为汇编语言操作符 4)嵌入汇编可以引用包含该_ _asm作用范围内的任何符号 5)利用C、C++的宏可以将汇编语言代码插入源程序中 6)嵌入汇编中的标号和C++的标号相似(作用范围为定义它的函数中有效),汇编转移指令和C++的goto语句都可以跳转到_ _asm块内或块外的标号 〔例7-1〕嵌入汇编计算数组平均值函数-1 #include iostream.h #define COUNT 10 long mean(long d[], long num); int main() { long array[COUNT] = {675, 354, -34, 198, 267, 0, 9, 2371, -67, 4257}; coutThe mean is \tmean(array,COUNT)endl; return 0; } 〔例7-1〕嵌入汇编计算数组平均值函数-2 long mean(long d[], long num) { long temp; //定义局部变量,用于返回值 _ _asm { //嵌入式汇编代码部分 mov ebx,d ;EBX=数组地址 mov ecx,num ;ECX=数据个数 …… mean1: add eax,[ebx+edx*4] ;求和 …… jb mean1 ;循环 …… mov temp,eax } return(temp); } 7.2 模块连接 各种语言的程序分别编写 利用各自的开发环境编译形成OBJ模块文件 将它们连接在一起,生成可执行文件 模块连接与嵌入汇编的比较 Visual C++直接支持嵌入汇编方式,比模块连接方式更简单方便 嵌入汇编的主要缺点是缺乏可移植性 模块连接方式可以比较方便地为不同处理器平台提供不同的外部目标代码模块 7.2.1 约定规则 1. 采用一致的调用规范 Visual C++的_cdecl调用规范 对应MASM的C语言类型 Visual C++的_stdcall调用规范 对应MASM的STDCALL语言类型 2. 声明共用函数和变量 C++语言程序采用extern “C”{ } MASM利用EXTERN 3. 正确传递入口参数和返回参数 数据类型一致 汇编语言可以使用扩展过程定义PROC伪指令 Visual C++函数从EAX寄存器返回值 〔例7-2〕模块连接计算数组平均值函数-1 #include iostream

文档评论(0)

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

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

1亿VIP精品文档

相关文档