收藏 分享(赏)

汇编语言子程序设计.ppt

上传人:scg750829 文档编号:7272290 上传时间:2019-05-12 格式:PPT 页数:39 大小:461KB
下载 相关 举报
汇编语言子程序设计.ppt_第1页
第1页 / 共39页
汇编语言子程序设计.ppt_第2页
第2页 / 共39页
汇编语言子程序设计.ppt_第3页
第3页 / 共39页
汇编语言子程序设计.ppt_第4页
第4页 / 共39页
汇编语言子程序设计.ppt_第5页
第5页 / 共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,功能

3、:(1) SP SP-2(SP) 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 返回指令,功能:从堆栈的栈顶弹出数据作为返回地址,含义:实现子程序执行完后要返回主程序的指令,分类:段内返回和段间返回,从栈顶弹出两个字数据分

4、别送入IP和CS,类型,段内返回,RET,格式: RET,功能:IP(SP) SPSP+2,RET n,格式: RET n,功能:IP(SP) SP SP+2 SP SP+n,段间返回,RET,格式: RET,功能:IP (SP) SP SP+2CS (SP) SP SP+2,RET n,格式: RET n,功能:IP (SP) SP SP+2CS (SP) SP SP+2 SP SP+n,7.3 子程序的定义、调用和返回,7.3.1 子程序定义,1.子程序定义伪指令,格式:子程序名 PROC NEAR/FARRET子程序名 ENDP,说明:(1)主程序和子程序在同一代码段中,定义为NEAR型

5、。(2)主程序和子程序不在同一代码段中,定义为FAR型。(3)可将主程序定义为FAR型,看作是DOS调用的一个过程。,2.子程序调用方法说明,包括: (1)子程序名; (2)子程序功能; (3)占用寄存器; (4)入口参数; (5)输出参数; (6)子程序调用示例。,3.现场保护和现场恢复,现场保护:在子程序的功能实现前把将要用到的寄存器中的原有内容保存起来,现场恢复:子程序的功能实现后,将数据取出再送回原来的寄存器中,例:子程序SUB1中用到了寄存器AX、BX、CX、DX,则可能的现场保护和现场恢复如下:SUB1 PROCPUSH AX ;现场保护PUSH BXPUSH CXPUSH DX

6、;子程序功能段POP DX ;现场恢复POP CXPOP BXPOP AXRETSUB1 ENDP,注意:现场保护应与现场恢复的顺序正好相反。,4.子程序的设计方法,(1)利用过程定义伪指令声明; (2)利用RET指令返回主程序; (3)对堆栈的压入和弹出操作要成对使用; (4)现场保护和现场恢复; (5)应安排在代码段的主程序之外,也可以放在主程序开始之前; (6)允许嵌套和递归; (7)可以与主程序共用一个数据段,也可以使用不同的数据段; (8)编写可以很灵活,但一定要保证堆栈操作的正确性; (9)处理好子程序和主程序间的参数传递问题(见7.4节); (10)提供必要的子程序说明信息。,子

7、程序定义应用举例,【例7-1】求两个数的最大公约数子程序,子程序调用方法说明:;子程序名:MCDST;功 能:求两个正整数的最大公约数;入口参数:AX和BX中存放两个正整数;出口参数:CX中存放求得的最大公约数;寄存器占用:使用AX、BX、CX、DX寄存器,CX中内容被改变,AX、BX、DX中的内容保持不变。,子程序清单: MCDST PROC NEAR/FARPUSH AX ;保护现场PUSH BX PUSH DX AGAIN:XOR DX,DX ;AX值扩展到DXAX中DIV BX ;商存入AX,余数存入DXAND DX,DXJZ EXIT ;余数为0转EXIT,MOV AX,BX ;余数

