汇编语言子程序设计.ppt
《汇编语言子程序设计.ppt》由会员分享,可在线阅读,更多相关《汇编语言子程序设计.ppt(39页珍藏版)》请在课桌文档上搜索。
1、本章主要教学内容,本章主要教学目的及要求,1.理解掌握子程序调用与返回指令;2.掌握子程序设计的基本过程和设计方法;3.能熟练设计子支程序。,1.子程序调用与返回指令。2.子程序设计的基本过程和设计方法。,7.1 概述,7.1.1 子程序设计的概念,含义:被独立出来的程序段称为子程序或过程,主程序与子程序之间的关系,7.1.2 子程序的特性,(1)功能独立(2)通用性(3)可浮动性(4)可递归和可重入性,7.1.3 子程序的优点,(1)简化了程序设计过程,使程序设计时间大量节省。(2)缩短了程序的长度,节省了计算机汇编源程序的时间和程序的 存储空间。(3)增加了程序的可读性,便于对程序的修改、
2、调试。(4)方便了程序的模块化、结构化和自顶向下的程序设计。,7.2 子程序调用和返回指令,7.2.1 子程序调用指令,类型,段内调用,主程序和子程序处在同一代码段,只改变IP值,段间调用,主程序和子程序处不在同一代码段,既改变IP值也改变CS值,段内直接调用,格式:CALL DST/NEAR PTR DST,功能:(1)SPSP-2(SP)IP(2)IPIP+D16,段内间接调用,格式:CALL DST/WORD PTR DST,功能:(1)SPSP-2(SP)IP(2)IP(EA),例:CALL MULL,段间直接调用,格式:CALL FAR PTR DST,功能:(1)SP SP-2(S
3、P)CS SP SP-2(SP)IP(2)IP子程序偏移地址 CS子程序段地址,例:CALL BX CALL WORD PTR SI,段间直接调用,格式:CALL DWORD PTR DST,功能:(1)SP SP-2(SP)CS SP SP-2(SP)IP(2)IP(EA)CS(EA+2),例:CALL FAR PTR MULL,例:CALL DWORD PTR BX,从栈顶弹出一个字数据送入IP,7.2.2 返回指令,功能:从堆栈的栈顶弹出数据作为返回地址,含义:实现子程序执行完后要返回主程序的指令,分类:段内返回和段间返回,从栈顶弹出两个字数据分别送入IP和CS,类型,段内返回,RET,
4、格式:RET,功能:IP(SP)SPSP+2,RET n,格式:RET n,功能:IP(SP)SP SP+2 SP SP+n,段间返回,RET,格式:RET,功能:IP(SP)SP SP+2 CS(SP)SP SP+2,RET n,格式:RET n,功能:IP(SP)SP SP+2 CS(SP)SP SP+2 SP SP+n,7.3 子程序的定义、调用和返回,7.3.1 子程序定义,1.子程序定义伪指令,格式:子程序名 PROC NEAR/FAR RET 子程序名 ENDP,说明:(1)主程序和子程序在同一代码段中,定义为NEAR型。(2)主程序和子程序不在同一代码段中,定义为FAR型。(3)
5、可将主程序定义为FAR型,看作是DOS调用的一个过程。,2.子程序调用方法说明,包括:(1)子程序名;(2)子程序功能;(3)占用寄存器;(4)入口参数;(5)输出参数;(6)子程序调用示例。,3.现场保护和现场恢复,现场保护:在子程序的功能实现前把将要用到的寄存器中的原有内 容保存起来,现场恢复:子程序的功能实现后,将数据取出再送回原来的寄存器中,例:子程序SUB1中用到了寄存器AX、BX、CX、DX,则可能的现场保护和现场恢复如下:SUB1 PROC PUSH AX;现场保护 PUSH BX PUSH CX PUSH DX;子程序功能段 POP DX;现场恢复 POP CX POP BX
6、POP AX RET SUB1 ENDP,注意:现场保护应与现场恢复的顺序正好相反。,4.子程序的设计方法,(1)利用过程定义伪指令声明;(2)利用RET指令返回主程序;(3)对堆栈的压入和弹出操作要成对使用;(4)现场保护和现场恢复;(5)应安排在代码段的主程序之外,也可以放在主程序开始之前;(6)允许嵌套和递归;(7)可以与主程序共用一个数据段,也可以使用不同的数据段;(8)编写可以很灵活,但一定要保证堆栈操作的正确性;(9)处理好子程序和主程序间的参数传递问题(见7.4节);(10)提供必要的子程序说明信息。,子程序定义应用举例,【例7-1】求两个数的最大公约数子程序,子程序调用方法说明
7、:;子程序名:MCDST;功 能:求两个正整数的最大公约数;入口参数:AX和BX中存放两个正整数;出口参数:CX中存放求得的最大公约数;寄存器占用:使用AX、BX、CX、DX寄存器,CX中内容被改变,AX、BX、DX中的内容保持不变。,子程序清单:MCDST PROC NEAR/FAR PUSH AX;保护现场 PUSH BX PUSH DX AGAIN:XOR DX,DX;AX值扩展到DXAX中 DIV BX;商存入AX,余数存入DX AND DX,DX JZ EXIT;余数为0转EXIT,MOV AX,BX;余数不为0更新被除数 MOV BX,DX;更新除数 JMP AGAIN;继续循环
8、EXIT:MOV CX,BX;最大公约数存入CX POP DX;恢复现场 POP BX POP AX RET;返回主程序MCDST ENDP,7.3.2子程序的调用与返回,调用子程序指令:CALL,返回主程序指令:RET,【例7-2】以下程序用于计算=m!/(n!*(m-n)!)的值(m、n为自然数,且mn)。(假设阶乘乘积大小不超过两个字节),DATA SEGMENT M EQU 8 N EQU 3 RES DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,N CALL SUB1
9、;调子程序计算n!MOV BX,AX MOV CX,M CALL SUB1;调子程序计算m!DIV BX;m!/n!送 AX MOV BX,AX,MOV CX,M SUB CX,N CALL SUB1;调用子程序,计算(m-n)!XCHG BX,AX DIV BX;m!/n!/(m-n)!送AX MOV RES,AX MOV AH,4CH INT 21HSUB1 PROC;计算阶乘的子程序 MOV AX,1NEXT:MUL AX,CX LOOP NEXT RETSUB1 ENDPCODE ENDS END START,7.4 子程序的参数传递方法,入口参数:主程序调用子程序前,把要加工的数据传
10、给子程序,这 些数据称为入口参数,出口参数:子程序执行完后,要把执行结果传回主程序,这些数据 称为出口参数,参数传递方式:寄存器传递、堆栈传递和存储单元传递,7.4.1 通过寄存器传递参数,含义:主程序把入口参数送入某些寄存器,然后调用子程序,子程序中 直接使用存放入口参数的寄存器进行处理。子程序处理完数据,将执行结果作为出口参数存入寄存器中,回到主程序,主程序对 存放在寄存器中的出口参数进行相应处理,特点:方便、直观,适于参数较少的情况,注意:用于传递出口参数的寄存器不能进行现场保护和恢复,通过寄存器传递参数应用举例,【例7-3】以BCDBUF为首地址的内存中存放着若干单元的用BCD码表示的
11、十进制数,每一个单元中存放两位BCD码,要求把它们分别转换为ASCII码,存放在ASCBUF为首地址的单元中,且高4位BCD码转换成得ASCII码放在地址较高的单元。并且要求边转换边显示这些ASCII码,DATA SEGMENTBCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45HCOUNT EQU$-BCDBUF ASCBUF DB 20 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK STACKSTAPN DB 100 DUP(?)TOP EQU LENGTH STAPNSTACK ENDS CODE SEGMEN
12、T ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET BCDBUF;BCD码的内存区首地址 MOV DI,OFFSET ASCBUF;ASCII码的内存区首地址 MOV CX,COUNT;组合BCD码个数 CLD;DF=0,按地址递增方式 LP:LODSB;取一个组合BCD码 MOV BL,AL;暂存 AND AL,0FH;屏蔽高4位 OR AL,30H;BCD码低位转换为ASCII码 MOV
13、 DL,AL;存入DL,STOSB;存入ASCII码存储区 CALL DISP;调用显示子程序 MOV AL,BL;取回BCD码 PUSH CX;保存计数值 MOV CL,4 SHR AL,CL;取BCD码高4位 OR AL,30H;BCD码高位转为ASC码 MOV DL,AL;存入DL STOSB;存入ASCII码存储区 CALL DISP;调用显示子程序 POP CX;弹出计数值 LOOP LP;计数不为0则继续 MOV AH,4CH;为0则返回DOS INT 21H;子程序名:DISP;功能:显示ASCII码字符;入口参数:ASCII码在DL中DISP PROC;子程序定义开始 MOV
14、AH,2;显示ASCII码 INT 21H MOV DL,MOV AH,2 INT 21H RET;返回主程序DISP ENDPCODE ENDS END START,【例7-4】将给定的一组字数据X、Y代入Z=(X+Y)2-X)4公式中,计算相应的Z值,DATA SEGMENTX DW 5,3,8,9,2,5,3,4,7,1Y DW 1,5,7,0,4,3,1,4,8,1Z DW 10 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,X LEA DI,Y LEA BX
15、,Z MOV CX,Y-X SHR CX,1 REAPT:MOV AX,SI MOV DX,DI CALL SUBR MOV BX,AX ADD SI,2 ADD DI,2,ADD BX,2 LOOP REAPTEXIT:MOV AH,4CH INT 21HSUBR PROC NEAR PUSH BX PUSH CX MOV BX,AX ADD AX,DX;AX=X+Y SAL AX,1;AX=(X+Y)2 SUB AX,BX;AX=(X+Y)2-X MOV CL,2 SAL AX,CL;AX=(X+Y)2-X)4 POP CX POP BX RETSUBR ENDPCODE ENDS END
16、 START,7.4.2 通过堆栈传递参数,含义:主程序把入口参数压栈保存,然后调用子程序,子程序从堆栈中 弹出入口参数进行处理。子程序处理完数据后将执行结果作为出 口参数压栈保存,回到主程序,主程序从堆栈中弹出出口参数进 行相应处理,通过堆栈传递参数应用举例,【例7-5】将例7-3改为用堆栈传递参数,DATA SEGMENTBCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45HCOUNT EQU$-BCDBUF ASCBUF DB 20 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK STACKSTAPN DB 10
17、0 DUP(?)TOP EQU LENGTH STAPNSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV SS,AX MOV AX,TOP MOV SP,AX MOV SI,OFFSET BCDBUF MOV DI,OFFSET ASCBUF MOV CX,COUNT CLD LP:LODSB MOV BL,AL AND AL,0FH OR AL,30H MOV AH,0 PUSH AX,STOSB CALL DISP MOV AL,BL MOV DX,CX MOV C
18、L,4 SHR AL,CL OR AL,30H MOV CX,DX MOV AH,0 PUSH AX STOSB CALL DISP LOOP LP MOV AH,4CH INT 21H;子程序名:DISP;功能:显示ASCII码字符;入口参数:ASCII码在堆栈中 MOV AH,2 INT 21H MOV DL,MOV AH,2 INT 21H RETDISP ENDPCODE ENDS END START,【例7-6】利用堆栈传递参数,实现对2个已定义数组分别求和,DATA SEGMENTARYA DB 06H,23H,0AH,2FH,1EHSUMA DW?ARYB DB 0BH,21H,
19、11H,3AH,4EH,10HSUMB DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,SUMA-ARYA PUSH AX MOV AX,OFFSET ARYA PUSH AX CALL SUM MOV AX,SUMB-ARYB PUSH AX MOV AX,OFFSET ARYB PUSH AX CALL SUM MOV AH,4CH INT 21HCODE ENDSPROCE SEGMENT ASSUME CS:PROCE,DS:DATA,SUM PROC FAR PUSH
20、 AX PUSH BX PUSH CX PUSH BP MOV BP,SP PUSHF MOV CX,BP+14 MOV BX,BP+12 MOV AX,0 LOP1:ADD AL,BX ADC AH,0 INC BX LOOP LOP1 MOV BX,AX POPF POP BP POP CX POP BX POP AX RET 4SUM ENDPPROCE ENDS END START,7.4.3 通过存储单元传递参数,含义:主程序中把入口参数送入某些存储单元,然后调用子程序,子程 序中从存储单元取出入口参数进行处理。子程序处理完数据后,将执行结果作为出口参数存入存储单元中,回到主程序,主
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 子程序 设计
链接地址:https://www.desk33.com/p-257664.html