如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第十四章模块化程序设计与混合编程技术1.教学目的:掌握汇编语言多模块程序设计和汇编语言与高级语言之间混合编程的基本概念、技术和方法。2.教学要求:①理解多模块程序设计的基本概念②掌握汇编语言程序的多模块连接③了解多模块之间段的连接与模块间的交叉访问④理解汇编语言与高级程序的连接的原理。⑤掌握汇编语言与C语言的接口的实现方法⑥掌握汇编语言与Pascal语言的接口的实现方法3.教学重点:①汇编语言与C语言的接口的实现②汇编语言与Pascal语言的接口的实现4.掌握难点:①连接的原理5.教学进程安排:P247~2856.教学方法:课堂讲授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实现升序排序