8、不为0更新被除数MOV BX,DX ;更新除数JMP AGAIN ;继续循环EXIT:MOV CX,BX ;最大公约数存入CXPOP DX ;恢复现场POP BX POP AX RET ;返回主程序 MCDST ENDP,7.3.2子程序的调用与返回,调用子程序指令:CALL,返回主程序指令:RET,【例7-2】以下程序用于计算=m!/(n!*(m-n)!)的值(m、n为自然数,且mn)。(假设阶乘乘积大小不超过两个字节),DATA SEGMENTM EQU 8 N EQU 3RES DW ? DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START

9、:MOV AX,DATAMOV DS,AXMOV CX,NCALL SUB1 ;调子程序计算n! MOV BX,AXMOV CX,MCALL SUB1 ;调子程序计算m!DIV BX ;m!/n!送 AXMOV BX,AX,MOV CX,MSUB CX,NCALL SUB1 ;调用子程序,计算(m-n)!XCHG BX,AXDIV BX ;m!/n!/ (m-n)! 送AXMOV RES,AXMOV AH,4CHINT 21H SUB1 PROC ;计算阶乘的子程序MOV AX,1 NEXT:MUL AX,CXLOOP NEXTRET SUB1 ENDP CODE ENDSEND START,

10、7.4 子程序的参数传递方法,入口参数:主程序调用子程序前,把要加工的数据传给子程序,这些数据称为入口参数,出口参数:子程序执行完后,要把执行结果传回主程序,这些数据称为出口参数,参数传递方式:寄存器传递、堆栈传递和存储单元传递,7.4.1 通过寄存器传递参数,含义:主程序把入口参数送入某些寄存器,然后调用子程序,子程序中直接使用存放入口参数的寄存器进行处理。子程序处理完数据,将执行结果作为出口参数存入寄存器中,回到主程序,主程序对存放在寄存器中的出口参数进行相应处理,特点:方便、直观,适于参数较少的情况,注意:用于传递出口参数的寄存器不能进行现场保护和恢复,通过寄存器传递参数应用举例,【例7

11、-3】以BCDBUF为首地址的内存中存放着若干单元的用BCD码表示的十进制数,每一个单元中存放两位BCD码,要求把它们分别转换为ASCII码,存放在ASCBUF为首地址的单元中,且高4位BCD码转换成得ASCII码放在地址较高的单元。并且要求边转换边显示这些ASCII码,DATA SEGMENT BCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45H COUNT EQU $-BCDBUF ASCBUF DB 20 DUP(?) DATA ENDS STACK SEGMENT PARA STACK STACK STAPN DB 100 DUP (?)

12、TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENTASSUME CS:CODE, DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV 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

13、 ;屏蔽高4位OR AL,30H ;BCD码低位转换为ASCII码MOV 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 ;存入DLSTOSB ;存入ASCII码存储区CALL DISP ;调用显示子程序POP CX ;弹出计数值LOOP LP ;计数不为0则继续MOV AH,4CH;为0则返回DOSINT 21H;子程序名:DISP;功能:显示ASCII码字符;

14、入口参数:ASCII码在DL中 DISP PROC ;子程序定义开始MOV AH,2 ;显示ASCII码INT 21HMOV DL, MOV AH,2 INT 21HRET ;返回主程序 DISP ENDP CODE ENDSEND START,【例7-4】将给定的一组字数据X、Y代入Z=(X+Y)2-X)4公式中,计算相应的Z值,DATA SEGMENT X DW 5,3,8,9,2,5,3,4,7,1 Y DW 1,5,7,0,4,3,1,4,8,1 Z DW 10 DUP (?) DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV

15、 AX,DATAMOV DS,AXLEA SI,XLEA DI,YLEA BX,ZMOV CX,Y-XSHR CX,1 REAPT:MOV AX,SIMOV DX,DICALL SUBRMOV BX,AXADD SI,2ADD DI,2,ADD BX,2LOOP REAPT EXIT:MOV AH,4CHINT 21H SUBR PROC NEARPUSH BX PUSH CXMOV BX,AXADD AX,DX ;AX=X+YSAL AX,1 ;AX=(X+Y)2SUB AX,BX ;AX=(X+Y)2-XMOV CL,2SAL AX,CL ;AX=(X+Y)2-X)4 POP CXPOP

