资源描述
第4章 汇编语言语法和DOS功能调用 教学内容 4.1 数据类型及其存储规则 4.2 汇编语言程序的格式 4.3 伪指令语句 4.4 汇编语言中的表达式 4.5 指令语句 4.7 DOS系统功能调用 教学目标 1 理解汇编语言中的基本数据。 2 掌握汇编语言中的常用伪指令。 3 理解DOS系统功能调用。,重点内容 1 汇编语言中的基本数据(标识符、常数、变量、标号)。 2 汇编语言中的常用伪指令。 3 汇编语言中的表达式(算术运算符、逻辑运算符、关系运算符、分析运算符、修改属性运算符、其他运算符)。 4 DOS系统功能调用。 难点内容 1 汇编语言中的常用伪指令。 2 DOS系统功能调用。 学时数 4学时,计算机程序设计语言一般可分为三种:机器语言、汇编语言和高级语言。 机器语言:也称机器码,是CPU唯一能够识别的语言,用不同数值的二进制数来表示要求CPU执行的命令,不同的CPU语言也不同,难以记忆和阅读。 汇编语言:为了解决机器语言难以记忆和阅读的问题,用英文缩写来表示各种指令而生成的一种语言,它与机器语言基本是一一对应的。因此,汇编语言具有很高的执行效率。但也正因为这样,汇编语言也仍然与CPU相关联,不同的CPU要使用不同的汇编语言。在执行前要将其转换成CPU能够识别的机器码,这种转换称为汇编,由于汇编语言与机器语言基本是一一对应的,所以这种转换是唯一的。 高级语言:独立于CPU之外,语句直观简练,编程效率高。在执行前要将其转换成CPU能够识别的机器码,这种转换称为编译。不同的编译软件,编译后获得的机器码是不同的,好的编译软件,得到的机器码占用内存小、执行效率高,但是与汇编语言相比都有较大的差距。,4.1 汇编语言程序的格式 例4.1 试求小于100的所有非零偶数,并把结果存入以BUFF开始的内存区. 1 MY_DATA SEGMENT 2 BUFF DB 50 DUP(?) 3 MY_DATA ENDS 4 MY_CODE SEGMENT 5 ASSUME CS:MY_CODE, DS:MY_DATA 6 START: MOV AX, MY_DATA 7 MOV DS, AX 8 MOV AL,2 9 LEA BX,BUFF 10 LLP: MOV BX,AL 11 INC AL 12 INC AL 13 CMP AL,100 14 JNZ LLP 15 INC 20H 16 MY_CODE ENDS 17 END STRAT,汇编语言程序的格式可以归结为以下几点: (1) 段的结构 段名1 SEGMENT 语句1 语句i 段名1 ENDS 段名2 SEGMENT 语句1 语句j 段名2 ENDS 段名n SEGMENT 语句1 语句k 段名n ENDS END 标号,(2)语句的结构 3种基本语句类型: 指令语句 伪指令语句 宏指令语句 语句一般有4个部分组成,即: 标号或名字 操作码 操作数 ;注释 标号或名字:这是一个任选部分,在语句之首,当语句为指令性语句时,它是标号,必须以“:”结束。当语句为伪指令时,它是名字,没有结束“:”。 注释:对程序的说明,任选,对程序不产生影响。必须以“;”开始。 语句各组成部分之间至少有一个空格作为间隔。,4.2 汇编语言中的基本数据 1、标识符 标识符由程序员自由建立起来的,有特定意义的字符序列。 标识符的组成规则如下: 必须由字母、数字(0,9)及特殊符号(?, ,)组成,且必须以字母打头。 字符总数限制在31个以内。 不能使用属于系统专用保留字(保留的字)。 2、常数 常数语句中出现的那些固定值,除了自身的值以外,没有其它任何属性。 常数分为两类 (1)数值常数 (2)字符串常数,3、变量 变量存放在存储器单元中的操作数,它的值是可以改变的,在程序中出现的是存储器单元地址的符号,即与某一数据项第一字节相对应的标识符。 变量的3个属性: 段地址(SEG):变量所在段的段地址。 偏移地址(OFFSET):变量所在段内的偏移地址。 类型(TYPE):所定义的每个变量所占据的字节数。 4、标号 标号可执行指令语句地址的符号表示,即用标识符来表示地址。 标号的3个属性: 段地址(SEG) :与标号对应的指令首字节所在的段地址。 偏移地址(OFFSET) :与标号对应的指令首字节所在的偏移地址。 类型(TYPE) :标号的类型属性有两种:NEAR和FAR类型。,4.3 伪指令语句 伪指令语句可分为以下几种类型: 数据定义伪指令语句 标识符赋值与解除伪指令语句 段定义伪指令语句 过程定义伪指令语句 程序开始与结束伪指令语句 方式定义伪指令语句 结构定义伪指令语句 分组伪指令语句 其它伪指令语句,1、数据定义伪指令语句 共有五条:DB、DW、DD、DQ和DT,分别用来定义字节、字、双字、8字节和10字节。 指令格式: 变量名 助记符 操作数1,操作数2,操作数n ;注释 变量名 助记符 n DUP(操作数1,操作数2,操作数n) ;注释 功能:将操作数存入以变量名所指定的存储单元为首地址的存储区中,或者分配存储单元。 n DUP( )表示将括号内的操作数重复n次,n必须为正数。,例4-2 操作数是常数、表达式、字符串数据的定义 DATA1 DB 10H,25H DATA2 DW 9988H,56H DATA3 DD 2*40H,0AABBH DATA4 DB HELLO,例4-3 操作数用“?”定义不确定值的变量,用DUP来定义重复变量,不确定值的变量一般用作保留存储空间,以便存放运算结果。 DATA1 DB ? DATA2 DW 0D55H, ? DATA3 DB 5 DUP(0) DATA4 DW 10 DUP(?) DATA5 DB 4 DUP(1,2 DUP(20),2、标识符赋值与解除伪指令语句 共有4条: 等值伪指令语句EQU 等号伪指令语句“=” 解除伪指令语句PURGE 别名定义伪指令语句LABEL (1)等值伪指令EQU语句 指令格式: 标识符 EQU 操作数 功能:为操作数定义一个标识符,以后就可以以标识符替代该操作数。一经定义后就不能重新定义。 例4.5 DATA EQU 100 DATA1 EQU DATA2 CI EQU ADD,(2)等号伪指令语句“=” 指令格式: 标识符=操作数 功能:与EQU具有相同的功能,但允许重新定义。 例4.6 DATA =100 DATA1 = DATA +10 SOURCE=BXSI MOV AX,SOURCE SOURCE=BX MOV CX,SOURCE (3)解除伪指令语句PURGE 指令格式: PURGE 标识符1,标识符2,标识符n 功能:将EQU定义过的标识符解除定义,以便可以再次用EQU定义。,(4)别名定义伪指令语句 格式:别名 LABEL 类型属性 LABEL:伪指令助记符,不可缺省。 功能:为一个已经定义过的标识符另取一个名称,以获得一个新的类型属性。 例4.7 定义变量的别名 DATAB LABEL BYTE DATAW DW 1234H,5678H DISF LABEL FAR DISN MOV AX,SI,3、段定义伪指令语句 (1)段结构定义伪指令语句 SEGMENTENDS 指令格式: 段名 SEGMENT 定位类型 组合类型 分类名 逻辑段内容 段名 ENDS 功能:定义一个逻辑段。 (1)段名:不可缺少,是逻辑段的地址,放在SEGMENT和ENDS的前面。 (2)助记符:不可缺少,即SEGMENT和ENDS,分别表示段的开始和结束。 (3)参数:可选,有定位类型、组合类型和分类名三个参数。, 定位类型,表示本段起始地址,共有以下4种: PARA:缺省值,段的起始地址在节(16字节)的边界上。 BYTE:段的起始地址在任意字节边界上。 WORD:段的起始地址在任意字边界上。 PAGE:段的起始地址在页(256字节)边界上。 组合类型,表示同类别名的段的连接方式,共有以下6种: NONE:缺省值,不与其他段连接。 PUBLIC:与其他段连接时按LINK中的顺序,由低地址到高地址。 COMMON:与其他段以覆盖方式连接,段长度为最大段的长度。 AT 表达式:该段起始地址在表达式所指定的节的边界上。 STACK:指定该段为堆栈段,在堆栈段中必须有该参数,多个模块只用设一个堆栈段,使用顺序连接方式组合。 MEMORY:多个逻辑段连接时,本逻辑段定位在地址最高的存储区。有多个MEMORY段时,除第一个MEMORY段外,其他段按照COMMON方式处理。, 类别名,用来为该段取一个类别名,以便可以将同类别名的段进行组合。可选,不超过40个字符。,(2)段分配伪指令语句 指令格式: ASSUME CS:段名,DS:段名,SS:段名,ES:段名 功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系 注意点: 1)助记符ASSUME不可省略,一般放在代码段的开始处。 2) ASSUME后面的指令参数,由段寄存器名(CS、DS、ES、SS)、冒号及段名组成,各参数之间用逗号隔开,段名应是SEGMENTENDS中定义过的名字。 3)4个逻辑段不一定要全部定义,不使用的可以不定义。通常代码段和数据段是必须的,若使用了串指令,还应定义附加段ES。 4)可以用ASSUME 段寄存器名:NOTHING取消定义。 5) ASSUME只将某个段分配给相应的段寄存器,只有代码段的段基址自动装入CS,其他段还须用指令装入相应的段基址。,4、过程定义伪指令语句 指令格式: 过程名 PROC 属性 过程内容 RET 过程名 ENDP 功能:定义一个由主程序可以用CALL指令调用的过程。 说明: 1)过程名是过程的名字,也是子程序的入口地址,不可缺少。如同标号一样,也有三种属性: 段地址:过程的段基址。 偏移地址:过程的第一个字节与段首址之间相距的字节数。 距离类型:NEAR和FAR类型。NEAR允许在段内调用,FAR允许在段间调用,若缺省则为NEAR。,5、 程序开始与结束伪指令语句 共有4条伪指令语句:NAME、TITLE、ORG和END。 (1)目标模块命名伪指令语句 格式: NAME 程序名 在输出列表文件时,每页开头打印这个程序名,若未用此指令则打印文件名。 TITLE 文本名 ; 将文本名赋给目标模块作名字。,(2)定位伪指令语句 格式:ORG 表达式 功能:给出下一条语句的段内偏移量。 例4.8 用ORG指定数据段和代码段地址。 DATA SEGMENT X1 DW 20H,60H, ORG 100H X2 DB 10H,20H,30H ORG 200H X3 DW 1234H, 4321H DATA ENDS CODE SEGMENT ORG 100H ASSUME CS:CODE,DS:DATA START: MOV AX,DATA CODE ENDS,(3)程序结束伪指令语句 格式: END 标号名 功能:在程序中不可缺省,标记汇编语言的源程序的结束。汇编程序在汇编时遇到END就停止汇编。程序执行时从END后的标号名处开始。 例4.9 程序结束伪指令语句的应用 CODE SEGMENT START:MOV AX,BX MOV CX,12H CODE ENDS END START,6、 方式定义伪指令语句 格式: .8086 .386 7、 结构定义伪指令语句 有三条语句:结构定义伪指令,结构存储分配和预置伪指令及结构使用伪指令。 (1)结构定义伪指令语句 格式:结构名 STRUC 数据变量序列 结构名 ENDS,(2) 结构存储分配和预置伪指令语句 格式:结构变量名 结构名 元素值,元素值 结构变量名 结构名 N DUP(元素值,元素值) 例4.11 对例4.10中的TAB结构进行存储空间分配和预置,形成4个结构变量。 DATA1 TAB DATA2 TAB 1234 DATA3 TAB ,34H,SEG PLT DATA4 TAB 5 DUP(WXYZ,22H),(3) 结构使用伪指令语句 格式:结构变量名字段变量 设当前数据段基址为1000H,结构变量DATA1的偏移地址为100H,则例4-1中的4个结构变量在存储器中的地址分配如图4-3所示。,8、 分组伪指令语句 格式:组名 GROUP 段1,段2, 例4.12 GROUP1 GROUP SEG1,SEG2,SEG3 ASSUME DS:GROUP1 MOV AX,GROUP1 MOV DS,AX MOV BX,GRPUP1:VAR1 ,9、 其它伪指令语句 (l)外部伪指令语句 格式: PUBLIC 名称1,名称2, 将名称1,名称2,为定义为全局使用。 EXTRN 名称1:类型,名称2:类型, 说明名称1,名称2, 是在其他模块中定义过的标识符,并说明其类型。,例4-12 用EXTRN和PUBLIC语句实现模块间标识符的交叉访问 模块1 EXTRN DATA2:BYTE, SUBTR1:NEAR PUBLIC TABLE, DATA1 DSEG SEGMENT TABLE DB 100 DUP(?) DATA1 DW ? CODE SEGMENT DSEG ENDS,CODE SEGMENT ASSUME CS:CODE, DS:DSEG MOV AX, DSEG MOV DS, AX MOV AL, DATA1 CALL SUBTR1 MOV AX, SEG DATA2 MOV ES, AX MOV BX, ES:DATA2 CODE ENDS END,模块2 EXTRN TABLE:BYTE PUBLIC SUBTR1, DATA2 DSEG SEGMENT DATA2 DB ? DSEG ENDS CODE SEGMENT SUBTR1: CODE ENDS END,(2)对准伪指令语句 格式:EVEN 功能: EVEN使下一语句的地址调整为偶地址。 例4.14 EVEN直接放在某一语句前,汇编程序汇编时就会完成将地址调整在偶地址上。 DATA SEGMENT ORG 100H A1 DB 0DH EVEN A2 DW 100 DUP(?) DATA ENDS,(3)条件汇编伪指令语句 一般格式是: IF ;如果条件成立 ELSE ;否则 END IF ;结束条件汇编语句 IF有多种形式,它们是: IF 操作数 IFE 操作数 IFDEF 标号或变量 IFNDEF 标号或变量 IFB IFNB IFIDN , IFDIF , IF1 IF2,4.4 汇编语言中的表达式 表达式-运算对象和运算符组成。 汇编语言中有类运算符,即: 算术运算符; 逻辑运算符; 关系运算符; 分析运算符; 修改属性运算符; 其它运算符 。,、算术运算符 算术运算符有:加()、减()、乘(*)、除()、取模运算(MOD)、左移(SHL)和右移(SHR)。 取模运算是取两数相除的余数,对象必须为正整数。 例如 92 MOD 16 结果为12(相当于取低4位的值) 97H MOD 20H 结果为23(相当于取低5位的值) 33H MOD 7 结果为2,例4-14 包含乘法和减法算术运算符的表达式 DATA SEGMENT ARRAY DB 1,2,3,4,5,6 TRY DB 20 DATA ENDS CODE SEGMENT MOV BX, 30*5 MOV CX, (TRY-ARRAY) CODE ENDS,例4-15 源程序包含除法、减法、模运算和移位运算的表达式 DATA SEGMENT KA EQU 800 DATA ENDS CODE SEGMENT MOV BX, KA-80 MOV AX, KA MOD 100 MOV CX, KA/100 MOV DH, 01100100B SHR 2 CODE ENDS,2、逻辑运算符 逻辑运算符有:与(AND)、或(OR)、非(NOT)和异或(XOR)。 例 4-16 AND、OR、NOT、XOR逻辑运算的表达式 DATA SEGMENT PORT EQU 81H DATA ENDS CODE SEGMENT MOV AL,NOT 0FFH MOV BL,8CH AND 73H MOV AH,8CH OR 73H MOV CH,8CH XOR 73H IN AL,PORT AND DX,PORT AND 0FEH OUT DX,AX CODE ENDS,3、关系运算符 关系运算符有:相等 EQ、不等 NE、小于 LT、大于 GT、小于或等于 LE、大于或等于GE。 4、分析运算符 分析运算符有:OFFSET、SEG、TYPE、LENGTH、SIZE (1)OFFSET 格式:OFFSET 变量或标号 功能:返回变量或标号的偏移地址。 例4-17 用OFFSET返回标号或变量偏移地址值的表达式 DATA SEGMENT DAT1 DB 81H DATA ENDS CODE SEGMENT MOV SI,OFFSET LAB1 LAB1: MOV BX,OFFSET DAT1 CODE ENDS,(2)SEG 格式:SEG 变量或标号 功能:返回变量或标号的段基址。 (3)TYPE 格式:TYPE 变量或标号 功能:返回变量的类型属性(在变量前),返回标号的距离属性(在标号前)。,表4-1 TYPE运算符返回值,例 4-18 TYPE加在变量和标号前的表达式 DATA SEGMENT AA1 DB 20H, 30H AA2 DW 0438H AA3 DD ? DATA ENDS CODE SEGMENT LL1: MOV AH,TYPE AA1 MOV BH,TYPE AA2 ADD AL,TYPE AA3 MOV BL,TYPE LL1 CODE ENDS,(4) LENGTH 格式:LENGTH 变量 功能:返回其后第一个变量的项目数。 例 4-19 LENGTH加变量的表达式 DATA SEGMENT BB1 DW 100 DUP (?) BB2 DW 1,2,3 BB3 DB A B C D DATA ENDS CODE SEGMENT MOV CX, LENGTH BB1 ;CX=100 MOV BL, LENGTH BB2 ;CX=1 MOV AL, LENGTH BB3 ;CX=1 CODE ENDS,(5) SIZE 格式:SIZE 变量 功能:返回变量的字节数。 把例4-19中含有LENGTH表达式改为SIZE表达式,即: MOV CX, SIZE BB1 ;CX=200 MOV BL, SIZE BB2 ;CX=2 MOV AL, SIZE BB3 ;CX=1,5、修改属性运算符(综合运算符) 修改属性运算符有:段操作符、PTR、THIS、HIGH、LOW、SHORT (1) 段操作符 格式: 段前缀(CS、DS、ES、SS) : 变量或地址表达式 功能:使用段前缀作为变量或地址表达式的使用段。 (2) PTR 格式: 类型 PTR 变量 距离 PTR 标号 功能:将类型(BYTE、WORD等)赋给变量,或将距离(NEAR、FAR)赋给标号。,例 4-20 带PTR表达式的变量 DATA SEGMENT CC1 DB 16H,36H CC2 DW 1122H,3344H DATA ENDS CODE SEGMENT LL1: MOV AX,WORD PTR CC1 MOV BL,BYTE PTR CC2 MOV BYTE PTR BX, 10H MOV WORD PTR BX, 10H JMP FAR PTR LL1 CODE ENDS,(3) THIS 格式: 变量 EQU THIS 类型 标号 EQU THIS 距离 功能:将类型(BYTE、WORD等)赋给变量,或将距离(NEAR、FAR)赋给标号。 例如: DATA1 EQU THIS BYTE TABLE DW 200 DUP(?) DATA1与TABLE地址相同,但DATA1是字节类型,而TABLE是字类型。 又如: LL1 EQU THIS FAR MOV AX,100 (4) SHORT 格式:SHORT 标号 功能:指明标号的距离为-128+127。,(5) HIGH和 LOW 它们称为字节分离运算符 格式: HIGH 变量或标号 LOW 变量或标号 功能:从变量或标号中分离出高位字节或低位字节。 例4-21 带HIGH和 LOW表达式的变量 DATA SEGMENT BB1 EQU 1234H BB2 EQU 0A0B0H DATA ENDS CODE SEGMENT MOV AH, HIGH BB1 MOV BL, LOW BB2 CODE ENDS,6、其它运算符 7、注意点: (1)注意表达式中各运算符和操作符的优先级 (2)注意数制统一,4.5 指令语句 指令语句的格式: 标号: 前缀指令 助记符 操作数 ;(注释) (1)立即寻址和直接寻址的表示形式 例4-22 立即寻址和直接寻址在表示形式上的区别 DATA SEGMENT BB1 EQU 1234H BB2 DW 0A0B0H DATA ENDS CODE SEGMENT MOV AX, BB1 ;立即寻址 MOV BX, BB2 ;直接寻址 MOV CX, BB1 CODE ENDS,(2) 基址寄存器加变址寄存器寻址的表示形式 有两种表示形式: MOV AX,BXSI MOV AX,BX+SI (3) 相对寄存器寻址的表示形式 例4-23 相对寄存器寻址的两种表示形式 DATA SEGMENT MYDAT DB 100 DUP(?) DATA ENDS CODE SEGMENT MOV AX, MYDATBX MOV AX, MYDAT+BX MOV CX, MYDATBXSI MOV CX, MYDAT+BX+SI CODE ENDS,4.6 宏指令语句及其使用 1、宏定义 宏定义格式: 宏指令名 MACRO 形式参数1,形式参数2 宏体 ENDM 2、宏调用 宏调用格式: 宏指令名 实际参数1,实际参数2 3、宏展开,例4-24 无形式参数的宏定义、宏调用及宏展开 宏定义: PUSHAB MACRO PUSH AX PUSH BX ENDM 宏调用: PUSHAB 宏展开: + PUSH AX + PUSH BX,例4-25 带形式参数的宏定义、宏调用及宏展开 宏定义: LDSF MACRO PR,VAR, N,REG,CC MOV PR,VAR MOV AX,PR MOV CL, N S&CC REG, CL ENDM 宏调用1: LDSF SI,WVAR1,4,AX,AR 宏调用2: LDSF DI,WVAR2,3,BX,AL 宏展开1: +MOV SI,WVAR1 +MOV AX,SI +MOV CL, 4 +SAR AX, CL 宏展开2: +MOV DI,WVAR2 +MOV AX,DI +MOV CL, 3 +SAL BX, CL,4、宏嵌套 (1)宏定义中使用宏调用 例2-26 设在程序的数据段已经定义了变量X,Y,Z,试计算X+YZ,并要求保护所有使用的寄存器。 宏定义: DBF MACRO P, Q MOV BX, P MOV AX,Q ADD AX, BX ENDM DBFS MACRO X1, X2, X3 PUSH AX PUSH BX DBF X1, X2 MOV X3, AX POP BX POP AX ENDM,宏调用: DBFS X,Y,Z 宏展开: +PUSH AX +PUSH BX +MOV BX, X +MOV AX,Y +ADD AX, BX +MOV Z, AX +POP BX +POP AX,(2)宏定义中包含宏定义 例2-27 设在程序的数据段已经定义了变量X,Y,Z,试共用一个宏定义,计算X+YZ、X-YZ、X AND YZ,并要求保护所有使用的寄存器。 宏定义: DEFM MACRO MACN,OPEN MACN MACRO A,B,C PUSH AX MOV AX,A OPEN AX,B MOV C,AX POP AX ENDM ENDM,宏调用定义加法: DEFM ADDIT,ADD 宏展开:+ADDIT MACRO A,B,C PUSH AX MOV AX,A ADD AX,B MOV C,AX POP AX ENDM 宏调用定义减法: DEFM SUBT,SUB 宏展开: +SUBT MACRO A,B,C PUSH AX MOV AX,A SUB AX,B MOV C,AX POP AX ENDM,宏调用定义逻辑“与”: DEFM ANDT,AND 宏展开: +ANDT MACRO A,B,C PUSH AX MOV AX,A AND AX,B MOV C,AX POP AX ENDM 宏调用实现X+YZ: ADDIT X,Y,Z 宏展开: +PUSH AX +MOV AX,X +ADD AX,Y +MOV Z,AX +POP AX,宏调用实现X-YZ: SUBT X,Y,Z 宏展开:+PUSH AX +MOV AX,X +SUB AX,Y +MOV Z,AX +POP AX 宏调用实现 X AND YZ: ANDT X,Y,Z 宏展开: +PUSH AX +MOV AX,X +AND AX,Y +MOV Z,AX +POP AX,5、宏定义中的标号与变量 定义局部标号的格式: LOCAL 参数1、参数2、参数n 例4.29 延时宏指令语句 宏定义: DELAY MACRO VALUE1,VALUE2 LOCAL AGAIN1,AGAIN2 PUSH AX PUSH CX MOV CX,VALUE1 AGAIN1: MOV AX,VALUE2 AGAIN2: DEC AX JNZ AGAIN2 LOOP AGAIN1 POP CX POP AX ENDM,宏调用1: DELAY 1234H, 5678H 宏调用2: DELAY 9ABCH, 0DEF0H 宏展开1: DELAY 1234H, 5678H PUSH AX PUSH CX MOV CX,1234H ?0000: MOV AX,5678H ?0001: DEC AX JNZ ?0001 LOOP ?0000 POP CX POP AX,宏展开2: DELAY 9ABCH, 0DEF0H PUSH AX PUSH CX MOV CX,09ABCH ?0002: MOV AX,0DEF0H ?0003: DEC AX JNZ ?0003 LOOP ?0002 POP CX POP AX,6、其它宏指令语句 (1)取消宏指令语句 格式:PURGE 宏指令名1,宏指令名2宏指令名n (2) 重复执行宏指令语句 格式: REPT 表达式 宏体 ENDM,7、宏指令与子程序的区别 主要区别在以下几个方面: (1)宏指令调用比子程序调用执行速度快。 (2)过程调用使用CALL语句实现,在CPU执行时进行处理,而宏指令调用由宏汇编软件MASM中的宏处理程序来处理。 (3)子程序比宏指令节省内存空间。 (4)宏指令比子程序灵活。,4.7 DOS系统功能调用 DOS是一种基本的操作系统,它的一些功能可以用软中断的方法来获得,这就是DOS系统功能调用和BIOS中断调用。,表4-2 常用的DOS软中断,1、常用的DOS软中断,(1)程序结束软中断 INT 20H 调用格式举例: INT 20H INT 21H 该软中断又有三种情况:无返回程序结束、程序结束并驻留和带返回程序结束。 无返回程序结束的调用格式: MOV AH,0 INT 21H 程序结束并驻留的调用格式举例: MOV AH,31H MOV AL,1 ;返回号 MOV DX,400H ;保留从程序段前缀开始的内存长度字节 INT 21H,带返回程序结束的调用格式举例: MOV AH,4CH MOV AL,1 INT 21H INT 27H 调用格式举例: MOV DX,XX ;驻留程序长度 INT 27H,(2)磁盘扇区读与写 调用格式举例: MOV AL,0 MOV CX,3 MOV DX,4 MOV BX,2000H INT 25H,2、DOS系统功能调用 DOS系统功能可分为三个方面:设备管理、文件管理和目录管理。 设备管理包括:键盘输入、显示输出、设置磁盘缓冲器、选择当前盘等功能调用; 文件管理包括:建立文件、打开文件、读写文件、删除文件等功能调用; 目录管理包括:查找目录项、更改目录项、建立子目录、删除子目录等功能调用。,(1)显示功能调用 单字符显示 调用格式举例: MOV DL, * MOV AH, 2 INT 21H, 字符串显示 调用格式举例:在屏幕上显示HOW ARE YOU?字符串 DATA SEGMENT CR EQU 0DH LF EQU 0AH DAT1 DB HOW ARE YOU?,CR,LF, DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET DAT1 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,(2) 键盘功能调用,表4-3 DOS键盘功能调用,(1) 单字符键盘输入 调用格式举例:从键盘输入字符并显示 MOV AH,1 INT 21H (2)字符串键盘输入 调用格式举例:从键盘输入一个字符串,将输入的字符数送CL寄存器,并将指针指向字符串的第一个字符。,
展开阅读全文