第11章模块化程序设计

上传人:xins****2008 文档编号:232327605 上传时间:2023-09-17 格式:PPT 页数:38 大小:387.50KB
收藏 版权申诉 举报 下载
第11章模块化程序设计_第1页
第1页 / 共38页
第11章模块化程序设计_第2页
第2页 / 共38页
第11章模块化程序设计_第3页
第3页 / 共38页
资源描述:

《第11章模块化程序设计》由会员分享,可在线阅读,更多相关《第11章模块化程序设计(38页珍藏版)》请在装配图网上搜索。

1、教学重点第第11章章介介绍绍实实际际应应用用当当中中,常常见见的的混混合合编编程程问问题题,重重点点是参数传递方法是参数传递方法混合编程的两种方式混合编程的两种方式模块连接的约定规则模块连接的约定规则模块连接的参数传递方法模块连接的参数传递方法第11章模块化程序设计将程序分段、采用子程序或宏结构都是进行模将程序分段、采用子程序或宏结构都是进行模块化程序设计块化程序设计本节介绍开发大型程序时采用的方法:本节介绍开发大型程序时采用的方法:源程序文件的包含源程序文件的包含源程序文件的包含源程序文件的包含目标模块连接目标模块连接目标模块连接目标模块连接把把源源程程序序分分放放在在几几个个文文本本文文件

2、件中中,在在汇汇编编时时通通过包含伪指令过包含伪指令INCLUDE结合成一体结合成一体INCLUDE 文件名文件名第11章源文件包含的操作步骤:源文件包含的操作步骤:分别编辑生成各个文件分别编辑生成各个文件 汇编、连接主程序文件汇编、连接主程序文件把把常常用用子子程程序序写写成成独独立立的的源源程程序序文文件件,单单独独汇编,形成子程序的目标文件汇编,形成子程序的目标文件.OBJ主程序也经过独立汇编之后形成目标文件主程序也经过独立汇编之后形成目标文件连连接接程程序序将将所所有有目目标标文文件件连连接接起起来来,最最终终产产生可执行文件生可执行文件需要遵循的原则:需要遵循的原则:声明共用的变量、

3、过程等声明共用的变量、过程等 实现正确的段组合实现正确的段组合 处理好参数传递问题处理好参数传递问题目标代码文件的连接2声明共用的变量、过程各个模块间共用的变量、过程等要说明各个模块间共用的变量、过程等要说明PUBLIC 标识符标识符,标识符标识符.;定义标识符的模块使用定义标识符的模块使用EXTERN 标识符标识符:类型类型,标识符标识符:类型类型.;调用标识符的模块使用调用标识符的模块使用标识符是变量名、过程名等标识符是变量名、过程名等类类型型是是byte/word/dword(变变量量)或或near/far(过程)过程)在一个源程序中,在一个源程序中,public/extern语句可以有

4、多条语句可以有多条各各模模块块间间的的public/extern伪伪指指令令要要互互相相配配对对,并并且指明的类型互相一致且指明的类型互相一致第9章实现正确的段组合子子程程序序文文件件必必须须定定义义在在代代码码段段中中,也也可可以以具具有有局局部部的数据变量的数据变量采采用用简简化化段段定定义义格格式式,只只要要采采用用相相同同的的存存储储模模式式,容易实现正确的近或远调用容易实现正确的近或远调用完完整整段段定定义义格格式式中中,为为了了实实现现模模块块间间的的段段内内近近调调用用(near类类型型),各各自自定定义义的的段段名名、类类别别必必须须相相同同,组组合合类类型型都都是是publi

5、c。实实际际的的程程序序开开发发中中,各各个个模模块块往往往往由由不不同同的的程程序序员员完完成成,不不易易实实现现段段同同名名或或类类别相同,所以索性定义成远调用(别相同,所以索性定义成远调用(far类型)类型)定定义义数数据据段段时时,同同样样也也要要注注意意这这个个问问题题。当当各各个个模模块块的的数数据据段段不不同同时时,要要正正确确设设置置数数据据段段DS寄寄存存器器的段基地址的段基地址第9章处理好参数传递问题少少量量参参数数可可用用寄寄存存器器或或堆堆栈栈直直接接传传送送数据本身数据本身大大量量数数据据可可以以安安排排在在缓缓冲冲区区,用用寄寄存存器或堆栈传送数据的存储地址器或堆栈

