欢迎来到天天文库
浏览记录
ID:58756062
大小:127.50 KB
页数:71页
时间:2020-10-03
《汇编语言 第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子程序的调用与返回子程序的正确执行是由子程序的正确调用和正确返回保证的。汇编语言中子程序
此文档下载收益归作者所有