第四章 宏汇编语言程序设计

59
第第第 第第第 第第第第第第第第第 第第第第第第第第第 第第第第第第第第 第第第第第第第第第第第 : 1 第第第第 : 第第第第第第第第第 第第第第第第第第 2 第第第第 :vb vc++ C# java 第第第3 第第第第 : 第第第第第第第 第第第第第 第第第第第第 、、 第第第第第 第第8086 第第第第 MASM6.X 第第

Upload: niel

Post on 21-Jan-2016

188 views

Category:

Documents


0 download

DESCRIPTION

第四章 宏汇编语言程序设计. 程序设计语言概述 用于程序设计的语言分为 : 1 、 机器语言 : 用二进制表示的程序,能被机器直接识别 。 2 、 高级语言 : v b 、vc++、C#、java 等语言 。 3 、 汇编语言 : 用指令的助记符、符号地址、标号等编写成 ,面向机器的语言,8086使用的是 MASM6.X版本。. 汇编语言源程序的框架结构 例 4.1 打印输出字符串“ THIS IS A SAMPLE PROGRAM.”; DATA SEGMENT ;数据段 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章 宏汇编语言程序设计

第四章第四章 宏汇编语言程序设计宏汇编语言程序设计

程序设计语言概述

用于程序设计的语言分为 :

1、机器语言 :用二进制表示的程序,能被机器直接识别。

2、高级语言 :vb 、 vc++ 、 C# 、 java等语言。 3、汇编语言 :用指令的助记符、符号地址、标号等编写成,面向机器的语言, 8086 使用的是

MASM6.X 版本。

Page 2: 第四章 宏汇编语言程序设计
Page 3: 第四章 宏汇编语言程序设计

汇编语言源程序的框架结构

例 4.1 “打印输出字符串 THIS IS A SAMPLE PROGRAM.”; DATA SEGMENT ; 数据段 DA1 DB‘THIS IS A SAMPLE PROGRAM’ DB 0DH,0AH,’$’ DATA ENDS STACK SEGMENT STACK ‘STACK’ ST1 DB 100 DUP(?) STACK ENDS CODE SEGMNET ;代码段 MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK

Page 4: 第四章 宏汇编语言程序设计

START: MOV AX , STACK ;送堆栈段地址 MOV SS,AX PUSH DS; 为程序执行完毕返回 DOS 做准备 MOV AX,0 PUSH AX MOV AX,DATA; 送数据段地址 MOV DS,AX MOV AH,9 ; DOS9 号功能调用,显示字符串 MOV DX,OFFSET DA1 INT 21H RET MAIN ENDP CODE ENDS END START

Page 5: 第四章 宏汇编语言程序设计

一个完整的汇编程序应该包含以下几个部分: 1. 段定义 ( 代码段、数据段、堆栈段 ) 段名 SEGMENT ...... 段名 ENDS 2. 段分配 ASSUME CS: 段名, DS: 段名,SS: 段名, ES: 段名 3. 设置段地址 ( 代码段由机器分配 ) MOV AX , STACK ;送堆栈段地址 MOV SS,AX MOV AX,DATA ; 送数据段地址 MOV DS,AX

Page 6: 第四章 宏汇编语言程序设计

4. 返回 DOS 语句及程序结束( 1 )在程序开始部分的堆栈段设置后面写:• PUSH DS;• MOV AX,0• PUSH AX• 将 DS 的内容及 0 作为段地址和偏移地址入

栈,在程序结束时返回 DOS.

( 2 )在程序结束前使用 DOS 功能调用指令: MOV AX,4C00H INT 21H

Page 7: 第四章 宏汇编语言程序设计

• 5. 过程调用 ( 需要时 )• 过程名 PROC FAR(NEAR)• ......• 过程名 ENDP• 6. 结尾语句• END• 或 END START

Page 8: 第四章 宏汇编语言程序设计

源程序的结构和特点1 、由若干逻辑段组成 ,各段都有一个段名 ,由段 定义语句来进行定义和说明。2、在代码段的起始处,用 ASSUME命令来说明各个

段寄存器与逻辑段的关系。3 、每个逻辑段由若干行汇编语句组成,每行只有 一条语句,且不超过 128个字符 ,整个源程序用 END结束。4 、每一条语句由最多由 4个字段组成 ,每个字段 用空格分开。5 、每个源程序在代码段中都必须有返回DOS 操作系统的指令语句 ,保证程序执行完毕 可以返回DOS系统。

