第十四章 模块化程序设计与混合编程技术.doc_第1页
第十四章 模块化程序设计与混合编程技术.doc_第2页
第十四章 模块化程序设计与混合编程技术.doc_第3页
第十四章 模块化程序设计与混合编程技术.doc_第4页
第十四章 模块化程序设计与混合编程技术.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十四章 模块化程序设计与混合编程技术1教学目的:掌握汇编语言多模块程序设计和汇编语言与高级语言之间混合编程的基本概念、技术和方法。2教学要求:理解多模块程序设计的基本概念掌握汇编语言程序的多模块连接了解多模块之间段的连接与模块间的交叉访问理解汇编语言与高级程序的连接的原理。掌握汇编语言与C语言的接口的实现方法掌握汇编语言与Pascal语言的接口的实现方法3教学重点:汇编语言与C语言的接口的实现汇编语言与Pascal语言的接口的实现4掌握难点:连接的原理5教学进程安排:P2472856教学方法:课堂讲授7教学内容摘要:14.1 多模块程序设计的基本概念1一个复杂程序可以分成若干个模块,可由不同人员分头完成;2每个模块的任务明确,便于理解;3单个模块易于编写和调试;4便于程序的维护和修改;5可以直接利用已有的模块。14.2 汇编语言程序的多模块连接14.2.1 多模块之间段的连接 SEGMENT语句提供的连接信息段名SEGMENT 定位类型 组合类型 类别段名ENDS(1)组合类型(2)类别2. GROUP伪指令段组名GROUP段名,段名,(1)段组名(2)段名14.2.2 模块间的交叉访问1. 伪指令PUBLIC和EXTRN(1)伪指令PUBLICPUBLIC标识符,标识符,(2)伪指令EXTRNEXTRN标识符:类型,标识符:类型,2模块间交叉访问时的编程考虑3建立完整的可执行文件(1)将各源程序模块分别汇编,并建立各自的目标模块(即建立各自的*.OBJ文件)。(2)用连接程序LINK将这些目标模块连接成一个可执行文件。(3)多个模块连接成一个可执行文件后,该文件只有一个启动地址,所以,连接成一个完整程序的各个源模块中只能有一个源模块中的结束伪指令END可以带表达式,以指出整个程序的启动地址。【例14-5】多模块程序设计,利用多模块实现两个32位数的相乘。14.3 汇编语言与高级语言程序的连接 汇编语言和高级语言混合编程,需要解决两个主要的技术问题:1是不同语言程序模块之间的连接,2是调用过程中参数的传递方法。14.3.1 调用协议1. 入口参数传递规则(1)C语言调用协议(2)Pascal语言调用协议2. 返回值传递规则(1)如果返回值为单字节数则放入AL;(2)如果返回值为单字则放入AX;(3)如果返回值为双字则放入DX:AX,其中DX中存放高字,AX中存放低字;(4)如果返回值大小超过双字则存放在系统静态变量存储区中,指向这个静态变量存储区的指针值在AX(近指针)或者DX:AX(远指针)内。(5)在子程序完成预先定义的功能返回主程序时, C语言调用协议是由主程序来完成参数出栈,而Pascal语言调用协议却是由子程序来完成参数出栈工作的。3. 寄存器保护规则寄存器保护规则把CPU内部寄存器分为如下4类:(1)CS,IP,SS,SP,FLAGS:(2)DS,ES,FS,GS:(3)BP,SI,DI:(4)AX,BX,CX,DX:14.3.2 汇编语言与C语言的接口1. 模块连接法所谓模块连接法是指分别编译/汇编C语言源程序和汇编语言源程序,然后再将目标文件进行连接,最终形成可执行文件的混合编程方法。在TC中调用汇编子程序和变量要使汇编语言模块和TC模块正确地连接到一起,必须处理好两点:汇编模块必须采用和TC模块一致的存储模式;汇编模块还必须遵守与TC兼容的命名约定,命名约定包括段组命名约定和函数/变量命名约定。TC调用汇编语言子程序的主要步骤。a. 在汇编语言编程方面使用和C相同的存储模式定义各个段空间,没有用到的段可以不定义。在汇编语言源程序中用PUBLIC伪指令声明C需要引用的子函数和变量。按照C语言调用协议从堆栈中取得入口参数。对参数进行处理,实现相应的功能。将返回值送入AX或者DX:AX中返回。使用汇编程序MASM汇编源程序形成目标文件。b. 在TC编程方面在C语言源程序中用extern语句声明汇编语言子函数和变量。在程序中像引用本地函数和变量一样,引用这些汇编语言子函数和变量。编译源程序形成目标文件。使用TLINK连接C语言和汇编语言的目标文件,形成可执行文件。执行程序进行验证和调试。【例14-6】设TC源程序在小模式下编译连接,试编写一个供TC调用的汇编语言子函数max。【例14-7】对例14-6中的C语言源程序callmax改用大模式编译连接,试编写汇编语言源程序实现max函数。【例14-9】试用汇编语言编写供TC调用的子函数sort实现升序排序功能,要求sort函数实现综合考虑各种存储模式。sort函数在TC源程序中声明如下:汇编语言引用TC函数和变量EXTRN函数名:函数类型EXTRN变量名:变量类型汇编语言调用TC子程序的主要步骤。a.在TC编程方面定义供汇编语言程序引用的全局变量。声明和实现供汇编语言程序引用的子函数。编译生成目标文件。b.在汇编语言编程方面用EXTRN伪指令声明TC子函数和变量。按照C语言调用协议将调用参数压入堆栈。使用CALL指令调用TC的子函数。从AX或者DX:AX中取得返回值。修改SP寄存器的值,将调用参数清除出栈。使用汇编程序MASM汇编源程序形成目标文件。使用连接程序LINK连接汇编语言和C语言的目标文件形成可执行文件。执行程序进行验证和调试。【例14-10】汇编语言程序调用TC子程序。汇编语言程序调用TC子程序时要注意如下4点。入口参数应该按照C语言调用协议的规定自右向左地压入堆栈。TC编译程序在函数和变量名前自动加下划线“_”,所以在调用时应使用“CALL_max”指令而不是“CALL max”指令。TC子函数在返主时不会从堆栈中弹出入口参数,所以在调用结束取得返回值后,由汇编语言主程序完成入口参数的出栈。汇编语言主程序和TC子程序应采用一致的存储模式,注意调用时参数入栈和出栈的变化。2. 伪变量法3. 行内汇编法asm操作码操作数;或者换行符【例14-12】在行内汇编语句中引用构造型变量。14.3.3 汇编语言与Pascal语言的接口Pascal语言和汇编语言混合编程的步骤如下。a.在汇编语言编程方面在汇编语言源程序中,用PUBLIC伪指令声明TP需要引用的子程序。按照Pascal语言调用协议从堆栈中取得各类入口参数。对参数进行处理,实现相应的功能。将返回值送入AX或者DX:AX中。使用带立即数的RET n指令返回,其中n的值为子程序入口参数的总字节数。使用汇编程序MASM汇编源程序形成目标文件。b.在TP编程方面在TP源程序中用external语句声明汇编语言子程序。用$L语句声明外部子程序所在的目标文件。像引用标准子程序一样在程序中引用汇编语言于程序。编译源程序形成目标文件。连接Pascal语言和汇编语言的目标文件,形成可执行文件。执行程序,进行验证和调试。其中步骤、可以在TP的集成开发环境(IDE)中通过菜单命令Run一次完成,不需要在DOS提示符下以命令行方式进行。【例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论