欢迎来到天天文库
浏览记录
ID:59487267
大小:525.00 KB
页数:65页
时间:2020-09-13
《第六章子程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章子程序设计1、子程序的设计方法2、子程序的嵌套3、子程序应用举例子程序的设计方法1、子程序的定义2、子程序的调用与返回指令3、保存与恢复寄存器4、子程序的参数传递子程序的定义将一些常用的具有通用功能的操作编写成子程序,便于一个或多个程序使用,使程序设计模块化,从而达到代码复用、简化编程的目的。子程序定义伪指令:子程序名PROC[NEAR/FAR]子程序体RET子程序名ENDP其中:PROC表示子程序开始,ENDP表示子程序结束。过程名是子程序的入口地址,在程序中是唯一的。它应满足标识符的命名规则。FAR或
2、NEAR是子程序的属性操作符,缺省时为NEAR属性。NEAR的用法FAR的用法需要注意的问题1、在子程序体内,必须保证有一条RET指令被执行。如:PROC1PROCMOVAX,0PROC1ENDPPROC2PROCMOVBX,-1RETPROC2ENDP当用指令CALLPROC1调用子程序PROC1时,程序执行完PROC1后,直接顺序执行子程序PROC2,当执行到RET时才返回。汇编程序不会在PROC1的ENDP伪指令处返回主程序。2、当调用程序和子程序在同一个程序段时,属性选择NEAR,当调用程序和子程序不在
3、同一个程序段时,属性应选择FAR。子程序的调用与返回指令子程序的调用指令指令格式:CALLDST其中:目的操作数DST是子程序名或子程序首地址,可以是与转移指令有关的四种转移的寻址方式之一,即:段内直接调用、段内间接调用、段间直接调用、段间间接调用。如果目的操作数DST是子程序名(子程序首地址)或是转移地址,该有效地址直接出现在CALL指令中,则为直接调用;如果有效地址是在寄存器或存储器中间接得到的,则为间接调用。CALL指令的格式段内直接近调用1、CALL子程序名2、CALLNEARPTR子程序名段内间接近调
4、用3、CALL寄存器操作数4、CALLWORDPTR存储器操作数段间直接远调用5、CALLFARPTR子程序名段间间接远调用6、CALLDWORDPTR存储器操作数CALL指令的格式1)段内直接调用SP=SP-2;SS:[SP]CALL指令的下一条指令的偏移地址IP=IP+D16(当DST为16位)2)段内间接调用SP=SP-2;SS:[SP]CALL指令的下一条指令的偏移地址IP=DST中的有效地址EA(当DST为16位)子程序的调用指令3)段间直接调用SP=SP-2;SS:[SP]返回地址的段地址SP
5、=SP-2;SS:[SP]返回地址的偏移地址IP=DST的偏移地址CS=DST的段地址子程序的调用指令4)段间间接调用SP=SP-2;SS:[SP]返回地址的段地址SP=SP-2;SS:[SP]返回地址的偏移地址IP=EA的低16位CS=EA的高16位子程序的返回指令指令格式:RET指令功能:段内返回:取栈顶的两字节内容送IP寄存器。段间返回:将堆栈中保存的IP和CS值分别送IP和CS寄存器。带立即数的返回指令:RETNN一般为偶数;该指令除了执行RET指令的功能外还要修改SP的值即:SP=SP+N指令总
6、结指令格式指令功能寻址方式CALLDSTCALLNEARPTRDSTSP=SP-2;SS:[SP]←CALL指令的下一条指令的IP值IP=IP+D16(当DST为16位)段内直接调用CALLFARPTRDSTSP=SP-2;SS:[SP]←返回地址的段地址SP=SP-2;SS:[SP]←返回地址的偏移值IP=DST的偏移地址,CS=DST的段地址段间直接调用CALL寄存器操作数如:CALLBXCALLWORDPTRMSP=SP-2;SS:[SP]←CALL指令的下一条指令的IP值IP=DST中的有效地址EA(当
7、DST为16位)(IP←BX的值)段内间接调用CALLDWORDPTRDST如:CALLDWORDPTR[BX]SP=SP-2;SS:[SP]←返回地址的段地址SP=SP-2;SS:[SP]←返回地址的偏移值IP=EA的低16位,CS=EA的高16位(IP←DS:[BX]的值,CS←DS:[BX+2]的值)段间间接调用RETIP←SS:[SP],SP=SP+2段内返回RETIP←[SP],SP=SP+2CS←[SP],SP=SP+2段间返回RETNIP←[SP],SP=SP+2(段内)CS←[SP],SP=SP
8、+2(段间)SP←SP+n段内或段间带参数调用例子1、分析下列程序段,回答指定问题。10A3H:2000HXORAL,AL10A3H:2002HMOVAX,CS10A3H:2004HMOVSS,AX10A3H:2006HMOVSP,2F00H10A3H:2009HMOVDX,2012H10A3H:200CHPUSHDX10A3H:200DHCALL2700H10A3H:2010HADD
此文档下载收益归作者所有