Page 9: 第四章 宏汇编语言程序设计

4.1 汇编语言程序格式4.1.1 指令性语句和伪指令语句1、指令性语句 -> 机器指令 标号: 指令助记符 操作数,操作数;注释 例 :mov ax,00h;把 00送到 ax中

2、伪指令语句 -> 无机器指令 完成数据定义,存储区分配,段定义,段分配,指示程序结束等功能。

Page 10: 第四章 宏汇编语言程序设计

伪指令语句语句格式: 名字 伪指令指示符 操作数,操作数;注释 名字是给伪指令取的名称,用符号地址表示,后面不带冒号,名字可以省略。

名字通常是:变量名,段名,过程名,符号名 等。 例: MESSAGE DB ‘THIS IS A SAMPLE ROGRAM’ DB 0DH,0AH,’$’

DATA SEGMENT DATA ENDS ASSUME CS:CODE DS:DATA 都属于伪指令语句

Page 11: 第四章 宏汇编语言程序设计

4.1.2 数据项

操作数可以是常数 ,寄存器 ,存储器 ,变量 ,标号或表达式。

1、常数 :固定值,没有属性,是确定的数据。 例 :

1101B,0F0H,100D,,2370Q,0A7F2H,‘ABC’。2、变量 :指存放在存储单元中的值,在程序运行中是可以修改的。变量具有三个属性。

(1)段值 (段基址 )(2)段内偏移地址 (3)类型 (字节 )

3、标号 :可执行指令语句的地址的符号表示,可作为转移指令的目标操作数。

标号亦具有三个属性:( 1)段值( 2)段内偏移地址 (3)类型(距离)

Page 12: 第四章 宏汇编语言程序设计

4.1.34.1.3 MASMMASM中的表达式中的表达式 表达式由运算对象符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中的操作数去使用。

MASM中使用了 6类运算符 (表 4.1P128)。1、算术运算符(整数) 包括: +, -, *, /,MOD, SHL, SHR7种。例 4.2: ARRAY DB 1,2,3,4,5,6,7,8 TRY DB 20 MOV AX,30*5 MOV CX,(TRY-ARRAY) ;长度汇编时,得到: MOV AX,150 MOV CX, 8

Page 13: 第四章 宏汇编语言程序设计

2、逻辑运算符 包括: AND, OR, NOT, XOR 4种。 (对常数按位运算,结果也为常数) MOV AL, NOT 0FFH MOV BL, 8CH AND 73H MOV AH, 8CH OR 73H MOV CH, 8CH XOR 73H汇编时,得到 : MOV AL, 0 MOV BL, 0 MOV AH, 0FFH MOV CH, 0FFH

Page 14: 第四章 宏汇编语言程序设计

3、关系运算符 包括 6种: EQ( 相等 ),NE (不等), LT

(小于),GT (大于), LE (小于或等于),GE (大于或等于)。

关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址。结果是一个数值,若结果为真,输出全 1 , 0FFH 或 0FFFFH 。若结果为假,输出全 0.

例 4.5 MOV AX, 10H GT 16 ADD BL, 6 EQ 0110B MOV CX,((PORT LT5)AND 100)OR((PORT GE5)AND

200) 汇编时形成指令 : MOV AX,0 ADD BL,0ffh MOV CX,100

Page 15: 第四章 宏汇编语言程序设计

4、数值返回运算符 加在变量或标号前,返回运算对象的某个参数值。

1 )OFFSET 变量或标号 返回变量或标号的偏移地址值 例 : MOV BX,OFFSET DA1 该指令相当于指令 : LEA BX,DA1 2 ) SEG 变量或标号 取变量或标号的段基值。 例 : MOV AX, SEG M1 MOV DS,AX

Page 16: 第四章 宏汇编语言程序设计

3) TYPE 变量或标号 TYPE加在变量前,返回变量的类型属性,加在标号前,返回标号的距离属性。(见表 4-2,p131)

例: A1 DB 20H, 30H A2 DW 0438H A3 DD ? L1:MOV AH,TYPE A1; AH=1 MOV BH,TYPE A2; BH=2 ADD AL, TYPE A3; AL=4 MOV BL,TYPE L1; BL=0FFH

