汇编语言 第6章 子程序设计ppt课件.ppt

汇编语言 第6章 子程序设计ppt课件.ppt

ID:58756062

大小:127.50 KB

页数:71页

时间:2020-10-03

汇编语言 第6章  子程序设计ppt课件.ppt_第1页
汇编语言 第6章  子程序设计ppt课件.ppt_第2页
汇编语言 第6章  子程序设计ppt课件.ppt_第3页
汇编语言 第6章  子程序设计ppt课件.ppt_第4页
汇编语言 第6章  子程序设计ppt课件.ppt_第5页
资源描述:

《汇编语言 第6章 子程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、6.1子程序的调用与返回指令6.1.1子程序的调用指令CALL6.1.2返回指令RET下一节6.1.1子程序的调用指令CALL指令格式:CALLOPD注:过程名或子程序名就是子程序入口处的符号地址。执行CALL指令时,首先要保留断点地址于堆栈中,然后程序转移到指定的子程序入口地址处去执行子程序。由于子程序与调用它的程序可能在同一个段中,也可以不在同一个段中,CALL指令在转移到子程序入口地址时有两种寻址方式:直接寻址方式和间接寻址方式或者称为直接调用和间接调用。前面提到,指令指针寄存器IP总是指向下一条将要执行的指令。在执行指令CALL时,堆

2、栈中保存的就是原程序的断点地址(CALL指令后面1条指令的地址称为断点地址,也即返回地址)。1.段内直接调用在调用指令的目的操作数中直接给出过程名或子程序名。如CALLPROC1执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(IP)+16位的位移量指令中的过程名或子程序名为NEAR属性,给出了转向地址(即子程序的入口地址,亦子程序的第一条指令的地址)。【例6.1】CALLDISPLAY1┆DISPLAY1PROCNEAR┆RET2.段内的间接调用子程序的入口地址存放在一个16位通用寄存器或字存储单元中。在调用

3、指令的目的操作数是除立即数寻址的某种寻址方式确定的有效地址EA。执行的操作是:(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(EA)【例6.2】CALLBX;CALLWORDPTR[BX]3.段间直接调用调用指令的目的操作数中直接给出过程名或子程序名。如:CALLPROC2注:在不同的逻辑段中进行调用,直接调用的属性为FAR类型。执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(CS)(IP)←(EA)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←偏移地址(CS)←子程序的段基址【例6

4、.3】CALLDISPLAY2┆DISPLAY2PROCFAR┆RET4.段内间接调用子程序的入口地址存放在一个双字存储单元中,低地址的字单元存放入口地址的偏移量,高地址的字单元存放入口地址的段基址。执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(CS)(IP)←(EA)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(EA)(CS)←(EA+2)【例6.4】CALLDWORDPTR[BX]返回本章首6.1.2返回指令RETRET指令放在子程序的末尾,它使子程序的功能完成后返回到调用程序继续执行,而返回地址

5、是调用指令时存入堆栈中的,回此RET指令的操作就是返回IP寄存器和CS寄存器的值。语句格式:RET执行段内RET指令时,从堆栈顶部弹出一个字(返回地址)送IP。执行段间RET指令时,从堆栈顶部弹出两个字(返回地址),分别送入IP和CS中。语句格式:RETn(n为偶数)指令中参数N应为偶数,如:2,4,6等。此指令先从堆顶弹出返回地址送IP或者IP和CS中,然后用参数N修改堆栈指针SP的值。SP=(SP)+N根据调用的不同,返回指令也分为:1.段内返回执行的操作:(IP)←((SP)+1,(SP))(SP)←(SP)+22.段内带立即数返回RE

6、TN执行的操作:(IP)←((SP)+1,(SP))(SP)←(SP)+2(SP)←(SP)+N返回本章首6.2子程序的设计方法6.2.1子程序的定义6.2.2子程序的调用与返回6.2.3信息的保存与恢复下一节6.2.1子程序的定义子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下:过程名PROC[NEAR/FAR]┆过程名ENDP其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。当子程序和调用程序在同一个段时,子程

7、序定义为NEAR属性;当子程序和调用程序不在同一个段时,子程序定义为FAR属性.【例6.5】主程序和子程序在同一个代码段时的调用和定义CODESEGMENT┆MAINPROCFAR┆CALLSUBPROG1┆RETMAINENDP;这一条指令也可以写在子程序结束之后SUBPROG1PROCNEAR┆RETSUBPROG1ENDPCODEENDS【例6.6】主程序和子程序不在同一个代码段时的调用和定义CODESEGMENT┆MAINPROCFAR┆CALLSUBPROG1┆RETMAINENDPCODE1SEGMENTSUBPROG1PROCN

8、EAR┆RETSUBPROG1ENDPCODE1ENDS返回本章首6.2.2子程序的调用与返回子程序的正确执行是由子程序的正确调用和正确返回保证的。汇编语言中子程序

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

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

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