16、BXRET SUBR ENDP CODE ENDSEND START,7.4.2 通过堆栈传递参数,含义:主程序把入口参数压栈保存,然后调用子程序,子程序从堆栈中弹出入口参数进行处理。子程序处理完数据后将执行结果作为出口参数压栈保存,回到主程序,主程序从堆栈中弹出出口参数进行相应处理,通过堆栈传递参数应用举例,【例7-5】将例7-3改为用堆栈传递参数,DATA SEGMENT BCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45H COUNT EQU $-BCDBUF ASCBUF DB 20 DUP(?) DATA ENDS STACK SEGME

17、NT PARA STACK STACK STAPN DB 100 DUP (?) TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET BCDBUFMOV DI,OFFSET ASCBUF MOV CX,COUNTCLDLP:LODSBMOV BL,ALAND AL,0FHOR AL,30HMOV AH,0PUSH AX,STOSBCALL DISPMOV AL,

18、BL MOV DX,CXMOV CL,4 SHR AL,CLOR AL,30H MOV CX,DX MOV AH,0 PUSH AXSTOSBCALL DISPLOOP LPMOV AH,4CHINT 21H;子程序名:DISP;功能:显示ASCII码字符;入口参数:ASCII码在堆栈中MOV AH,2INT 21HMOV DL, MOV AH,2 INT 21HRET DISP ENDP CODE ENDSEND START,【例7-6】利用堆栈传递参数,实现对2个已定义数组分别求和,DATA SEGMENT ARYA DB 06H,23H,0AH,2FH,1EH SUMA DW ? ARY

19、B DB 0BH,21H,11H,3AH,4EH,10H SUMB DW ? DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,SUMA-ARYAPUSH AX MOV AX,OFFSET ARYAPUSH AX CALL SUM MOV AX,SUMB-ARYBPUSH AX MOV AX,OFFSET ARYBPUSH AX CALL SUM MOV AH,4CH INT 21H CODE ENDS PROCE SEGMENTASSUME CS:PROCE,DS:DATA,SUM PR

20、OC FARPUSH AXPUSH BXPUSH CXPUSH BPMOV BP,SPPUSHFMOV CX,BP+14MOV BX,BP+12MOV AX,0LOP1:ADD AL,BXADC AH,0 INC BXLOOP LOP1MOV BX,AXPOPFPOP BPPOP CXPOP BXPOP AXRET 4 SUM ENDP PROCE ENDSEND START,7.4.3 通过存储单元传递参数,含义:主程序中把入口参数送入某些存储单元,然后调用子程序,子程序中从存储单元取出入口参数进行处理。子程序处理完数据后,将执行结果作为出口参数存入存储单元中,回到主程序,主程序对存放在存储

21、单元中的出口参数进行相应处理,通过存储单元传递参数应用举例,【例7-7】将例7-3改为用存储单元传递参数,DATA SEGMENT BCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45H COUNT EQU $-BCDBUF ASCBUF DB 20 DUP(?) DATA ENDS STACK SEGMENT PARA STACK STACK STAPN DB 100 DUP (?) TOP EQU LENGTH STAPN STACK ENDS CODE SEGMENTASSUME CS:CODE, DS:DATA START:MOV AX,DA

22、TAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET BCDBUFMOV DI,OFFSET ASCBUFMOV CX,COUNTCLDLP:LODSBMOV BL,ALAND AL,0FHOR AL,30HSTOSB CALL DISP,MOV AL,BLPUSH CX MOV CL,4 SHR AL,CLOR AL,30HSTOSBCALL DISPPOP CXLOOP LPMOV AH,4CHINT 21H ;子程序名:DISP;功能:显示ASCII码字符;入口参数:ASCII码在堆栈中 DIS

