- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- [工学]2009形状记忆合金.ppt
- [工学]2010机械设计总复习.ppt
- [工学]2010数模培训.ppt
- [工学]2011《油藏工程》课件.pdf
- [工学]2009并行计算与多核程序设计01-02多核技术导论.ppt
- [工学]2010第3章高分子的溶液性质jsp.ppt
- [工学]2012年安全生产许可证申报材料 完整版.doc
- [工学]2012年电子技术实验指导书.pdf
- [工学]2012机器学习欧洲暑期学校课件-8共9个.pdf
- [工学]2012第四章 港口水域及防波堤布置.ppt
- Haier海尔413升风冷变频多门冰箱 BCD-413WGHFD1BSJU1(白)说明书用户手册.pdf
- Siemens西门子工业抽屉式断路器主回路后垂直连接 抽屉式断路器主回路后垂直连接使用手册.pdf
- Samsung三星智能佩戴设备 Galaxy Fit3安全手册.pdf
- Samsung三星滚筒洗衣机 AI神 黑钻热泵洗烘旗舰 WD18DB8995BZSC使用手册.pdf
- Sakura樱花消毒柜 保洁柜消毒柜 SCQ-130D6用户手册说明书.pdf
- Hifiman头领科技ARYA UNVEILED说明书用户手册.pdf
- Siemens西门子工业抽屉式主回路连接前置端子 支撑件 抽屉式主回路连接前置端子 支撑件使用手册.pdf
- Siemens西门子工业中性线的外部电流传感器 中性线的外部电流传感器使用手册.pdf
- Siemens西门子工业电子脱扣单元 电子脱扣单元使用手册.pdf
- Razer雷蛇Playstation 专用雷蛇战锤狂鲨极速版 RZ12-038203 用户指南 (简体中文)说明书用户手册.pdf
文档评论(0)