6、传送数据的存储地址还还可可利利用用变变量量传传递递参参数数,但但是是要要采采用用public/extern声声明明为为公公共共(全全局局)变量变量这些也是子程序间的参数传递方法这些也是子程序间的参数传递方法第9章第11章什么是混合编程多多种种程程序序设设计计语语言言间间,通通过过相相互互调调用用、参参数数传传递递、共共享享数数据据结结构构和和数数据据信信息息而形成程序的过程就是混合编程而形成程序的过程就是混合编程程程序序的的大大部部分分采采用用高高级级语语言言编编写写,以以提提高高程程序序的的开开发发效效率率;在在某某些些部部分分,利利用用汇汇编编语语言言编编写写,以以提提高高程程序序的的运运

7、行效率行效率第11章混合编程方法嵌入式汇编嵌入式汇编n在在C/C+语言中直接使用汇编语言语句,语言中直接使用汇编语言语句,n简洁直观、功能较弱简洁直观、功能较弱模块连接模块连接n两两种种语语言言分分别别编编写写独独立立的的程程序序模模块块,分分别别产产生生目目标标代代码码OBJ文文件件,然然后后进进行行连连接接,形成一个完整的程序形成一个完整的程序n使用灵活、功能强,要解决参数传递问题使用灵活、功能强,要解决参数传递问题第11章混合编程的关键问题建立不同语言之间的接口建立不同语言之间的接口在在不不同同格格式式的的两两种种语语言言间间提提供供有有效效的的通通讯讯方方式式,作作出出符符合合两两种种

8、语语言言调调用用约约定定的的某某种种形形式式说说明明,实实现现两两种种语语言言间间的的程程序序模模块块互互相相调调用用、变变量量的的相相互互传传送送以以及及参参数数和和返返回回值值的的正正确使用确使用第11章Turbo C嵌入式汇编方式格式格式asm 操作码操作码 操作数操作数 举例举例asm mov ax,ds;asm pop ax;asm pop ds;asm ret;asm push ds第11章若干注意事项操操作作码码支支持持8086/8087指指令令或或若若干干伪伪指指令:令:db/dw/dd和和extern 操操作作数数是是操操作作码码可可接接受受的的数数据据:立立即即数数、寄寄存

9、存器器名名,还还可可以以是是C语语言言程程序序中中的的常常量、变量和标号等量、变量和标号等内内嵌嵌的的汇汇编编语语句句可可以以用用分分号号“;”结结束束,也可以用换行符结束也可以用换行符结束 使用使用C的注释,如的注释,如/*/正确运用通用寄存器、标号等正确运用通用寄存器、标号等/*LT602.C*/#include void upper(char*dest,char*src)asm mov si,src/*dest和和src是地址指针是地址指针*/asm mov di,destasm cldloop:asm lodsb/*C语言定义的标号语言定义的标号*/asm cmp al,aasm jb

10、 copy/*转移到转移到C的标号的标号*/asm cmp al,zasm ja copy/*不是不是a到到z之间的字符原样复制之间的字符原样复制*/例例1 11 1.2.21/21/2asm sub al,20h/*小写字母转换成大写小写字母转换成大写*/copy:asm stosbasm and al,al/*C语言中,字符串用语言中,字符串用NULL(0)结尾结尾*/asm jnz loopmain()/*主程序主程序*/char str=This Started Out As Lowercase!;char chr100;upper(chr,str);printf(Origin str

11、ing:n%sn,str);printf(Uppercase String:n%sn,chr);例例1 11 1.2.22/22/2第11章Turbo C模块连接的约定规则命名约定命名约定n汇汇编编语语言言过过程程中中被被C语语言言调调用用的的标标识识符符前前要要加加上上下划线下划线“_”声明约定声明约定nC对调用的外部过程、变量等采用对调用的外部过程、变量等采用EXTERN说明说明n汇编语言程序的标识符用汇编语言程序的标识符用public操作符定义操作符定义寄存器使用约定寄存器使用约定存储模式约定存储模式约定n采用采用相同的存储模式相同的存储模式参数传递约定:堆栈和共享变量参数传递约定:堆栈