23、P PROC ;子程序定义开始PUSH DIDEC DIMOV DL,DIMOV AH,2INT 21HPOP DIMOV DL, MOV AH,2 INT 21HRET DISP ENDP CODE ENDSEND START,【例7-8】,DATA SEGMENT XBUF DW x YBUF DW y FBUF DW ? BUF DW ?;入口参数单元 ROOT DW ?;出口参数单元 DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,XBUF MOV BUF,AX CALL SQR

24、OOT MOV CX,ROOT MOV AX,YBUF MOV BUF,AXCALL SQROOT MOV AX,ROOT ADD AX,CX,MOV FBUF,AX MOV AH,4CH INT 21H SQROOT PROC NEARMOV DX,BUF XOR AX,AX AND DX,DX JZ SQR2 SQR1:MOV BX,AXSHL BX,1INC BXSUB DX,BX JC SQR2INC AXJMP SQR1SQR2:MOV ROOT,AXRET SQROOT ENDP CODE ENDSEND START,7.5 子程序的嵌套与递归,子程序的嵌套调用:子程序内包含有另外

25、子程序的调用,子程序的递归调用:子程序直接或间接地调用其本身,7.5.1 子程序的嵌套调用,图7-4表示了两层嵌套的程序结构,子程序的嵌套应用举例,【例7-9】显示以“0”结尾字符串的嵌套子程序,DATA SEGMENT MSG DB WELL,I MADE IT!,0 DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXCLD MOV SI,OFFSET MSGCALL DPSTRIMOV AH,4CHINT 21H DPSTRI PROCPUSH AXDPS1:LODSBCMP AL,0,JZ DPS

26、2CALL DPCHARJMP DPS1DPS2:POP AX RET DPSTRI ENDP DPCHAR PROCPUSH AXMOV DL,ALMOV AH,2H INT 21HPOP AXRETDPCHAR ENDPCODE ENDSEND START,7.5.2 子程序的递归调用,子程序的递归应用举例,【例7-10】确定变量NUM的阶乘,把结果存入变量FNUM单元(变量NUM的值大于0小于9)。,DATA SEGMENT NUM DB 4 FNUM DW ? DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAM

27、OV DS,AXPUSH CXMOV AH,0MOV AL,NUMCALL FACTMOV FNUM,AXPOP CXMOV AH,4CH,INT 21HFACT PROC NEARPUSH AXSUB AX,1 JNZ F_CONTPOP AXJMP RETURN F_CONT:CALL FACTPOP CXMUL CL RETURN:RETFACT ENDPCODE ENDSEND START,递归分析,7.6 子程序设计举例,7.6.1 输入输出子程序,1.有关I/O的DOS功能调用,含义:编了号的、可由汇编语言的源程序调用的I/O子程序,调用方法:把子程序的号(或称系统功能调用号)送至

28、AH,把子程序规定的入口参数送至指定的寄存器,然后由中断指令INT 21H来实现调用,2.输入输出子程序设计,(1)输入子程序,子程序名:SUBIN 功 能:从标准输入设备(一般为键盘)输入一个字符 入口参数:无 出口参数:输入字符的ASCII码存入AL寄存器,程序清单: SUBIN PROCMOV AH,01HINT 21HRET SUBIN ENDP,(2)输出子程序,子程序名:SUBOUT 功 能:从标准输出设备(一般为屏幕)输出一个字符 入口参数:输出的字符的ASCII码送寄存器AL 出口参数:在屏幕上显示单个字符,程序清单: SUBOUT PROCPUSH DXMOV DL,ALMO

