- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 混合编程
第九章 汇编语言与高级语言的混合编程 本章重点:重点讲述C语言与汇编语言进行混合编程时的接口方法,包括入口参数和出口参数的传递规则。 什么时候选择混合编程? 如运行时间占90%而代码只占10%的关键部分,运行次数很多的重复部分,对运行速度要求很高的部分,要求直接访问硬件的部分,以及高级语言不支持的其它功能,则使用汇编语言来编写相应的程序,而其它用高级语言。这就是汇编语言与高级语言的混合编程。 汇编语言和高级语言混合编程,需要解决两个主要问题: 一是不同语言程序模块的连接。 二是调用过程中参数的传递。 * * 第九章 汇编语言与高级语言的混合编程 9.1调用协议 9.1.1入口参数传递规则 9.1.2返回值传递规则 9.1.3寄存器保护规则 9.2与C语言的接口 9.2.1模块连接法 9.2.2伪变量法 9.2.3行内汇编法 9.1调用协议 本节重点:掌握入口参数和出口参数的传递规则。 调用协议:是指在进行子程序调用时,主程序向子程序传递参数以及从子程序获得返回值的方式。 9.1.1入口参数传递规则 C语言调用协议 采用C语言调用协议调用一个子程序时,是按照调用参数表自右向左的顺序将子程序入口参数压入堆栈的。例如在C语言源程序中有子程序调用语句“callsub(a,b,c);”,则是参数c先入栈,然后是参数b入栈,最后是参数a入栈。 存储器 IP(返回地址) CS(返回地址) 参数1 参数2 。。。 参数n SP 堆 栈 生 长 方 向 堆 栈 生 长 方 向 存储器 IP(返回地址) 参数1 参数2 。。。 参数n SP (a)近调用 (b)远调用 图 9.1 C语言调用协议通过堆栈传递入口参数 图9.1说明了C语言调用协议下近调用和远调用是如何通过堆栈传递入口参数的 。 C语言调用协议允许使用可变个数的参数,这时第一个压入堆栈的通常是用来说明后继参数个数的。 9.1.2返回值传递规则 汇编语言子程序均按照如下原则保存子程序返回值:如果返回值为单字节则放入AL;如果返回值为单字则放入AX;如果返回值为双字则放入DX:AX,其中DX中存放高字,AX中存放低字;如果返回值大小超过双字则存放在系统静态变量存储区中,指向这个静态变量存储区的指针值在AX(近指针)或者DX:AX(远指针)内。 C语言调用协议是由主程序来完成参数出栈。 9.1.3寄存器保护规则 调用协议的寄存器保护规则是用来说明当从主程序进入子程序,或者从子程序返回主程序时CPU内部寄存器所发生的变化,以及这些变化对程序正常运行的影响,还规定了哪些寄存器可以任意使用,哪些寄存器应该先予以保留再使用等问题的规则。 寄存器保护规则把CPU内部寄存器分为四类: 1.CS,IP,SS,SP,FLAGS:一般来说,这四个寄存器不需要在程序中进行改动。FLAGS寄存器反映程序的当前状态,一般也不需要修改,除非需要使用某个标志位在主程序和子程序间传递信息 2.DS,ES,FS,GS:如果互相连接的高级语言模块和汇编语言模块的数据不在同一个数据段中,则在汇编语言子程序中要先保存DS,对于ES、FS、GS,可以随意使用。 3.BP,SI,DI:通常在汇编语言子程序中使用BP寄存器访问系统堆栈以获得入口参数,所以使用前要保存,返主前要恢复。如果高级语言中没有定义和使用寄存器变量,则SI、DI可以任意使用 。 4.AX,BX,CX,DX:BX和CX可以任意使用,如果子程序没有返回值,则AX和DX也可以随意使用。 本节小结:通过学习本节内容,应该掌握C语言和汇编语言混合编程时应注意的参数传递规则和寄存器保护规则。 9.2与C语言的接口 本节重点:着重讲述C语言和汇编语言的三种接口方法。 C语言和汇编语言的接口方法主要有:模块连接法、伪变量法和行内汇编法。 本节以Turbo C 2.0(简称TC)与汇编语言的混合编程为例来介绍其编程接口。 9.2.1模块连接法 所谓模块连接法是指分别编译汇编语言源程序和高级语言源程序,再将目标文件进行连接形成可执行文件的混合编程方法。 1.TC引用汇编子程序和变量 要想使汇编语言模块和TC模块正确地连接到一起,必须做到两点:首先是汇编模块必须采用和TC模块一致的存储模式;其次汇编模块还必须遵守和TC兼容的命名约定,命名约定包括段组命名约定和函数/变量命名约定。 TC调用汇编程序: 为了在C程序中引用汇编语言模块的子程序和变量,在C程序中应使用extern语句声明,同时在汇编语言程序中应该以PUBLIC伪指令声明相应的子程序和变量。PUBLIC伪指令格式如下: PUBLIC 函数名 PUBLIC 变量名 在PUBLIC声明中没有规定函数和变量的类型,其类型取决于在汇编语言程序中的
您可能关注的文档
最近下载
- 招标代理机构入围 投标方案(技术方案).docx
- GB 50017-2003 钢结构设计规范.docx VIP
- 2025年湖南劳动人事职业学院单招语文考试模拟试题及答案解析.pdf VIP
- 高中物理游标卡尺、千分尺、螺旋测微器读数习题.docx VIP
- 湖南劳动人事职业学院单招测试题(附解析)英语.pdf VIP
- 重磅——2017年全国卷文言文挖空训练学生版及教师版.pdf VIP
- 大班《闽南红砖古厝》.pptx VIP
- 2024贵州黔南州面向优秀村(社区)干部专项招聘乡镇(街道)事业单位工作人员35笔试备考题库及答案解析.docx VIP
- 2025共青团入团考试题库及完整答案.pdf
- 3 雪地里的小画家 课件(共21张PPT).pptx VIP
原创力文档


文档评论(0)