Page 17: 第四章 宏汇编语言程序设计

4)LENGTH 变量 当变量中使用 DUP时, LENGTH返回此变量所包含的单元数,对其它变量则返回1。

例 : M1 DW 100 DUP(?) M2 DW 1,2,3 M3 DB 'ABCD' MOV CX,LENGTH M1; CX=100 MOV BL,LENGTH M2; BL=1 MOV AL,LENGTH M3; AL=1

Page 18: 第四章 宏汇编语言程序设计

5)SIZE 变量

• 加在变量前,返回该变量包含的总字节数。 SIZE=LENGTH*TYPE

• 例 MOV CX,SIZE M1• MOV BL,SIZE M2• 得到: MOV CX,200• MOV BL,2

Page 19: 第四章 宏汇编语言程序设计

5.修改属性运算符

综合运算符。通过它可以修改变量或标号的属性,包括段属性,偏移地址属性,类型属性等。

1)段操作符格式:段前缀:变量或地址表达式(CS,DS,ES,SS 后跟冒号“:”,表示某个变

量或地址被修改到段寄存器提供的段基址中 ) 例 MOV AX, ES: [BX] ;段超越到 ES 段

Page 20: 第四章 宏汇编语言程序设计

2) PTR

格式:类型 / 距离 PTR 变量或标号功能:将 PTR左边的类型属性赋给右边的变量或标号( 常与类型BYTE,WORD, NEAR, FAR等连用)。

例 4.12 N1 DB 15H, 36H N2 DW 1122H, 3344H

LO:MOV AX , WORD PTR N1; (使 N1 类型转换成字与 AX 类型匹配)

MOV BL , BYTE PTR N2 ; (使 N2 类型转换成字与 BL 类型匹配)• 也可用 PTR 来改变距离属性:• JM FAR PTR LO

Page 21: 第四章 宏汇编语言程序设计

3、 THIS 格式:变量 / 标号 EQU THIS 类型 /距离 功能:将 EQU THIS右边的类型 /距离属性,赋给左边的变量 /标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。

例4.13 FIRST EQU THIS BYTETABLE DW 200 DUP(?)

4、 SHORT 格式: SHORT 标号 用来说明转移类指令中转向地址的属性,即目标地址与本指令之间的距离在 -128~+127之间短转移。

例4.15 LI: JMP SHORT L2……

L2: MOV AX, 0

Page 22: 第四章 宏汇编语言程序设计

5、 HIGH和 LOW 格式: HIGH/LOW 变量 /标号 字节分离运算符,对一个数或地址表达式, HIGH从中分离出高位字节, LOW分离出低位字节。

例4.16 K1 EQU 0ABCDHK2 EQU 1234HMOV AH, HIGH K1MOV BL, LOW K2

六、其它运算符1、圆括号() 用来改变运算符的优先级别, ( )中的运算符具有最高优先权。

2、方括号 [ ] 用来表示地址表达式或多重变量的下标值。

Page 23: 第四章 宏汇编语言程序设计

例: MOV AL,M1[3] MOV CX,M2[0]

MOV M3[1], CX3、尖括号 < >, 及圆点 . 在结构中专用。4、MASK和WIDTH 运算符,在记录中专用。 WIDTH: 指定记录或字段的位的长度。 MASK: 字段名 ,8/16 位二进数七、优先级表 4.3 P134

Page 24: 第四章 宏汇编语言程序设计

44..2 2 伪指令语句伪指令语句

完成变量定义 ,存储器分配 ,指示程序开始和结束 ,段定义 ,段分配等

* 数据定义语句 :DB,DW,DD* 标号赋值语句 :EQU,=* 段定义语句 : SEGMENT … ENDS* 段分配语句 : ASSUME* 过程定义语句 :PROC … ENDP* 程序开始结束语句 :ORG, END

Page 25: 第四章 宏汇编语言程序设计

• 其它伪指令(不常用):• 群定义语句: GROUP• 结构定义语句: STRUC...ENDS• 记录定义语句: RECODE

Page 26: 第四章 宏汇编语言程序设计

4.2.1 数据定义语句

