第5章子程序107

第5章子程序107

ID:43739362

大小:651.00 KB

页数:156页

时间:2019-10-13

第5章子程序107_第1页
第5章子程序107_第2页
第5章子程序107_第3页
第5章子程序107_第4页
第5章子程序107_第5页
资源描述:

《第5章子程序107》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、新编汇编语言程序设计1第五章子程序5.1子程序5.2参数的传递5.3嵌套和递归子程序5.4多模块程序设计5.5汇编语言与C语言混合编程5.6DOS和BIOS调用习题五2子程序(Subroutine):把程序需要完成的任务分解为若干个“子任务”,每个“子任务”由一段相对独立的程序完成,称为“子程序”。调用子程序的程序称为“主程序”或者“主调程序”。子程序也称为“过程”(Procedure),在高级语言里还称作“函数”(Function)。3子程序结构程序的优点:1.程序结构清晰,提高了程序的可阅读性和可维护性。2.每个子程序可以独立地进行调试,由于程序规模较小,降低了

2、调试难度。3.每个子程序就是一个具有特定功能的独立的程序,提高程序的“可重用性”,提高了软件开发效率。4图5-1子程序的调用和返回5近程子程序:只能被同一个代码段里的程序调用的子程序。由于主程序和子程序处于同一个代码段,调用和返回时只需要改变IP寄存器的值,CS寄存器的值保持不变。近程子程序的入口地址用16位段内偏移地址表示。6远程子程序:能够被不同代码段的程序调用,也能被同一代码段的程序调用的子程序。调用这样的子程序时,需要同时改变CS和IP寄存器的值,返回时,需要从堆栈里弹出32位的返回地址送入IP,CS寄存器。远程子程序的入口地址用16位段基址和16位段内偏移

3、地址表示。子程序的类型在定义时说明75.1子程序5.1.1CALL和RET指令5.1.2子程序的定义5.1.3子程序文件5.1.4子程序应用8CALL(Call,调用)指令段内直接调用格式:CALL子程序名操作:SP←SP-2,SS:[SP]←IP(保存16位返回地址)IP←子程序入口的偏移地址例如:CALLPROC1段内间接调用格式:CALLREG16/MEM16操作:SP←SP-2,SS:[SP]←IP(保护16位返回地址)IP←REG16/MEM165.1.1CALL和RET指令9例如:调用名为“PROC1”的近程子程序。(1)CALLPROC1(2)LEAC

4、X,PROC1CALLCX(3)ADDR_PROC1DWPROC1;子程序偏移地址放入存储器字变量……CALLADDR_PROC1;调用近程子程序PROC1(4)……LEABX,ADDR_PROC1CALLWORDPTR[BX];调用近程子程序PROC110段间直接调用格式:CALLFARPTR子程序名操作:SP←SP-2,SS:[SP]←CSSP←SP-2,SS:[SP]←IP(保存32位返回地址,偏移地址保存在较小地址处)IP←子程序入口的偏移地址,CS←子程序入口的段基址CALLFARPTRPROC2例如:11段间间接调用格式:CALLMEM32操作:SP←S

5、P-2,SS:[SP]←CSSP←SP-2,SS:[SP]←IPIP←[MEM32],CS←[MEM32+2]例如:ADD_PROC2DDPROC2;子程序入口地址放入存储器双字变量……CALLADD_PROC2;调用远程子程序PROC212无参数段内返回格式:RET操作:IP←SS:[SP],SP←SP+2有参数段内返回格式:RETD16操作:IP←SS:[SP],SP←SP+2SP←SP+D16RET(Return,返回)指令13无参数段间返回格式:RET操作:IP←SS:[SP],SP←SP+2CS←SS:[SP],SP←SP+2有参数段间返回格式:RETD1

6、6操作:IP←SS:[SP],SP←SP+2CS←SS:[SP],SP←SP+2SP←SP+D16145.1.2子程序的定义子程序名PROC[NEAR/FAR]子程序体子程序名ENDP15说明:子程序名应为合法的标识符,子程序名不能与同一个源程序中的标号、变量名、其它子程序名相同。方括号中的内容是子程序的远近属性选项,二者可选其一,如果缺省,默认为NEAR。用NEAR说明的子程序是“近程子程序”,它只能被与它同一代码段的程序调用。用FAR说明的子程序是“远程子程序”,它不仅能被与它同一代码段的程序调用,也能被其它代码段的程序调用。子程序的定义要写在代码段内16ZER

7、OBYTESPROC;定义一个子程序XORAX,AX;AX清零MOVCX,128;循环次数送CXZEROLOOP:MOV[BX],AX;将一个字存储单元清零ADDBX,2;修改地址LOOPZEROLOOP;循环控制RET;返回主程序ZEROBYTESENDP;子程序结束思考题:该子程序完成了什么功能?调用该子程序时, 应该先做什么准备工作?17ZEROBYTES:XORAX,AX;AX寄存器清零MOVCX,128;计数器CX置初值ZEROLOOP:MOV[BX],AX;一个字单元清零ADDBX,2;修改地址指针,指向下一个字LOOPZEROLOOP;循环控制RE

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。