- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;出口参数:无 出口参数:
MOV MOV AND OR MOV
通过寄存器传递参数应用举例——P135页 【7-3】 P135页 1 通过寄存器传递参数应用举例 P135
0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H
2010-4-27
12H 24H 96H 32H 31H 34H 32H 36H 39H
汇编语言程序设计
20102010-4-27
子程序的定义, 7.3 子程序的定义,调用和返回
2.现场保护和现场恢复 2.现场保护和现场恢复
例:子程序SUB1中用到了寄存器AX,BX,CX,DX,则可以在子程序中进行 子程序SUB1中用到了寄存器AX,BX,CX,DX, SUB1中用到了寄存器AX 现场的保护和恢复工作: 现场的保护和恢复工作: SUB1 PROC PUSH AX PUSH BX PUSH CX PUSH DX ┆ POP DX POP CX POP BX POP AX RET SUB1 ENDP
;入口参数:AX和BX中存放两个正整数; 入口参数: 除以 中存放两个正整数 和 2. 用M除以 中存放两个正整数; 除以N,求得余数 ,求得余数R 中存放求得的最大公约数; ;出口参数:CX中存放求得的最大公约数; 出口参数: 中存放求得的最大公约数
MOV BX,DX ;更新除数
JMP 3. 如果 如果R=0,N就是所求的最大公约数; AGAIN ;继续循环 就是所求的最大公约数; , 就是所求的最大公约数 PROC
子程序名: 子程序名: MAXN
2010-4-27
MAXN
7.4 子程序的参数传递方法
主程序 K: 调用子程序 调用子程序A DK:…… : 子程序A 子程序
J: 调用子程序 调用子程序A DJ:…… :
返回主程序
参数传递方式: 参数传递方式: 堆栈传递, 寄存器传递 ,堆栈传递,存储单元传递
汇编语言程序设计 20102010-4-27
;最大公约数存入CX 最大公约数存入CX
;恢复现场
习题1 根据以下子程序说明文件,编写一段子程序. 习题1:根据以下子程序说明文件,编写一段子程序. PROC 子程序功能: 子程序功能:求一组带符号字节数据 PUSH SI 中最大数 . PUSH CX 入口参数: 指向数组首地址 入口参数: SI指向数组首地址 MOV AL,[SI] CX为数据个数 为数据个数 NEXT1:CMP AL,[SI] 出口参数: 出口参数: AL为数组中最大数 为数组中最大数 JGE NEXT2 MOV AL,[SI] NEXT2:INC SI LOOP NEXT1 POP CX POP SI RET MAXN ENDP
汇编语言程序设计
20102010-4-27
【例7-1】求两个数的最大公约数子程序 】
;子程序名:MCDST 子程序名: 辗转相除法: 辗转相除法: ;功 求两个正整数的最大公约数; 能取两个正整数 和N( ; 1. :求两个正整数的最大公约数N<=M) 取两个正整数M和 ( )
MOV AX,BX
;更新被除数
汇编语言程序设计
;现场保护
;子程序处理部分
;现场恢复
恢复现场时寄存器出现的顺序应与 保护现场时寄存器出现的顺序相反
20102010-4-27
子程序的定义, 7.3 子程序的定义,调用和返回
3.子程序调用方法说明 3.子程序调用方法说明
包括: 包括: (1)子程序名; 子程序名; (2)子程序功能; 子程序功能; (3)占用寄存器; 占用寄存器; 入口参数; (4)入口参数; (5)输出参数; 输出参数; (6)子程序调用示例. 子程序调用示例.
MCDST
否则, - 否则,N->M, R->N.继续执行 MOV CX,BX - .继续执行2. EXIT: .
;保护现场 POP DX POP BX POP AX RET ;余数为0转EXIT 余数为0 MCDST ENDP
;最大公约数存入CX 最大公约数存入CX
PUSH AX PUSH BX PUSH DX
ASCBUF
CX寄存器发生冲突!!! 寄存器发生冲突!!! 寄存器发生冲突
CX CL, 4 BL, CL BL, 30H [DI+1], BL SI DI DI CX LP
1 通过寄存器传递参数
LP: ;子程序名:DISP 子程序名: 功能:显示ASCII码字符 ;功能:显示 码字符 入口参数: 码在DL中 ;入口参数:ASCII码在 中 码在
;恢复现场
AX值扩展到DXAX中 值扩展到DXAX AGAIN: XOR DX,DX ;AX值扩展到DXAX中 DIV BX AND DX,DX
2010-4-27
;商存入AX,余数存入DX 商存入AX,余数存入DX AX
;返回主程序
JZ EXIT
子程序的定义, 7.3 子程序的定义,调用和返回
5. 子程序的调用和返回
汇编语言程序设计 20102010-4-27
MCDST PROC NEAR/FAR DATA 7-2】假设在字缓冲区BUF中存放有四个正整数 SEGMENT 中存放有四个正整数, 【 - 】假设在字缓冲区 中存放有四个正整数,试编程 PUSH AX ;保护现场 BUF DW 720, 80, 1250, 25 求前两个数,后两个数的最大公约数M和 . 求前两个数,后两个数的最大公约数 和N. M DW ? PUSH BX N DW ? PUSH DX DATA ENDS AGAIN: XOR DX,DX CODE SEGMENT DIV BX ASSUME CS:CODE, DS:DATA AND DX,DX START: MOV AX, DATA JZ EXIT MOV DS, AX MOV MOV CALL MOV MOV MOV CALL MOV MOV 2010-4-27 INT AX, BUF BX, BUF+2 MCDST M, CX AX, BUF+4 BX, BUF+6 MCDST N, CX AH, 4CH 21H MOV AX,BX MOV BX,DX JMP AGAIN EXIT: MOV CX,BX POP DX POP BX POP AX RET MCDST ENDP CODE ENDS END START ;更新除数 ;继续循环
SP ← SP+2 SP ← SP+2
功能: ←(SP) SP ← SP+2 功能:IP ←(SP) ←(SP) SP ← SP+2 S ←(SP) SP ← SP + n
汇编语言程序设计 20102010-4-27
子程序的定义, 7.3 子程序的定义,调用和返回
子程序定义伪指令 现场保护与恢复 子程序调用方法说明 子程序的设计方法 (举例) 举例) 子程序的调用和返回(举例) 子程序的调用和返回(举例)
汇编语言程序设计
20102010-4-27
子程序的定义, 7.3 子程序的定义,调用和返回
1.子程序定义伪指令 1.子程序定义伪指令 格式: 格式: 子程序名〉 〈子程序名〉 PROC ┆ ┆ RET 子程序名〉 〈子程序名〉 ENDP NEAR / FAR
(1)主程序和子程序在同一代码段中,定义为NEAR型. 主程序和子程序在同一代码段中,定义为NEAR型 NEAR (2)主程序和子程序不在同一代码段中,定义为FAR型. 主程序和子程序不在同一代码段中,定义为FAR型 FAR
BCDBUF
LEA SI, BCDBUF LEA DI, ASCBUF MOV CX, 3 LP: MOV MOV AND OR MOV PUSH MOV SHR OR MOV INC INC INC POP LOOP AL, BL, AL, AL, [DI], [SI] AL 0FH 30H AL
汇编语言程序设计
返回主程序
20102010-4-27
7.1 子程序概述
一般子程序具有以下几个特性: 一般子程序具有以下几个特性: 功能独立 可重复性 通用性 可浮动性 可递归性和可重入性
汇编语言程序设计
20102010-4-27
7.1 子程序概述
在设计子程序时,应该解决如下几个问题: 在设计子程序时,应该解决如下几个问题: 主程序是怎样调用子程序的. 主程序是怎样调用子程序的. 子程序执行完后, 子程序执行完后,怎样才能返回到主程序的断 点处继续往下执行. 点处继续往下执行. 如何编写子程序. 如何编写子程序. 主程序与子程序之间用什么方式互相传递数据, 主程序与子程序之间用什么方式互相传递数据, 既主程序如何将数据传送给子程序, 既主程序如何将数据传送给子程序,子程序执行 后如何将结果返回给主程序. 后如何将结果返回给主程序.
20102010-4-27
汇编语言程序设计
7.2 子程序的调用和返回指令
子程序调用指令 CALL 段间直接调用 子程序名> 格式: CALL FAR PTR <子程序名 格式: 子程序名 功能: 功能 (1) SP← SP-2 (SP)← CS ) ) SP← SP-2 (SP)← IP ) 2) ←子程序入口地址的偏移地址 (2) IP ←子程序入口地址的偏移地址 CS←子程序入口地址的段地址 子程序入口地址的段地址 段间间接调用 格式: 格式 CALL DWORD PTR DST 功能: 功能 (1) SP← SP-2 (SP)← CS ) ) SP← SP-2 (SP)← IP ) (2) IP ←DST的低字内容 ) 的低字内容 CS←DST的高字内容 的高字内容
第七章 子程序设计
7.1 子程序概述 7.2 子程序调用和返回指令 7.3 子程序的定义,调用和返回(重点) 子程序的定义,调用和返回(重点) 7.4 子程序的参数传递方法 通过寄存器传递参数 通过堆栈传递参数 通过存储单元传递参数