格式 1: 变量名 助记符 操作数,操作数 ...;注释格式 2: 变量名 助记符 n DUP(操作数,操作数 ...)

功能:将操作数存入变量名指定的存储单元,或者只分配存储空间不存入数据。

—变量名 用符号表示,可以省略。助记符: DB( 字节 ) DW (字) DD (双字) DQ (四个字) DT (十个字)操作数—可以是常数、字符串、变量、标号、 表达式等,多操作数之间必须用逗号隔开。

Page 27: 第四章 宏汇编语言程序设计

用 n DUP()表示时 ,n必须是正整数 ,表示括号 中的操作数的重复次数。 例 4.19 图 4.1

DA1 DB 10H, 52H; 变量 DA1 中装入 10H,52H DA2 DW 1122H, 34H DA3 DD 5*20H, 0FFEEH例 4.20 图 4.2 FIRST DB ‘HELLO’;ASC 码转入 FIRST 首址

SECOND DW ‘OK’ 例 操作数用?定义不确定值的变量,用作保留存储空间 M1 DB ?;M1 为不确定量,保留 1 个字节空间

M2 DW 0D55H,? ;M2 第二个字为不确定量,保留二个字节空间

Page 28: 第四章 宏汇编语言程序设计

DA1 10 10H (DB) 52 52H DA2 22 1122H FIRST 48 "HELLO" (DW) 11 45 34 34H 4C 00 4C DA3 A0 5*20H 4F (DD) 00 SECOND 4B "OK"

00 4F 00 EE 图 4.2 FF 00 00 图 4.1

Page 29: 第四章 宏汇编语言程序设计

例 ONE DB 5 DUP(0); 重复 5 个零 ->ONE TWO DW 10 DUP(? ); 保留 10 个字

4.2.2 表达式赋值语句(不占内存)1. 赋值语句 EQU格式 : 符号名 EQU 表达式

功能: 用来给变量 ,标号 ,常数 ,指令 ,表达式等定义一个符号名 ,程序中用到 EQU左边的变量、标号时可用右边的常数值或表达式代替 ,但不能重复定义 .

Page 30: 第四章 宏汇编语言程序设计

COUNT EQU 100 DATA EQU COUNT+2 A1 EQU [BX+SI] BI EQU OFFSET A1

2. 等号语句 =功能同 EQU “,但用 =”定义的语句允许重复定义。

COUNT=100 COUNT=COUNT+10

Page 31: 第四章 宏汇编语言程序设计

4.2.3 段定义语句

1. 段定义语句 SEGMENT… … ENDS格式; 段名 SEGMENT 定位类型 组合类型 ‘ ’分类名 …… ;逻辑段内容 段名 ENDS功能:将一个逻辑段定义成一个整体。段名:是逻辑段的标识符,不可省略。上下段名必须一致。

( 1)定位类型 该参数是对段起始地址定位。PARA:段起始地址在节的整数边界,缺省时默认为 PARA。

BYTE:段起始地址定位在任何字节地址。WORD:段起始地址定位在字的边界,即首地址为偶数。PAGE:段起始地址定位在页的边界,首址为 256的整数倍。

Page 32: 第四章 宏汇编语言程序设计

( 2 )组合类型 各个逻辑段之间的组合方式,各段独立,各段覆盖或顺序组合等。

NONE:各同名段互相独立,缺省参数。 PUBLIC:该段与其它同名段连接,组成一个逻辑段。 COMMON:定位该段与其它同名段有相同的首地址,采用覆盖的方式在存储器中存放 ,连接长度为各分段中最大长度。

AT:定位该段的起始地址在表达式所指定的节边界上。 STACK:指定该段为堆栈段 ,多个模块只需设置一个堆栈段。 MEMORY :第一个逻辑段覆盖在其它同名段的最上层,其它带此

参数的同名段按照 COMMON 方式处理。( 3 ‘ ’) 分类名 汇编程序连接时将所有分类名相同的逻辑段组成一个段组。段定义语句允许嵌套设置 ,但不允许各个逻辑段相互交叉设置。

Page 33: 第四章 宏汇编语言程序设计

2.段分配语句( ASSUME) 8086/8088允许用户设置多个逻辑段,但只允许 4个逻辑 段同时有效(称为当前的逻辑段), ASSUME用来完成将逻辑段分别定义成 CS段, DS段, ES段, SS段。

