过程定义伪指令PROCENDP课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DOS系统功能调用都是用软中断指令INT 21H来实 现的。它具有90多个子功能的中断服务程序,它们通 过功能号AH来区分。它不依赖于具体的硬件系统。
2021/1/21
10
INT 2lH功能分类:
大致可以分为四个方面,即为
(1)设备管理(2)目录管理(3)文件管理 (4)内存管理、存取时间、存取终端矢量、终止程 序等。
在一些情况下既能选择DOS中断也能选择BIOS中断
来执行同样的功能。例如,打印机输出一个字符的功能, 可用DOS中断21H的功能5,也可用BIOS中断17H的功能 0。因为BIOS比DOS更靠近硬件。一般情况下,尽可能地 使用DOS功能,但在少数情况下必须使用BIOS功能。例 如,BIOS中断17H的功能2为读打印机状态,DOS就没有 等效的功能。
参见P411-415附录C.3
D0S系统功能调用的使用方法:
① AH←功能号;
② 设置该功能所要求的其他入口参数; ③ 执行INT 21H指令;
分析出口参数。
2021/1/21
11
INT 21H的几个最常用的功能
关于数据输入和输出我们这里只 讨论键盘输入和显示输出,调用系统功 能需要提供入口参数及所调用的功能 号,调用结束返回结果。
4.2.5 宏定义伪指令
宏指令的作用:如果需要多次使用同
一个程序段,可以将这个程序段定义为一个” 宏指令”,然后在需要时,可简单地用宏指 令名来代替这个程序段。
宏指令的格式为: <宏指令名> MACRO [形参表]
<宏定义体>
ENDM
2021/1/21
3
例: 两个数之和的宏定义和宏调用。 宏定义为:
BIOS(基本输入输出系统)功能调用包括:系统测试
、初始化引导、一部分中断矢量装入程序及外部设备的
服务程序,它们都固化在系统主板的Fra Baidu bibliotekOM中。它与系统
硬件直接相关。 参见P410-411附录C.1-2
➢ 系统功能调用的实现方式:用户程序在调用这些系统服 务程序时,不是用CALL命令,而是采用软中断指令 INT n来实现。
例:在显示器上显示一个字符‘A’ MOV AH, 2 MOV DL, ’A’ ;或MOV DL, 41H INT 21H
2021/1/21
16
(2)显示字符串(功能号=9) MOV AH, 9 LEA DX, <字符串> INT 21H
注意:被显示的字符串必须以’$’结束。
2021/1/21
17
例:在屏幕上显示:’HELLO,WORLD!’
DADD MACRO X,Y,Z MOV AX,X ADD AX,Y MOV Z,AX ENDM
上面宏定义中,X、Y、Z是形式参数。
调用宏DADD时可写为:
DADD DATA1,DATA2,SUM
上面宏调用中,DATA1,DATA2,SUM是实际参数,由
它们替换定义中的X、Y、Z,即形实结合。
2021/1/21
使用过程可以节省代码(源程序和目标程
序)占用的内存空间。
2021/1/21
6
• 宏展开:汇编程序会把宏调用按宏定义展开。
例如:宏定义为:
DISPLAY MACRO string
LEA DX,string MOV AH,9
INT 21H ENDM
程序中宏调用:
……
DISPLAY
ERROR_MESSAGE
✓调用子程序用CALL指令,返回调用程序用RET指令。 ✓子程序允许嵌套调用。 ✓进入子程序后首先要保护主程序的运行状态(标志位
DISPLAY
EXIT_MESSAGE
……
汇编后的结果:(带有+号的指令为宏展开后的结果)
……
+ LEA DX,ERROR_MESSAGE + MOV AH,9
+ INT 21H
+ LEA DX,EXIT_MESSAGE + MOV AH,9
+ INT 21H
2021/1/21
……
7
4.2.6 汇编结束伪指令END
➢内外两层循环;
➢每轮内循环使一个最小的数沉底,因为最小的数沉 底,下轮内循环就不用再比较最底下的数,所以内 循环的循环次数每一轮比上一轮要逐次减1;
➢外循环用于控制有多少轮内循环。若有n个数据,则 外循环次数为n-1。
2021/1/B21 SORT.ASM
31
4.4.5 子程序设计举例
掌握以下几点:
调用DOS功能的0AH号功能的程序段为: LEA DX,STR1 MOV AH,0AH INT 21H
此程序段最多从键盘接收10个按键(包括回车 )。
2021/1/21
15
2. DOS显示功能调用
(1) 在显示器上显示一个字符(功能号=2) MOV AH, 2 MOV DL, <要显示的字符> INT 21H
4
宏扩展
CALL DADD
DADD:
DADD yy
DADD MACRO xx
= CALL DADD
RET 或 DADD yy
ENDM
相 同
CALL DADD
DADD yy
主程序+过程(子程序)
主程序+宏定义
宏调用 2021/1/21 与 过程(子程序)调用 异同点示意图 5
宏调用 与 过程(子程序)调用 异同点
PUBLIC EXTRN
INCLUDE GROUP 等等
2021/1/21
9
4.3 DOS系统功能调用(高级调用)
➢ DOS系统功能调用的作用:系统功能调用——由操作系 统OS提供的一组实现特殊功能的子程序供程序员在程序 中调用,以减轻编程工作量。
➢ 系统功能调用的分类:系统功能调用有两种,一种称为 DOS功能调用,另一种称为BIOS功能调用。
用户定义的输入字符串的缓冲区格式
N1
N2
(预留的N1个字节的存储单元)
N1: 缓冲区长度(最大键入字符数) N2: 实际键入的字符数(不包括回车符)
2021/1/21
0DH
14
若用户键入的字符数(包括回车)≥定义的N1, 本功能调用将不再接收新的键入,且光标不再向右 移动。
例:设在数据段定义键盘缓冲区如下: STR1 DB 10,?,10 DUP(?)
一次。
初始化
循环体
循环控制
继续循环?
Y
2021/1/21
N
29
2. DO WHILE<条件> 结构
先判断条件,再执行。工作部分有可能一 次都不执行。
初始化
循环控制
继续循环?
Y
N
循环体
2021/1/21
30
注意:循环可以嵌套(多重循环),但多个循环 体之间不能交叉,控制条件不能混淆。
例:P179[例4-15],数据从大到小排序。 冒泡法——实例:3,7,2,8,6→8,7,6,3,2。
2021/1/21
26
IF…THEN…ELSE结构
条件1
条件满足 ?
条件2
处理P1
标号1: 处理P2
标号2:
2021/1/21
程序结构:
TEST/CMP指令 Jx 标号1
处理体P1
JMP 标号2 标号1:
处理体P2
标号2:其他指令 …
27
CASE结构
程序结构:
条件1成立 ?
Y
P1
标号1: N
条件2成立 ?
相同点:
都是一次定义,多次调用。
不同点:
① 执行形式:宏命令伪指令由宏汇编程序在汇编过理 中进行处理;而CALL、RET则是由CPU执行的指令。
② 汇编结果:宏命令伪指令汇编后被展开。
③ 执行速度:宏命令执行速度较快(因无调用转移)
④ 占用内存:宏指令简化了源程序,但不能简化目标 程序,并不节省内存单元;
Jx 标号3
;不满足转标号3
处理体P3…
JMP 标号n+1
标号3:TEST/CMP指令(测试条件4)
…
…
标号n+1:(公共出口)
20例21/1:/21 P178,[例4-14],统计成绩。流程图中虚线框内 28
4.4.4 循环程序
1.DO…UNTIL<条件> 结构 先执行,再判断条件。工作部分至少执行
对源程序汇编,生成.OBJ目标文件; 把.OBJ文件连接成.EXE执行文件。 3.源程序的基本结构:顺序(查表)、分支、循环、过程
2021/1/21
22
如何绘制程序框图(流程图)?
(1)用方框表示工作框,框中用简明语言 标明要完成的功能
(2) 用菱形框表示判断框
?
Y
2021/1/21
框中标明比较、判断和条件
;是,转YES
CMP AL,’N’ ;是’N’?
JZ NO
;是,转NO
JMP GET_KEY ;否则继续等待输入
YES: …
…
NO: …
2021/1/21
13
(2) 输入字符串(功能号=0AH) 此功能调用从键盘输入一串字符并把它
存入用户指定的缓冲区中。 MOV AH, 0AH LEA DX, <字符串缓冲区首地址> INT 21H
• 功能: 系统测试程序、初始化引导程序、一部分中断矢 量装入程序及外部设备的服务程序等。BIOS与系统硬 件有直接的依赖关系。
• 调用方法:BIOS调用通过多个软中断提供,具体的调
用方法为:
MOV AH,<功能号>
<设置入口参数,一般将参数放在寄存器中>
INT
<中断类型>
2021/1/21
19
BIOS中的几个主要中断类型如下: INT 10H——屏幕显示 INT 13H——磁盘操作 INT 14H——串行口操作 INT 16H——键盘操作 INT 17H——打印机操作
因此,对BIOS和DOS调用的选择原则是,无法使用
DOS功能调用或DOS没有提供而BIOS提供了功能的情况
下可2以021/1考/21 虑使用BIOS中断。
21
4.4 汇编语言程序设计基础
4.4.1 概述
1.程序质量(自学) 2.汇编语言程序设计的步骤:
1-定义问题,分析问题 2-建立数学模型,确定算法 3-画出程序框图(流程图) 4-分配内存工作单元和寄存器 5-根据框图,编写源程序 6-上机运行、调试程序。将源程序存成.ASM文件;
汇编语言源程序的最后,要加汇编 结束伪指令END,以使汇编程序结束汇 编。
格式: END [表达式]
END后跟的表达式通常就是程序第 一条指令的标号,指示程序的启动地址 (要执行的第一条指令的地址)。
2021/1/21
8
汇编语言的一个实例: EXAM.ASM
其它伪指令:
列表为指令
TITLE SUBTTL PAGE 连接伪指令
结束
用TD、DEBUG等调试程序进行调试。 命令格式:TD <可执行文件名.EXE>
25
4.4.2 顺序程序(p175-176,自学) 4.4.3 分支程序
IF…THEN结构
条件满足
N
?
Y
处理
标号:
程序结构: … 测试/比较指令 (TEST/CMP) 条件转移指令 (Jx 标号)
处理体
标号: 其他指令 …
Y
P2
… 标号2: N
条件n成立 ?
Y
Pn
标号n: N
Pn+1
标号n+1:
…
TEST/CMP指令(测试条件1)
Jx 标号1
;不满足转标号1
处理体P1…
JMP 标号n+1
标号1:TEST/CMP指令(测试条件2)
Jx 标号2
;不满足转标号2
处理体P2…
JMP 标号n+1
标号2:TEST/CMP指令(测试条件3)
;在数据段定义字符串:
DATA SEGMENT
STR1 DB ‘HELLO,WORLD!$’
DATA ENDS
;在代码段中进行显示输出
MOV AH,9
LEA DX,STR1
INT 21H
完整的程序: HELLO.ASM
2021/1/21
18
BIOS功能调用(低级调用)
• 定义:基本输入输出系统,是固化在EPROM中的一组 实现基本输入输出功能的子程序。
每类中断由包含许多子功能,调用时 通过功能号指定。
BIOS功能调用说明见p416附录D。
2021/1/21
20
BIOS中断调用与DOS功能调用的比较
BIOS中断程序处于DOS功能调用和硬件环境之间, 和DOS功能调用相比其优点是效率高,缺点是编程相对复
杂;和直接对硬件编程相比,优点是实现相对容易,缺点 是效率相对较低。
N
23
(3)用
框表示调用子程序或过程。
框中标明子程序名字(入口参数等)
(4)各框之间用直线连起来表示程序走向。 流程图的例子FlowChart.doc
2021/1/21
24
汇编语言上机过程:
开始
输入(修改)源程序
汇编
Y
有错 ?
N
连接
Y
有错 ?
N
运行
有错 ?
N
Y 查错
2021/1/21
用EDIT,NOTEPAD等任何文本编辑 器。源程序存为.ASM文件 用MASM宏汇编程序进行汇编。 汇编后生成.OBJ目标文件。 命令格式:MASM <源文件名.ASM>; 用LINK连接程序进行连接。 连接后生成.EXE可执行文件。 命令格式:LINK <目标文件名.OBJ>;
1. DOS键盘功能调用
(1) 从键盘输入一个字符(功能号=1)
MOV AH,1
INT 21H
<AL中有键入的字符>
2021/1/21
12
例:程序中有时需要用户对提示做出应答。
GET_KEY: MOV AH,1
;等待键入字符
INT 21H
;结果在AL中
CMP AL,’Y’ ;是’Y’?
JZ YES