- 18
- 0
- 约2.17千字
- 约 39页
- 2020-09-02 发布于福建
- 举报
第7章子程序设计
本章主要教学内容
1.子程序调用与返回指令
2.子程序设计的基本过程和设计方法
本章主要教学目的及要求
1.理解掌握子程序调用与返回指令;
2.掌握子程序设计的基本过程和设计方法;
3.能熟练设计子支程序
第7章子程序设计
7.1概述
7.1.1子程序设计的概念
含义:被独立出来的程序段称为子程序或过程
主程序与子程序之间的关系
主程序
子程序
CALL SUB I
SUBI
断点1:)
RET
CALL SUB2
(断点2:)
SUB2
RET
第7章子程序设计
7.1.2子程序的特性
(1)功能独立
(2)通用性
(3)可浮动性
(4)可递归和可重入性
7.1.3子程序的优点
(1)简化了程序设计过程,使程序设计时间大量节省。
(2)缩短了程序的长度,节省了计算机江编源程序的时间和程序的
存储空间
(3)增加了程序的可读性,便于对程序的修改、调试。
(4)方便了程序的模块化、结构化和自顶向下的程序设计。
7.2子程序调用和返回指令
第7章子程序设计
7.2.1子程序调用指令
格式: CALL DST/ NEAR PTR DST
段内直接调用功能:(1)SP←SP-2(SP):IP
(2)IP←IP+D16
段内调用
格式:(例
主程序和子穰奭程攣調码鞅PP-2(sP)-IP
(2)IP←(EA)
格式例: CALL BX
段间直接调用功CALW0DPR1
(2)IP←子程序偏移地址
段间调用
CS←子程序段地址
王程和子雨所能
CALL FAR PTR MULL
能:(1)SP←SP-2(SP)←CS
SP←SP-2(SP)←IP
(2)IP←(EA)
例: CALL DWORD PTR[BX]
第7章子程序设计
7.2.2返回指令
含义:实现子程序执行完后要返回主程序的指令
功能:从堆栈的栈顶弹出数据作为返回地址
分类:段内返回和段间返回
从样贵却能为顶弹出将数据分别送入P和(S
段内返回
RETn格式:RETn
功能:IP-(SP)SP←SP+2SP←SP+n
RET格式:RET
功能:IP←(SP)sP←SP+2
段间返回
Cs←(sP)SP←sP+2
n格式:RETn
功能:IP←(SP)SP←SP+2
Cs←(SP)SP←SP+2
SP+n
第7章子程序设计
7.3子程序的定义、调用和返回
7.3.1子程序定义
1.子程序定义伪指令
格式
〈子程序名〉 PROC NEAR/FAR
〈子程序名〉ENDP
说明:
(1)主程序和子程序在同一代码段中,定义为NEAR型
(2)主程序和子程序不在同一代码段中,定义为FAR型
(3)可将主程序定义为FAR型,看作是D0S调用的一个过程
第7章子程序设计
2.子程序调用方法说明
包括
(1)子程序名;
(2)子程序功能;
(3)占用寄存器;
(4)入口参数;
(5)输出参数
(6)子程序调用示例
第7章子程序设计
3.现场保护和现场恢复
现场保护:在子程序的功能实现前把将要用到的寄存器中的原有内
容保存起来
现场恢复:子程序的功能实现后,将数据取出再送回原来的寄存器中
注意:现场德蓓度好相反,D
SUBI PROC
PUSH A
;现场保护
PUSH BX
PUSH CX
子程序功能段
;现场恢复
POP CX
POP BX
POP AX
RET
SUBI ENDP
第7章子程序设计
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中的内容保持不变。
BX:余数不为0更新被除数
CDST PROC NEAR/ FAR
MOV BX DX:更新除数
保护现场
ASH BX
E
原创力文档

文档评论(0)