格式: ASSUME CS:段名, DS:段名, SS:段名 ,ES:段名 功能:定义四个逻辑段,指明段和段寄存器的关系。 ASSUME放在代码段的开始,不可省略。 例 4.27 p140

SSTACK SEGMENT STACK ‘STACK’;SS段定义DB 100 DUP(?)

SSTACK ENDS 可省略

DATA1 SEGMENT ; DS段 D1 DW 0ABCDH D2 DW 1234HDATA1 ENDS

Page 34: 第四章 宏汇编语言程序设计

DATA2SEGMENT ;ES段RESULT DW ?DATA2ENDSCODE SEGMEN ; CS段ASSUME CS:CODE, DS:DATA1

&ES:DATA2, SS: SSTACKMAIN: MOV AX, DATA1

MOV DS, AXMOV AX, DATA2MOV ES, AXMOV AX, D1SUB AX, D2MOV RESULT, AX

CODE ENDSEND MAIN

Page 35: 第四章 宏汇编语言程序设计

4.2.4 过程定义语句 格式: 过程名 PROC 属性 ; 过程内容

RET N 过程名 ENDP

功能:定义一个过程 ,主程序可以用 CALL 指令调用它过程名:不可缺省 ,它是主程序中 CALL指令的目标操作数

属性:为 NEAR 或 FAR。

过程调用允许嵌套和递归调用。

Page 36: 第四章 宏汇编语言程序设计

例 4.30 P143 过程嵌套调用格式• MSUB PROC FAR• ...• CALL SBU1• ...• RET• SUB1 PROC NEAR• ...• RET• SUB1 ENDP• MSUB ENDP

Page 37: 第四章 宏汇编语言程序设计

4.2.5 程序开始和结束语句 1.NAME 格式: NAME 程序名 功能:为源程序目标模块赋名字,放在程序开始。 2.ORG 格式: ORG 表达式 功能:给汇编程序设置指针,指定下面语句的起始偏移地址。 例 4.32 用 ORG 改变数据段地址。 DATA SEGMENT ORG 100H A1 DB 10H,20H,30H;A1 偏移地址为 100H ORG 200H A2 DW 3031H,3233H;A2 偏移地址为 200H DATA ENDS

3.END 格式 :END 标号名 功能:标记汇编源程序结束。放在源程序的最后一行。

Page 38: 第四章 宏汇编语言程序设计

4.2.6 结构定义语句• 1. 结构定义• 格式:结构名 STRUC• 数据变量• 结构名 ENDS• 不允许超前使用。• 数据变量类型:• ( 1 )简单变量:一个元素• ( 2 )多重变量:多个元素• ( 3 )字符串变量:字符串• ( 4 )多重结构:包含另一个结构。

Page 39: 第四章 宏汇编语言程序设计

• 例 4.33 定义一个数据表格 TAB 的结构。• TAB STRUC• T1 DB ‘ABCD’; 字符串• T2 DW ? ;简单变量• T3 DW SEG L1 ;简单变量• T4 DW 2 DUP ( 0 );多重变量• T5 DW 1122H , 3344H ;多重变量• TAB ENDS

Page 40: 第四章 宏汇编语言程序设计

2. 结构副本预置

• 格式 1 :结构副本名 结构名 < 元素值,元素值 ...>; 注释• 格式 2 :结构副本名 结构名 N DUP(< 元素值,元素值 ...

>); 注释• N 表示需要预置相同的结构副本的个数。• 例 4.35 对例 4.33 结构预置 4 个结构副本。• ONE TAB<>• TWO TAB<'STOP'>• THREE TAB<,OFH,SEG L2>• FOUR TAB 5 DUP(<'EFGH',55H>)• 各个变量用“ .” 与变量名联系表示。• 如: TWO.T1 PAGE 146 图 4.5

Page 41: 第四章 宏汇编语言程序设计

3. 结构的使用例 4.36 要求将 AX 寄存器内容写入结构副本 TWO 的变量 T2 中。

MOVE TWO.T2, AX

例 4.37 将变量 FOUR.T5[0]的值取出送到 BX 寄存器。

MOV BX,FOR.T5[0]

Page 42: 第四章 宏汇编语言程序设计