29、V AH,2INT 21HPOP DXRET SUBOUT ENDP,输入输出子程序应用举例,【例7-11】在CRT上连续输出字符09,子程序名:CRT09 功 能:在CRT上连续输出字符09 入口参数:寄存器BL中不断累加得到的字符 出口参数:在CRT上连续输出字符09,CRT09 PROC NEAR/FARBEGIN:PUSH DSMOV AX,0PUSH AXMOV BL,OFFHPUSH BXMOV CX,10GOON:MOV DL,20HCALL SUBOUTPOP BXMOV AL,BLINC AL DAAAND AL,0FHMOV BL,ALPUSH BXOR AL,30HCAL

30、L SUBOUTLOOP GOONPOP DSRET CRT09 ENDP,7.6.2 代码转换子程序,1.十六进制数的ASCII码转换成二进制数,转换规律:数字字符09进行转换时,对ASCII码的高4位清0就可以了;而AF进行转换时,要减37H(af则减57H)。,【例7-12】将四位十六进制数(ASCII码)转换为十六位二进制数,子程序名:HEX16IN。 功 能:从输入设备输入四位16进制数,将其转换为16位2进制数。 入口参数:从输入设备得到ASCII码表示的16进制数的各位,有效数字为0-9和A-F。 出口参数:一个16位2进制数存放在DX寄存器中,JL HEX3CMP AL,0FH

31、JG HEX3HEX2:CBWMOV CL,4SAL DX,CLADD DX,AXDEC BLJNZ HEX1HEX3:POP AXPOP CXRET HEX16IN ENDP,HEX16IN PROC NEAR/FARPUSH CX PUSH AXPUSH BXMOV DX,0MOV BL,4HEX1:CALL SUBINSUB AL,30HJL HEX3CMP AL,9JLE HEX2SUB AL,7CMP AL,0AH,2.二进制数转换成十进制数,转换规律:对要转换的16位二进制数进行一系列减法运算:能够减10000的次数,就是十进制的万位,余下的数能够减1000的次数,就是十进制的千位

32、,依此类推。,【例7-13】将16位二进制数转换为十进制数的ASCII码形式,子程序名:DEC16OUT。 功 能:将DX寄存器中的16位2进制数转换为10进制数的ASCII码并输出。 入口参数:16位2进制数存放在DX中。 出口参数:以10进制形式输出这个16位的2进制数。,DEC16OUT PROC NEAR/FARPUSH SIPUSH DI PUSH CXPUSH AXMOV CX,5LEA SI,DDECLEA DI,TBUFFPUSH CXMOV AX,DXCONV:MOV BL,0RRR:SUB AX,SIJC NEXTINC BLJMP RRRNEXT:ADD AX,SI,OR

33、 BL,30HMOV DI,BLADD SI,2INC DI LOOP CONVPOP CXCRT1:DEC DIMOV AL,DICALL SUBOUTLOOP CRT1POP AXPOP CXPOP DIPOP SIRETDEC16OUT ENDP,3.十进制数转换成二进制数,转换规律:BCD码表示的十进制数转换为二进制数,算法为: (010 + 千位数)10 + 百位数)10 + 十位数)10 + 个位数,【例7-14】将4位BCD码转换为二进制数,4位BCD码存放于字单元DBCD中,结果存于DBIN单元中。,子程序名:BCDEC。 功 能:将DX寄存器中的4位BCD码转换为二进制数。

34、入口参数:4位BCD码数存放在DX中。 出口参数:结果以二进制形式存放在DBIN单元,BCDEC PROC NEAR/FARPUSH DI PUSH CXPUSH AXPUSH BXMOV CX,4LEA DI, DBIN MOV BX,DX MOV AX,0R1:PUSH CX MOV CL,4ROL BX,CLPOP CX,MUL 10PUSH BXAND BX,000FHADD AX,BXPOP BXLOOP R1MOV DBIN,AXPOP BXPOP AXPOP CXPOP DIRET BCDEC ENDP,7.6.3 多位数运算子程序,1.多位数加法子程序,【例7-16】多字节数相

