资源描述:
《汇编语言-子程序.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本章学习要点:(1)子程序的编写格式(2)子程序调用时的参数传递方法(3)嵌套及递归子程序一、过程定义语句(process)利用过程定义伪指令语句,可把程序片段说明为具有近类型或远类型的过程,并且能给过程取一个名字。过程定于语句的格式如下:过程名PROC[NEAR
2、FAR]…过程名ENDP过程的类型在过程定义开始语句PROC中指定;过程可以被指定位近(NEAR)类型,也可以被指定为远类型。如果不指定,则通常默认为近类型;定义一个过程的开始语句PROC和结束语句ENDP前使用的过程名称必须一致,从而保持配对。像普通标号一样,过程名具有段值
3、、偏移和类型这三个属性。过程名的段值和偏移是对应过程入口(过程定义开始伪指令语句后的指令语句)的段值和偏移。例:下面程序片段运行后,AL=?,BL=?。XORAL,ALCALLSUBSMOVBL,ALCALLSUBSRCRAL,1HLT;停机,haltSUBSPROCNEARNOTALJSNEXTSTC;CF=1,SeTCf=1NEXT:RETSUBSENDP例:用程序调用的方法,完成一个把16位二进制数转换为4位十六进制ASCII码的转换程序。子程序说明:入口参数:DX=欲转换的二进制数;DS:BX=存放转换所得ASCII码串的缓冲区
4、首地址,转换后的ASCII码串按照高位到低位的次序存放在指定的缓冲区中。HTASCSPROCRETMOVCX,4HTASCSENDPHTASCS1:ROLDX,1HTOASCPROCNEARROLDX,1ANDAL,0FHROLDX,1ADDAL,30HROLDX,1CMPAL,39HMOVAL,DLJBEHTOASC1CALLHTOASCADDAL,7MOV[BX],ALHTOASC1:RETINCBXHTOASCENDPLOOPHTASCS1二、主程序与子程序间的参数传递主程序在调用子程序时,往往要向子程序传递一些参数;同样地,子程
5、序运行后夜经常要把一些结果传会给主程序。主程序和子程序之间的这种信息传递称为参数传递。有多种参数传递的方法:(1)寄存器传递法(2)约定内存单元传递法(3)堆栈传递法(4)其它方法1.利用寄存器传递参数利用寄存器传递参数就是把参数放在约定的寄存器中。这种方法适用于传递参数较少的情况。例:写一个大写字母转换为小写字母的子程序;子程序名:UPTOLW;功能:大写字母转换为小写字母;入口参数:AL=字符的ASCII码;出口参数:AL=字符的ASCII码;说明:如字符为大写字母,则转换为小写,其它字符不变。UPTOLWPROCPUSHF;保护各
6、标志CMPAL,‘A’JBUPTOLW1CMPAL,‘Z’JAUPTOLW1ADDAL,20HUPTOLW1:POPF;恢复各标志RETUPTOLWENDP2.利用约定存储单元传递参数在传递参数较多的情况下,可利用约定的内存变量来传递参数。例:写一个实现32位数相加的子程序;子程序名:MADD;功能:32位数相加;入口参数:DATA1和DATA2缓冲区中分别存放要相加的数;出口参数:DATA3缓冲区存放结果;说明:;(1)32位数据的存放次序采用“高高低低”原则;(2)可能产生的进位放在DATA3开始的第5字节中MADDPROCPUSH
7、AX;为什么会把AX,CX,SI压入栈?PUSHCXPUSHSIMOVCX,2XORSI,SI;CF也会被清0MADD1:MOVAX,WORDPTRDATA1[SI]ADCAX,WORDPTRDATA2[SI]MOVWORDPTRDATA3[SI],AXINCSIINCSIPOPSILOOPMADD1POPCXMOVAL,0POPAXADCAL,0RETMOVBYTEPTR[DATA3+4],ALMADDENDP3.利用堆栈传递参数(1)如果利用堆栈传递入口参数,那么主程序在调用子程序之前,把需要传递的参数依次压入堆栈,子程序从堆栈中取
8、入口参数;(2)如果使用堆栈传递出口参数,那么子程序返回前,把需要返回的参数存入堆栈,主程序在堆栈中取出口参数。例:写一个测量字符串长度的子程序,设字符串以0为结束标志。;子程序名:STRLEN;功能:测量字符串长度;入口参数:字符串起始地址的段值和偏移放在堆栈中;出口参数:AX=字符串长度。STRLENPROCPUSHBPMOVBP,SPPUSHDSPUSHSIMOVDS,[BP+6]MOVSI,[BP+4]MOVAL,0STRLEN1:CMPAL,[SI]JZSTRLEN2INCSIJMPSTRLEN1POPDSSTRLEN2:MO
9、VAX,SIPOPBPSUBAX,[BP+4]RETPOPSISTRLENENDP主程序调用这个子程序的代码片段如下:MOVAX,SEGSTRPUSHAXMOVAX,OFFSETSTRPUSHAXCALLS