例 4.38 定义描述学生情况的结构• 预置 10 个学生的结构副本,并比较其中两个同学

的 学习成绩。• 定义结构 STUDENT:• STUDENG STRUC• NUMBER DD 0206078• NAME DB 'xxxxxx'• SEX DB '女 ' ;字符串变量• AGE DB 20• SPECIA DB '通信 '• POLITI DB '团员 '• CREDIT DW 100• STUDENT ENDS

Page 43: 第四章 宏汇编语言程序设计

预置 STUDENT 的结构副本• STUDENT0 STUDENT <0206070,' 陆红梅 ',' 女’ ,2

0,' 通信’ ,' 团员’ ,95>• STUDENT1 STUDENT <0206071,' 王 强 ',' 男’ ,2

1,' 计算机’ ,' 团员’ ,96>• ....• STUDENT8 STUDENT <0206078,' 张 红 ',' 女’ ,19,' 通信’ ,' 团员’ ,90>

• STUDENT9 STUDENT <0206079,' 钱伟国 ',' 男’ ,19,' 电子’ ,' 团员’ ,92>

• 比较王强与张红两位同学的成绩:• MOV AX,STUDENT1.CREDIT• CMP AX,STUDENT8.CREDIT

Page 44: 第四章 宏汇编语言程序设计

4.2.7 外部伪指令及对准伪指令• 1.外部伪指令• PUBLIC 名称,名称, ... ;注释• (定义共享模块)• EXTRN 名称:类型,名称,类型, ...; 注释• (调用共享模块)

• 名称是下列种类,则类型对应:• 名称 类型• 变量 BYTE/WORD• 标号 NEAR/FAR• 常数 ABS

• 例 4.39 page149

Page 45: 第四章 宏汇编语言程序设计

2. 对准伪指令

• 格式: EVEN功能:使下条语句的地址调整为偶地址。例 4.40 3.LABEL格式:名称 LABEL 类型属性功能:给已定义的变量或标号取另一个名字,并可重新定义它的类型属性,使同一变量或标号在不同地方被引用时,可采用不同的名字,具有不同的类型属性,提高了程序的灵活性。

Page 46: 第四章 宏汇编语言程序设计

• 1)LABEL 与变量联用• 与变量联用时,给下一个变量起一个别名,类型属性可

修改为 BYTE,WORD 等。

• 例 4.42• DATB LABEL BYTE;DATB 为 DATW 的别名,类型为字节• DATW DW 3031H,3233H• MOV AL,DATB[0];AL<-31H• MOV BX,DATW[1];BX<-3330H•

Page 47: 第四章 宏汇编语言程序设计

• 例 4.44 • DISF LABEL FAR• DISN: MOV AX,[SI]• DISF 与 DISN 指向同一条指令, DISF 是 DISN 的别名。• 但距离属性改为 FAR,当其它代码对它调用时,• 可以使用。

Page 48: 第四章 宏汇编语言程序设计

44.3.3 DOS DOS系统功能调用和系统功能调用和 BIOSBIOS中断调用中断调用 DOS系统功能内部命令: DIR,TYPE,CD调用 及对 I/O 设备的管理功能。 BIOS中断调用是 为了方便汇编语言程序设计而提供的一些例行子程序 . p154 表 4.6 DOS 常用的软中断命令4.3.1 常用的软件中断1.读 / 写磁盘扇区 (INT 25H/INT 26H)2.退出程序( INT 20H ) ROM BIOS是常驻内存 (ROM)中的部分设备驱动程序 . 访问 BIOS是通过软中断指令进行的 ,当用户要调用 BIOS中断子程序时 , 只要安排一条相应中断类型号 n 的软中断指令 . INT n 即可。

Page 49: 第四章 宏汇编语言程序设计

DOS系统功能调用

实现设备管理 ,文件读 /写 ,文件管理和目录 管理等功能 .

设备管理 : 键盘输入、显示输出、设置磁盘缓冲区、选 择当前盘等功能调用目录管理 : 查找目录项、更改目录项、建立子目录等文件管理 :打开文件、建立文件、读写文件、删除文件等

调用格式 :(1) 系统功能号送到 AH寄存器(2) 入口参数送到指定寄存器(3) 用 INT 21H指令执行功能调用(4) 根据出口参数分析功能调用执行情况