35、加,子程序名:MBINADD。 功 能:将两个多字节2进制数相加。 入口参数:SI、DI分别指向两个加数的首地址,BX指向和的首地址,CX中存放多字节的长度。 出口参数:BX指向和的首地址。,MBINADD PROC NEAR/FARPUSH AX PUSH BXCLC MBINADD1:MOV AL,SIADC AL,DIMOV BX,AL INC SI INC DI INC BX LOOP MBINADD1POP BX POP AXRETMBINADD ENDP,说明:多字节数减法子程序与加法程序类似,把ADC换成SBB即可,1.多位数乘法子程序,【例7-17】多字节数相乘,DATA SE

36、GMENT BUFA DB 34H,5AH,6BH BUFB DB 10H,26H,49H CNT EQU $-BUFB BUFC DB 2*CNT DUP(?) DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFAMOV DI,OFFSET BUFBMOV BX,OFFSET BUFCCALL MBINMULMOV SI,OFFSET BUFCCALL MBINDISPMOV AH,4CHINT 21H,;子程序名:MBINMUL。 ;功 能:两个多字节2进制数相乘。

37、;入口参数:SI、DI分别指向两个乘数的首地址,BX指向乘积的首地址,乘数的长度为CNT,乘积的长度为2*CNT。 ;出口参数:BX指向乘积的首地址。,MBINMUL PROC NEAR ;MBINMUL子程序定义PUSH BX ;保护现场PUSH AX PUSH CX PUSH BX ;保存BX的原有值MOV AL,0 ;AL 0MOV CX,2*CNT ;乘积区的长度 MBINMUL1:MOV BX,AL ;乘积区清0INC BX LOOP MBINMUL1 POP BX ;恢复BX的原有值MOV CX,CNT ;外层循环次数 MBINMUL2:PUSH CXMOV DL,SI INC S

38、IPUSH BX ;保存BX的值PUSH DI ;保存DI的值MOV CX,CNT,MBINMUL3:MOV AL,DIINC DIMUL DLADD BX,ALINC BXADC BX,AHLOOP MBINMUL3POP DIPOP BXINC BXPOP CXLOOP MBINMUL2POP CXPOP AX POP BX RETMBINMUL ENDP ;子程序名:MBINDISP。 ;功 能:以16进制形式输出乘积。 ;入口参数:SI指向乘积的首地址。 ;出口参数:SI指向乘积的首地址 MBINDISP PROC NEARPUSH CXPUSH DXPUSH SI MOV CX,2*

39、CNTADD SI,2*CNT-1MDISP1:MOV DL,SI,MOV CL,4SHR DL,CL CALL HEXDISPMOV DL,SIAND DL,OFHCALL HEXDISPDEC SILOOP MDISP1POP SIPOP DX POP CX RET MBINDISP ENDP ;子程序名:HEXDISP。 ;功 能:输出1位16进制数。 ;入口参数:DL中存放要输出的数。HEXDISP PROC NEARCMP DL,9JBE HEXDISP1ADD AL,7HEXDISP1:ADD DL,30H MOV AH,2INT 21H RETHEXDISP ENDPCODE E

40、NDSEND START,本章小结,本章主要介绍了子程序的概念、定义格式、特性;子程序的调用和返回指令;子程序的设计、参数传递方法、嵌套和递归等内容,并给出了一些较为综合的子程序示例。把可以多次调用、能完成特定操作功能的程序段编写成独立的程序模块称为子程序。调用这些子程序的程序称为主程序。子程序设计方法可以节省编程的工作量和节省存储空间。一个子程序应具备重复性、通用性、可浮动性、可递归和可重入性。主程序调用子程序要通过调用指令来实现;子程序执行完了要返回主程序,这个功能由返回指令实现。一个完整的子程序,应包括子程序调用方法说明、保护现场和恢复现场、子程序定义等部分。子程序调用方法说明包括子程序名、子程序功能、占用寄存器、入口参数、输出参数、子程序调用示例等内容。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报