12、和共享变量;汇编语言子程序:汇编语言子程序:lt903s.asmdata segmentmsgdb Hello,C and Assembly!$data endscode segmentPUBLIC _display_display proc;过程名加有下划线过程名加有下划线mov ah,9mov dx,offset msg;寄存器寄存器AX和和DX无须保护无须保护int 21hret_display endpCode endsend例例1 11 1.3.31/21/2/*C语言程序:语言程序:lt903.c*/extern void display(void);/*说明说明display是外

13、部函数是外部函数*/main()display();例例1 11 1.3.32/22/2;汇编语言子程序:汇编语言子程序:lt904s.asm.model small.codePUBLIC _min_minproc;小型模式,为近过程小型模式,为近过程push bpmov bp,spmov ax,bp+4;取第取第1个参数个参数cmp ax,bp+6;与第与第2个参数比较个参数比较jle minexitmov ax,bp+6;保存返回值保存返回值minexit:pop bpret_minendpend例例1 11 1.4.41/21/2图示large688L/*C语言程序:语言程序:lt904

14、.c*/extern int min(int,int);main()printf(“%d”,min(100,200);小型模式编译程序和连接:小型模式编译程序和连接:TCC-ms-Iinclude-Llib lt904.c lt904s.obj大型模式编译程序和连接:大型模式编译程序和连接:TCC-ml-Iinclude-Llib lt904.c lt904l.obj例例1 11 1.4.42/22/2第11章Visual C的嵌入式汇编格式格式_ _asm 指令指令 举例举例int power2(int num,int power)_ _asmmov eax,nummov ecx,power

15、shl eax,cl/返回返回 EAX=EAX(2CL)第11章模块连接的注意事项必须遵循共同的约定规则必须遵循共同的约定规则n命名约定命名约定n声明约定声明约定n寄存器使用约定寄存器使用约定n存储模式约定存储模式约定n参数传递约定参数传递约定采用一致的调用规范采用一致的调用规范声明共用函数和变量声明共用函数和变量正确传递入口参数和返回参数正确传递入口参数和返回参数第11章32位汇编语言过程用用.386p等等处处理理器器伪伪指指令令说说明明采采用用的的指令集指令集32位逻辑段环境位逻辑段环境有些指令在有些指令在32位段与位段与16位段有差别位段有差别采用平展模式(采用平展模式(flat)汇编时

16、采用选项汇编时采用选项/coff;汇编语言子程序:汇编语言子程序:lt614f.asm.386p.model flat,cPUBLIC power2.codepower2 procpush ebpmov ebp,espmov eax,ebp+8;取第取第1个参数个参数mov ecx,bp+12;取第取第2个参数个参数shl eax,clpop ebpret;返回返回EAXpower2 endpend例例1 11 1.14.141/21/2图示/C+语言程序:语言程序:lt914.cpp#include extern“c”int power2(int,int);void main(void)co

17、ut“2的的6次方乘次方乘5等于:等于:t”;coutpower2(5,6)endl;将汇编语言程序汇编成目标代码文件:将汇编语言程序汇编成目标代码文件:ML/c/coff lt614f.asm在在Visual C+6.0编译环境下创建项目,编译环境下创建项目,插入汇编成的目标代码文,然后编译连接插入汇编成的目标代码文,然后编译连接例例1 11 1.14.142/22/2如何简化利用堆栈的如何简化利用堆栈的传递参数方法传递参数方法要要调调用用带带参参数数过过程程定定义义的的过过程程,不不应应采采用用CALL指令,因为比较烦琐指令,因为比较烦琐应该采用过程调用伪指令应该采用过程调用伪指令INVO

18、KE使使 用用 INVOKE伪伪 指指 令令 的的 前前 提提 是是 需需 要要 用用PROTO伪指令对过程进行声明伪指令对过程进行声明带参数过程的定义、声明和调用过程名过程名 PROC调用距离调用距离 语言类型语言类型 作用范围作用范围 USES 寄存器列表寄存器列表,参数参数:类型类型LOCAL 参数表参数表;汇编语言语句汇编语言语句过程名过程名 ENDP第9章过程声明伪指令:过程声明伪指令:用于事先声明过程的结构用于事先声明过程的结构过程名过程名PROTO 调用距离调用距离 语言类型语言类型,参数参数:类型类型过程调用伪指令过程调用伪指令INVOKE 过程名过程名,参数参数,.如何调如何

19、调用用;汇编语言程序:汇编语言程序:lt915.asm.model smallchecksumd PROTO c,countp:word,arrayp:word;声明过程声明过程.stack 256.dataarraydb 12h,25h,0f0h,0a3h,3db 68h,71h,0cah,0ffh,90hcountequ$-array;数数 组组 的的 元元 素素 个个 数数resultdb?;校验和校验和.code.startupINVOKE checksumd,count,offset array;调用过程调用过程mov result,al;保存校验和保存校验和.exit 0例例9.1

20、9.15 51/21/2对比checksumd PROC c USES bx cx,countp:word,arrayp:wordmov bx,arrayp;BX数组的偏移地址数组的偏移地址mov cx,countp;CX数组的元素个数数组的元素个数xor al,alsumd:add al,bx;求和:求和:ALAL+DS:BXinc bxloop sumdretchecksumd endpend例例1 11 1.1.15 52/22/2对比;汇编语言子程序:汇编语言子程序:lt916s.asm.model small,c;采用采用C语言类型语言类型public min.codeminproc

21、,var1:word,var2:wordmov ax,var1;取第取第1个参数个参数var1cmp ax,var2;与第与第2个参数个参数var2比较比较jle minexitmov ax,var2;保存返回值保存返回值minexit:retminendpend例例1 11 1.16.16对比供供C语言主程序调用语言主程序调用;汇编语言子程序:汇编语言子程序:lt917f.asm.386p.model flat,cPUBLIC power2.codepower2 PROC,num:dword,power:dwordmov eax,num;获取参数获取参数mov ecx,powershl ea

22、x,cl;计算计算ret;EAX存放返回值存放返回值power2 ENDPend例例1 11 1.17.17对比供供C+主程序调用主程序调用/C+程序:程序:LT918.CPP#include extern C long isum(int,int*);int imin(int,int*);void main(void)const int SIZE=10;int arraySIZE;int temp;cout请输入请输入10个整数:个整数:endl;for(temp=0;temparraytemp;coutendl;cout整数数据之和:整数数据之和:tisum(SIZE,array)endl;

23、cout其中最小值为:其中最小值为:timin(SIZE,array)endl;例例1 11 1.1.18 81/41/4/求求itmp个元素的数组个元素的数组iarray的最小数的最小数int imin(int itmp,int iarray)_asm mov ecx,itmpjecxz minexit;个数为个数为0,返回,返回dec ecxmov esi,iarraymov eax,esijecxz minexit;个数为个数为1,返回,返回minlp:add esi,4cmp eax,esi;比较两个数据的大小比较两个数据的大小jle nochangemov eax,esi;取得较小值

24、取得较小值nochange:loop minlpminexit:例例1 11 1.1.18 82/42/4;汇编语言子程序:汇编语言子程序:LT918F.ASM.386p.model flat,c.code;32位有符号数据的求和过程位有符号数据的求和过程isum proc uses ecx esi,count:dword,darray:PTRmov ecx,count;个数为个数为0,和为,和为0 xor edx,edxxor eax,eaxjecxz sumexitmov esi,darray;个数为个数为1,和为本身,和为本身mov eax,esidec ecxjecxz sumexit

25、例例1 11 1.1.18 83/43/4sumlp:add esi,4add eax,esi;计算低计算低32位位adc edx,0;计算高计算高32位位loop sumlpsumexit:retisumendpend例例1 11 1.1.18 84/44/4将汇编语言程序汇编成目标代码文件:将汇编语言程序汇编成目标代码文件:ML/c/coff lt918f.asm在在Visual C+6.0编译环境下创建项目,编译环境下创建项目,插入汇编成的目标代码文,然后编译连接插入汇编成的目标代码文,然后编译连接第11章 教学要求1.熟悉嵌入式和模块连接两种混合编程方法熟悉嵌入式和模块连接两种混合编程方法2.了解模块连接混合编程的约定规则了解模块连接混合编程的约定规则3.熟悉模块链接混合编程的参数传递方法熟悉模块链接混合编程的参数传递方法

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!