汇编 第六章子程序设计.ppt
文本预览下载声明
第六章 子程序的设计 第六章 子程序的设计 本章重点: ? 子程序的概念和特性 ? 子程序的设计与调用 ? 子程序的参数传递方法 第六章 子程序的设计 引例:统计字符串中字符A的个数,存入RESU字节单元, 并以16进制显示。 6.1 子程序的概念与特性 二、 子 程 序 的 特 性 6.2 子程序调用和返回指令 二、段内间接调用 三、段间直接调用 四、段间间接调用 例6.1:段内直接调用,显示字符‘TA’。 例6.2:段间直接调用,显示字符‘TA’。 6.2.2 返回指令 三、段间返回 6.3 子程序的结构形式 6.3.2 现场保护和恢复 现场保护:在子程序功能实现前,把将要用到的寄存器的 原有内容保存起来。 6.4 子程序的设计和调用 6.4.2 子程序设计 6.4.3 子程序调用 例6.5 :设在BUF1、 BUF2、 BUF3、 BUF4四个字单元各存放一个正整数a、b、c、d,编程求a、b的最大公约数和c、d的最大公约数,分别存放在RESU和RESU+2开始的内存区。 6.4.4 主程序与子程序参数传递方式 一、通过寄存器传递参数 P135例7-3:以BCDBUF开始的内存区存放若干压缩BCD码,把它们转换成ASCII码,存放在以ASCBUF开始的内存区,高位放在较高的单元,要求边转换边显示。要求:显示用子程序实现,入口参数DL存放显示字符的ASCII码。 二、通过堆栈传递参数 P139例7-5:以BCDBUF开始的内存区存放若干压缩BCD码,把它们转换成ASCII码,存放在以ASCBUF开始的内存区,高位放在较高的单元,要求边转换边显示。要求:显示用子程序实现,入口参数DL,存显示字符的ASCII码。 三、通过存储单元传递参数 6.5 子程序设计举例 一、输入子程序 二、输出子程序 例6.9在显示器上连续输出0~9 三、十六进制数的ASCII码→二进制 四、十六位二进制数→十进制数输出 例6.12将字节单元中的2进制数转换成10进制数输出。 五、十进制数→二进制数 习 题 编写子程序,将字节单元中的2进制数转换成10进制数输出。 P140例7.6 :利用堆栈传递参数,实现对数组求和 例6.6 :编写子程序实现字节数据块传送。 入口参数:SI指向源块首地址,DI指向目的块首地址, CX指向数据块长度。 出口参数:SI指向源块首地址,DI指向目的块首地址。 DATA SEGMENT BUF1 DB 34H, 18H, 61H, 01H CNT EQU $-BUF1 BUF2 DB CNT DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV SI, OFFSET BUF1 ;源串首地址 MOV DI, OFFSET BUF2 ;目的串首地址 MOV CX, CNT ;长度 CALL MOVD ;调用子程序 MOV AH, 4CH INT 21H ;返回DOS 设置入口参数 MOVD PROC NEAR ;子程序定义开始 PUSH AX PUSH SI PUSH DI ;现场保护 LOP1: MOV AL, [SI] ;取源串中一数据 MOV [DI], AL ;存入目的串 INC SI ;修改源串指针 INC DI ;修改目的串指针 LOOP LOP1 ;没传完,继续 POP DI POP SI
显示全部