欢迎来到天天文库
浏览记录
ID:59238204
大小:394.00 KB
页数:36页
时间:2020-09-22
《汇编语言第6章 子程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章子程序设计子程序的定义子程序把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序特点实现源程序的模块化简化源程序结构提高编程效率过程定义伪指令参数传递是子程序设计的重点和难点子程序可以嵌套主要内容子程序的定义过程定义伪操作过程名PROC[NEAR]
2、FAR...RET过程名ENDPNEAR属性(段内近调用)的过程只能被相同代码段的其他程序调用FAR属性(段间远调用)的过程可以被相同或不同代码段的程序调用不能缺少!子程序的常见格式subnameproc;具有缺省属性near的subname过程pushax;保护寄存器:
3、顺序压入堆栈pushbx;ax/bx/cx仅是示例pushcx…;过程体popcx;恢复寄存器:逆序弹出堆栈popbxpopaxret;过程返回subnameendp;过程结束子程序中使用了AX,BX,CX子程序的调用与返回指令指令格式指令功能寻址方式CALLDSTSP=SP-2;[SP]=CALL指令的下一条指令的IP值;IP=IP+D16段内直接调用CALLFARPTRDSTSP=SP-2;[SP]=返回地址的段地址SP=SP-2;[SP]=返回地址的偏移值IP=DST的偏移地址,CS=DST的段地址段间直接调用CALLDST如:CALLBXSP=S
4、P-2;[SP]=CALL指令的下一条指令的IP值IP=DST中的有效地址EA(IP=BX)段内间接调用CALLDST如:CALLDWORDPTR[BX]SP=SP-2;[SP]=返回地址的段地址SP=SP-2;[SP]=返回地址的偏移值IP=EA的低16位,CS=EA的高16位段间间接调用RETIP=[SP],SP=SP+2段内返回RETFIP=[SP],SP=SP+2CS=[SP],SP=SP+2段间返回RETnIP=[SP],SP=SP+2(段内)CS=[SP],SP=SP+2(段间)SP=SP+n段内或段间带参数返回断点入栈转子程序MAINCAL
5、LFARptrPA0500:10002000:2500PARETSP00100005CS=2000IP=2500子程序的调用指令格式:CALL过程名过程名就是子程序入口地址,即子程序第一条指令的首字节地址CALL指令寻址方式段内直接寻址CALLDST段内间接寻址CALLBX段间直接寻址CALLFARPTRDST段间间接寻址CALLDWORDPTR[BX]返回指令格式:RET/RETF/RETn寻址方式:段内返回段间返回说明:CALL和RET指令的属性过程是有类型的,缺省情况下是NEAR类型CALL和RET指令的操作也是有类型的如果定义的过程是FAR属性的
6、,那么对它的调用和返回一定都是FAR属性的。(断点的保存和弹出都是32位的)。如果定义的过程是NEAR属性的,那么对它的调用和返回一定都是NEAR属性的。(断点的保存和弹出都是16位的)。子程序和调用程序之间的调用形式1、调用程序和子程序在同一个代码段CODESEGMENTASSUMECS:CODE……CALLSUBR1……SUBR1PROC……RETSUBR1ENDPCODEENDS调用程序和子程序不在同一个代码段CODE1 SEGMENT…SUBR1PROCFAR…RETSUBR1 ENDP…CALLSUBR1…CODE1ENDSCODE2SEGME
7、NT…CALLFARPTRSUBR1…CODE2ENDS子程序调用方式举例DATASEGMENTNPROCDWNEARPFPROCDDFARPDATAENDSCODE1SEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCALLNEARP;段内直接LEAAX,NEARPCALLAX;段内间接LEABX,NPROCCALLWORDPTR[BX];段内间接CALLFARPTRFARP;段间直接LEABX,FPROCCALLDWORDPTR[BX];段间间接MOVAH,4CHINT21HNEARPPROCNE
8、AR……RETNEARPENDPCODE1ENDSENDSTARTCODE2SEGMENTASSUMECS:CODE2FARPPROCFAR……RETFARPENDPCODE2ENDS……子程序的编程原则按功能进行模块分解主子程序分别画流程图写子程序说明子程序名功能入口/出口参数等显示回车换行子程序DISPODOAPROCPUSHAXPUSHDXMOVAH,2MOVDL,0DHINT21HMOVAH,2MOVDL,0AHINT21HPOPDXPOPAXRETDISPODOAENDP显示字节ARRAY中的值...movbx,offsetarraymovcx
9、,countdisplp:moval,[bx]callaldispmovdl,2
此文档下载收益归作者所有