Page 50: 第四章 宏汇编语言程序设计

1、 DOS键盘功能调用 通过 DOS功能调用能够将键值读到 AL寄存器中。

p156 表 4.7 (1)1号功能调用 (从键盘输入字符并能回显 )

例 : MOV AH,1 INT 21H ;执行后 :AL=1

Page 51: 第四章 宏汇编语言程序设计

例 4.47:交互式按下数字键 1,2,3, 程序转入相应服务子程序 ,若按下其他键 就继续等待。 KEY: MOV AH,1 INT 21H CMP AL,’1’ JE ONE; ZF=0 CMP AL,’2’ JE TWO CMP AL,’3’ JE THREE JMP KEY ONE:... TWO:... THREE:...

Page 52: 第四章 宏汇编语言程序设计

(2) 8号功能调用 (从键盘输入字符但不回显 ) MOV AH,8 INT 21H (会检查键入是否为 CTRL-Break) (3)0AH号功能调用 (从键盘接收字符串到内存的输入缓冲区 )

Page 53: 第四章 宏汇编语言程序设计

例 4.48 开辟一个缓冲区 ,从键盘输入 一个字符串 ,将输入的字符数存到 CL 寄存器, 并将指针指向字符串的第一个字符。 BUFF DB 100 ;用户定义存放 100 字节的缓冲区 DB ? ; 系统添入实际输入字符字节数 DB 100 DUP (?) ;存放输入字符的 ASCII 码值 MOV AX , DATA MOV DS, AX MOV DX, OFFSET BUFF MOV AH,0AH INT 21H MOV BX,DX MOV CL, [BX+1] ADD DX , 2… …

Page 54: 第四章 宏汇编语言程序设计

3 )检查键盘状态• OBH 功能调用:若有键按下, AL=OFFH ,若没有键

按下, AL=0 ,无论检查到是否有键按下,程序继续执行下一条指令。

• 例 4.49 检测键盘工作,若用户未按键,程序循环执行,若用户按下任何键,程序转去调用发声子程序。

• LOOP : MOV AH , 0BH ;检测键盘状态• INT 21H• INC AL ;若 AL=0FFH , +1 后为 0• JNZ LOOP ;无键按下,调子程序• CALL SOUND ;有键按下,调子程序

Page 55: 第四章 宏汇编语言程序设计

2.DOS 显示功能调用• 显示单字符或字符串。 p158 表 4.8• DOS 显示功能:• 单字符显示(或 ASCII 送入 DL )• 1)2 号功能: MOV DL,':'; 显示“:”• MOV AH,2• INT 21H• 2)6 号功能:控制台输入 /输出• MOV DL , 24H ; '$' 的 ASCII 码 24H• MOV AH,6• INT 21H

Page 56: 第四章 宏汇编语言程序设计

2) 字符串输出• DOS 的 9 号功能调用。要求 DS:DX 指向串地址首址,并且以‘ $’ 结束符,光标自动回行。

• 例 4.50 在屏幕上显示‘ HOW DO YOU DO?’ 字符串,且光标换行。

• CR EQU 0DH ;回车符• LF EQU 0AH ;换行符• MES DB 'HOW DO YOU DO?’,CR,LF,'$'• MAIN:MOV AX,DATA• MOV DS,AX• MOV DX,OFFSET MES;DS:DX 指向字符串 MES• MOV AH,9 ;9 号功能调用• INT 21H

Page 57: 第四章 宏汇编语言程序设计

3 )日期与时间设置

• 用 P159 表 4.9 可以很方便取得或设置日期和时间。• 1) 设置日期( 2BH 功能调用)

• 例 4.51 设置日期为 2008年 1月 20日• MOV CX,2008• MOV DH,1• MOV DL,20• MOV AH,2BH• INT 21H

Page 58: 第四章 宏汇编语言程序设计

• 2 )取得日期( 2AH )•

MOV AH,2AH• INT 21H• CX 中得到当年年号• DH 及 DL 中为月号和日号,为二进制数。

• 4. 返回操作系统(结束当前正在执行的程序,返回操作系统)

• MOV AH,4CH• INT 21H •

Page 59: 第四章 宏汇编语言程序设计

第四章 习题

4.1, 4.2, 4.3, 4.4, 4.5, 4.8