汇编语言第六章子程序结构.pptx
第6章子程序结构在程序设计中,可以发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。调用子程序的程序称为主调程序或主程序。
子程序的基本结构包括以下几个部分:(1)子程序定义(2)保护现场和恢复现场(3)子程序体(4)子程序返回子程序的结构
子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下:过程名PROC[NEAR/FAR]┆过程名ENDP其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性(NEAR和FAR)。6.1.1子程序的定义6.1子程序的设计方法
1.如果调用程序和过程在同一代码段中,则使用NEAR属性;MAINPROCFAR…CALLSUBR1RETMAINENDP;SUBR1PROCNEAR…RETSUBR1ENDPMAINPROCFAR…CALLSUBR1RETSUBR1PROCNEAR…RETSUBR1ENDPMAINENDP例6.1过程嵌套定义
2.如果调用程序和过程不在同一代码段中,则使用FAR属性;SEGXSEGMENT…SUBTPROCFAR…RETSUBTENDP…CALLSUBT…SEGXENDS;SEGYSEGMENT…CALLSUBT…SEGYENDS例6.2
添加标题子程序的调用和返回01添加标题调用:CALL[far/nearptr]过程名02添加标题返回:RET[n]03
6.1.3保护现场和恢复现场例如:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用如下方法保护和恢复现场。PROG PROC PUSH AX PUSH BXPUSH CX ;保护现场 PUSH DX ┆POP DX POP CX POP BX ;恢复现场 POP AX RET ;返回断点处PROC ENDP
6.1.4主程序与子程序参数传递方式1通过寄存器传送参数这是最常用的一种方式,使用方便,但参数很多时不能使用这种方法。例6.3十进制到十六进制转换的程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式在屏幕上显示出来。开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束从键盘取得十进制数,保存到BX中显示回车和换行用十六进制形式显示BX中的数
Decihexsegmentassumecs:DecihexMainprocfarRepeat:pushdsxorax,axpushaxcalldecibincallcrlfcallbinihexcallcrlfretMainendpDecibinprocnearmovbx,0Newchar:movah,1int21h