欢迎来到天天文库
浏览记录
ID:52429273
大小:204.50 KB
页数:26页
时间:2020-04-06
《汇编语言参数传递.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第6章子程序设计1子程序又称为过程,是完成特定功能的程序段。本身不能被单独执行,必须通过调用的程序来执行才有意义。子程序结构是模块化程序设计的基础。一、过程定义伪指令格式:过程名PROCATTRIBUTE┇RET过程名ENDP过程入口的符号地址[NEAR/FAR]2用户对过程属性的确定原则:(1)若调用程序和过程在同一个代码段中,则使用NEAR属性;(2)若调用程序和过程不在同一个代码段中,则使用FAR属性。二、子程序的调用和返回为方便用户的工作,80x86的汇编程序用PROC伪操作的类型属性来确定CALL和RET指令的属性,即CALL和RET的属性由汇编程序确定,用户只需正确选择PR
2、OC的属性就可以了。子程序的调用采用指令CALL,其格式为:CALL过程名⑴段内调用3CSEGSEGMENTMAINPROCFARCALLSUBTRETMAINENDPSUBTPROCNEARRETSUBTENDPCSEGENDS………⑵段间调用SEGXSEGMENTSUBTPROCFARRETSUBTENDPCALLSUBT;第一次调用SEGXENDSSEGYSEGMENTCALLSUBT;第二次调用SEGYENDS……………CALLfarptrSUBT(8086)4(3)子程序的返回由RET指令实现过程的返回功能,由于CALL时,已使返回地址如栈,所以RET时应使返回地址出栈。因此
3、,在执行RET前,SP应指向进入子程序时的返回地址,这样,才能使返回地址出栈,正确返回到主程序。5三、保存与恢复寄存器(现场保护与恢复)通常主程序和过程的设计是分开的,因而他们所使用的寄存器往往会发生冲突。为解决这一冲突,一般地,应该在子程序入口处将子程序中用到的寄存器内容压入堆栈保存,而在返回到调用程序之前再恢复这些寄存器。如:SUB1PROCNEARPUSHAX;进入后,压栈保护现场PUSHBX┋;处理部分POPBX;反序弹出,恢复现场POPAXRETSUB1ENDP但是,如果是用来向主程序回送结果的寄存器,则不应该保存其内容,否则会因为保存和恢复寄存器而破坏了应该向主程序传送的信
4、息。6四、主、子程序间的参数传递方法主程序子程序子程序主程序原始数据、地址处理结果参数传递入口参数:主程序调用子程序时,必须先将子程序所需要的初始数据设置好,这些初始数据称为过程的入口参数。出口参数:子程序执行完毕返回主程序时也必须将子程序运行所得的结果送给主程序,这些回送的结果称为过程的出口参数。参数传递:过程入口参数的送入和出口参数的送出称为主程序和过程间的参数传递,也称过程通信。过程通信通常有四种方法:71、通过寄存器传递参数2、通过变量传递参数3、通过地址表传递参数4、通过堆栈传递参数1、通过寄存器传送参数最常用,但参数多时不宜使用。(1)主、子程序之间通过寄存器传递参数(
5、2)子程序之间通过寄存器传递参数8例6.1:从键盘输入一个十进制数并将其以十六进制形式在屏幕上显示出来。十进制二进制数十六进制数decibin子程序binihex子程序功能:从键盘取得十进制数把BX中的二进制数转换成十六进制数转换,结果放BX并显示入口参数:键盘取得的十进要转换的二进制数在BX中制数放AL出口参数:转换结果放入BX转换结果放入AL(以备显示)BX在子程序之间传递参数9键盘输入的十进制数二进制数的转换算法:从最高位起,每个数位先将ASCII字符转换为数字,然后乘以该位的权,累加后就成为所要求的二进制数。例:从键盘输入数12345的计算步骤为:步骤成绩5X1=54X10=4
6、03X100=3002X1000=20001X10000=10000求和=1234510键盘输入的十进制数二进制数的转换算法步骤:(1)(bx)=0;(2)十进制数中的高位ASCII码转换为二进制数,并放于ax中;(3)(bx)(bx)x10+(ax);(4)重复(2)、(3)步,直到各位十进制数都转换为止,结果放bx中。11开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束程序结构:12主程序:decihexsegmentmainprocfarassumecs:decihexstart:pushdssubax,axpushaxcalldecibin;keyboard
7、tobinarycallcrlf;printcrandlfcallbinihex;binarytoscreencallcrlf;printcrandlfjmpstartret;在补充教材中补上mainendp13decibinprocnearmovbx,0;clearBXfornumbernewchar:movah,1int21hsubal,30h;ASCIItobinaryjlexit;jumpif<0cmpal,9;isit>9?jgexi
此文档下载收益归作者所有