收藏 分享(赏)

第5章-汇编语言程序设计.ppt

上传人:天天快乐 文档编号:967803 上传时间:2018-05-09 格式:PPT 页数:144 大小:1.36MB
下载 相关 举报
第5章-汇编语言程序设计.ppt_第1页
第1页 / 共144页
第5章-汇编语言程序设计.ppt_第2页
第2页 / 共144页
第5章-汇编语言程序设计.ppt_第3页
第3页 / 共144页
第5章-汇编语言程序设计.ppt_第4页
第4页 / 共144页
第5章-汇编语言程序设计.ppt_第5页
第5页 / 共144页
点击查看更多>>
资源描述

1、第五章 汇编语言程序设计,5.1 汇编语言语句的类型和组成5.2 伪操作命令5.3 DOS系统功能调用和BIOS中断调用 5.4 汇编语言程序设计,第五章 汇编语言程序设计,5.1 汇编语言语句的类型和组成,5.1.1 汇编语言语句的类型,在汇编语言中我们不仅要知道指令系统,而且还必须了解汇编语言语句的组成和类型,了解汇编语言中的编写程序的格式以及格式中各个部分的意义,以便我们能够编写出正确的源程序。,汇编语言有自身的语法规则,汇编语言源程序中有3种基本语句:,指令性语句(由CPU指令组成);指示性语句(伪指令语句)和宏指令语句。指令性语句和指示性语句是最基本的语句,也是最常用的语句。,指令性

2、指令是给CPU的命令,它是由汇编程序翻译成机器语言指令,在程序运行时由CPU来执行,每条指令都对应CPU一种特定的操作,例如:算术运算、逻辑运算、串操作等;而伪指令是给汇编程序的命令,伪指令不汇编成机器语言,仅仅在汇编过程中告诉汇编程序应如何汇编。在汇编中由汇编程序进行处理,例如:定义数据分配,定义过程等。 指令性指令汇编以后,每条指令都产生其对应的机器代码;而伪指令则不产生与之对应的机器代码。 宏指令是使用者利用上述基本语句自己定义的新的指令。,二者的区别是:,例:5个连续字节单元的累加DATASEGMENT;定义数据段D1DB 5 DUP(?);连续的字节单元CCEQU $D1;对单元计数

3、SUMDW 0;为结果保留一个字DATAENDS;数据段定义结束STACK SEGMENT PARA STACK STACK;定义堆栈段DB 100 DUP (?);100字节的栈空间STACKENDS;堆栈段定义结束CODESEGMENT;定义代码段ASSUME DS:DATA,SS:STACK,CS:CODE;对各段进行说明BEGIN:MOV AX,DATA;DS初始化为DATA MOV DS,AX LEA SI,D1;预置源数据的指针,汇编语言程序结构特点,MOV CX,CC+1;预置次数 CLD ; (DF)=0,串指针自动增量LODS BYTE PTR SI;取一个数并修改指针DEC

4、 CX;修改次数MOV AH,0;清AX的高字节CLC;清CF位AGAN:ADC SUM,AX;累加LODS BYTE PTR SI;再取数并修改指针LOOP AGAN;控制循环MOV AH,4CH;完成,返回DOSINT 21HCODEENDS;代码段结束ENDBEGIN;整个程序结束,源程序的一般格式,代码段是必需的。每段必须有且仅有一个名字,以SEGMENT定义段的起始,以ENDS定义段的结束,整个程序结束后需以END收尾。源程序的一般格式为:段名1SEGMENT语句语句段名1ENDS段名2SEGMENT语句语句段名2ENDSEND(标号),汇编语言源程序的结构,段名1 SEGMENT

5、语句行 语句行段名1 ENDS段名2 SEGMENT 语句行 语句行段名2 ENDS END 标号或过程名,一个源程序由若干段组成,如数据段、代码段、堆栈段等;各段由若干条语句行组成;指令必须放在代码段中;为了确保程序的执行和正确返回,必须借助堆栈段;根据编程需要确定是否需要数据段、附加段。,5.1.2 汇编语言语句的组成,1指令性语句:即执行性语句(指令)包括四部分: 标号: 指令操作码 操作数 ;注释 例: AGAN:ADC SUM,AX;累加2指示性语句:即说明性语句(伪指令),由四部分组成: 名字 伪指令 操作数 ;注释 例:SUMDW 0;为结果保留一个字,汇编语言的语句行,指令性语

6、句 指令,与机器码一一对应。 指示性语句 伪指令,可以对源程序进行指示、说明、定义等。注释语句 以分号开始,整行均是对程序的注解,增强可读性。本身不参与汇编,对指令代码无任何贡献。,汇编语言的语句行构成,指令性语句指令标号: 指令助记符 操作数1,操作数2 ;注释,指示性语句伪指令名字 伪指令助记符 参数1,参数2,参数n ;注释,汇编语言中的字符集字符A Z 或 a z注:汇编源程序中,大小写字符功能一样数字0 9注:数字不用于标识符的第一位特殊符号 ?、/、%等 注:标识符中谨慎使用特殊符号,1、汇编语句的说明,汇编语言中的保留字,汇编源程序中标识符不能使用的字符串寄存器名 例:AX、SP

7、 标志符 例:CF、TF 指令助记符 例:MOV、ADD 伪指令符 例:SEGMENT、END 运算符 例:OFFSET、PTR,标识符由编程人员自行定义的、有特殊意义的字符序列。,标识符的使用 可使用字母、数字、特殊字符(? $ _) 不能使用保留字 !符合字符集要求 不用数字开头,第一个符号最好用字母 长度小于 32 个字符 标识符的作用 用作段名、过程名、结构名、宏名等的定义 用作变量名,数据段符号地址的定义 用作代码段标号,标识符(标号、符号地址、变量名),标识符,数据段中的标识符符号地址具有存储地址值和数据类型的特征代码段中的标识符伪指令前的标号定义变量指令前的标号定义标号:标识符与

8、常量 MOV AL,F8H (AL)=(F8H),从符号地址中取数 MOV AL,0F8H (AL)=F8H,常数F8H赋值,常量,整数:必须以数字开头! 二进制数以“B” 结尾 八进制数以“O”或“Q” 结尾 十进制数不带结尾字母,或以“D” 结尾 十六进制数以“H” 结尾 字符串 连续的字节单元,每个单元均存放ASCII码。用包括在单引号中的字母表示(单引号本身不算作字符)。如ABCDEF,对应的数值依次是61H66H。,常量出现在源程序中指令操作数的位置,具有固定值的数值。,变量和标号,段基址:该单元所在段的首址,用相应的段寄存器值表示(16位) 偏移量:该单元在段内的偏移量或有效地址,

9、表示与段首地址之间的距离(16位) 类型:该单元中存放的数据长度类型,可能是字节 (Byte)、字 (Word) 或双字 (Double Word)等,对应于类型值1、2、4,变量编程人员为内存单元起的名字。有3种属性:,标号编程人员为目标地址单元起的名字,对应于该指令在代码段中的存放地址。也有3种属性,仅类型与变量不同:,类型:标号的类型共有远(Far)、近(Near)两种,类型值分别是-2、-1,2 、 表达式与运算符,表达式由运算符和操作数组成的、具有确定结果的有意义的序列,可作为指令的操作数。,运算符共有5类:算术运算符、逻辑运算符、关系运算符、分析运算符、合成运算符。,操作数常量、变

10、量和标号等均可参与运算。对于地址指针,只能进行加/减算术运算。,运算规则表达式的值由汇编程序在编译的过程中自动完成计算,所得确定的运算结果与操作码一起被编译成机器码。,汇编语言的运算符,算术运算符:+、-、*、/、MOD、SHL、SHR逻辑运算符:AND、OR、XOR、NOT关系运算符:EQ、NE、LT、GT、LE、GE分析运算符:SEG、OFFSET、TYPE、SIZE、LENGTH综合运算符:PTR、DS:、THIS、SHORT、HIGH、LOW,算术运算符,数值表达式中可使用所有算术运算符地址表达式仅使用+、-算术运算符算术运算符不影响标志位例:完成80H+90H解:MOV AL,80H

11、+90H;使用数值表达式 ;(AL)=10H、CF=不变 MOV AL,80H ADD AL,90H ;使用加法指令 ;(AL) =10H、CF = 1,算术运算符的使用,若以算术运算表达式作为源操作数,则整个表达相当于立即数;运算结果(返回值)的长度由目操作数决定乘、除运算不带符号除法运算的返回值为整数商表达式的运算不影响标志位 例:MOV AL,80H + 90H 相当于 MOV AL,10H 80H + 90H=10H由汇编程序完成; 指令执行后(AL)=10H,各标志位不变。,逻辑运算符,AND、OR、XOR、NOT,逻辑指令助记符与逻辑运算符形同意不同 逻辑指令助记符出现在指令语句的

12、开始 AND CX,00FFH AND 10AEH 逻辑运算符出现在指令语句的操作数段 AND CX,00FFH AND 10AEH 注:等价指令 AND CX,00AEH,逻辑运算符的使用,若以逻辑运算表达式作为源操作数,则整个表达相当于立即数;运算结果(返回值)的长度由目操作数决定除NOT之外,均为双目运算符表达式的运算不影响标志位 例:AND CX,1F03H AND 72B6H 相当于 AND CX,1202H 1F03H 72B6H = 1202H由汇编程序完成,各标志位不变;CX 1202H在执行过程中完成。,关系运算符,EQ 相等关系 NE 不等关系 LT 小于关系 GT 大于关

13、系 LE 小于等于关系 GE 大于等于关系,进行关系判断时,表达式中所有的数均视为无符号数,关系运算符,EQ、NE、LT、GT、LE、GE,两性质相同的操作数的比较若关系正确为真(T), 有全 1 操作数若关系错误为假(F), 有全 0 操作数例:MOV BL,(PORT LT 5)AND 20H若PORT=2,(PORT LT 5)=0FFH,为真 原式为 MOV BL,20H若PORT=7,(PORT LT 5)=00H,为假 原式为 MOV BL,00H,关系运算符的使用,关系运算的返回值 若关系成立,即为真,返回全1(1个字) 若关系不成立,即为假,返回全0 (1个字) 例:MOV B

14、X ,(PORT LT 5)AND 20H 若 PORT = 2,(PORT LT 5)= 0FFFFH,为真 原式相当于 MOV BX,0020H 若 PORT = 7,(PORT LT 5)= 0000H,为假 原式相当于 MOV BX,0000H,分析运算符,分析运算符(数值返回运算符)的功能,SEG 符号地址段值属性返回符 OFFSET 符号地址偏移量值属性返回符 TYPE 符号地址中数据类型属性返回符 LENGTH DUP重复次数返回符 SIZE 变量总字节数返回符,分析运算符,SEG 取变量/标号的段基值 OFFSET 取变量/标号的段内偏移量 TYPE 取变量/标号的类型值 LE

15、NGTH 取以DUP定义的变量的重复次数 SIZE 取以DUP定义的变量的总字节数,分析运算符,例:定义数据段 DATA 如下:从实际地 02000H 开始存数据,即段地址为 0200H,段内偏移地址从 0000H 开始 DATA SEGMENT VAR1 DB 20,30 VAR2 DW 2000H,3000H VAR3 DD 22003300H DATA ENDS,段地址 = 0200H,0000H,0002H,0006H,VAR1,VAR2,VAR3,分析运算符,SEG 和 OFFSET 应用,MOV BX,SEG VAR1 ;(BX)= 0200H MOV BX,SEG VAR2 ;(

16、BX)= 0200H MOV BX,SEG VAR3 ;(BX)= 0200H MOV BX,OFFSET VAR1 ;(BX)= 0000H MOV BX,OFFSET VAR2 ;(BX)= 0002H MOV BX,OFFSET VAR3 ;(BX)= 0006H,分析运算符,TYPE 的应用,返回变量数据类型所含的字节数 MOV BL,TYPE VAR1 ;(BL)= 1 MOV BL,TYPE VAR2 ;(BL)= 2 MOV BL,TYPE VAR3 ;(BL)= 4 结构名返回结构所含字节数 过程名返回近、远过程属性表示值(-1,-2) 即: 对标号,返回标号的属性值 NEAR

17、、FAR标号的属性值分别是-1、-2,分析运算符,LENGTH 和 SIZE:只对DUP指令有效,否则为1,定义数据段 DATA SEGMENT VAR1 DB 100 DUP(?) VAR2 DW 100 DUP(?) DATA ENDS指令功能 MOV BX,LENGTH VAR1 ;(BX)= 100 MOV BX,LENGTH VAR2 ;(BX)= 100 MOV BX,SIZE VAR1 ;(BX)= 100 MOV BX,SIZE VAR2 ;(BX)= 200,LENGTH 和 SIZE,已有变量定义 VAR1 DW 100 DUP(?) VAR2 DB ? , ? , ? ,

18、 ? 运算符功能 MOV AX,LENGTH VAR1 ;(AX)= 100 MOV BX,SIZE VAR1 ;(BX)= 200 MOV CX,LENGTH VAR2 ;(CX)= 1 MOV DX,SIZE VAR2 ;(DX)= 1,设段的起始地址为02000HDATASEGMENTDBYTEDB 10,10HDWORDDW 100,100HDDWORDDD 12345678HDQWORDDQ 1234567890ABCDEFHDBSDB ABDWSDW ABDWOFFDW OFFSET DWORDDATAENDS,例1:存储器示意图,例2:DATASEGMENTARRAYDB 2 D

19、UP(0,1,2)ARRAY2DW 100 DUP(?)ARRAY3DB 20 DUP(0,1,4 DUP(2),5),DBYTE,DWORD,DDWORD,DBS,DWS,DQWORD,DWOFF,ARRAY,ARRAY2,100个字,ARRAY3,综合运算符,综合运算符(属性修改运算符),PTR 存储器操作数重新定义类型运算符 THIS 存储器操作数重新定义类型运算符 SHORT 页内跳转运算符 HIGH 字数据中高字节数据分离符 LOW 字数据中低字节数据分离符 ES: 段属性前缀符,PTR运算符,PTR的使用 类型 PTR 变量、内存单元或标号 作用 给原有的操作数重新赋定类型。表达式

20、结果返回一个与原有操作数具有相同的段基址和偏移量、不同类型的新操作数,但并不另分配新的存储单元! 可用的类型名称(保留字)变量或内存单元BYTE、WORD、DWORD标号NEAR、FAR,PTR的应用特点(MUL、DIV指令中的应用),MUL BYTE PTR BX ;(AX)(AL)* BX MUL WORD PTR BX ;(DX)(AX)(AX)* BX DIV BYTE PTR SI ;(AL)(AX)/ SI DIV WORD PTR SI ;(AX) (DX)(AX)/ SI ,PTR运算符,PTR的应用特点(JMP 指令中的应用),段内间接近转移 CS不变、IP变 存储器中的 1

21、6 位值为段内 IP 目的地址 JMP WORD PTR BX JMP WORD PTR 2000H 段间间接远转移 CS变、IP变 存储器中的 32 位值为 CS:IP 目的地址 JMP DWORD PTR BX JMP DWORD PTR 2000H,PTR运算符,综合运算符,PTR 与 THIS 的应用,PTR 先定义一个变量类型 再用 PTR 说明一个新的变量类型 VAR1 DW 2030H 定义 VAR2 EQU BYTE PTR VAR1 说明 THIS 先用 THIS 说明一个变量类型 再定义一个新的变量类型 VAR2 EQU THIS BYTE 说明 VAR1 DW 2030H

22、 定义 应用 MOV AL,VAR2 正确 MOV AL,VAR1 错误 MOV AX,VAR1 正确 MOV AX,VAR2 错误,VAR1,VAR2,SHORT运算符,SHORT的使用 SHORT 标号作用 将已有标号说明为短标号,以便于条件转移指令使用。应用AGAIN EQU THIS NEAR ;AGAIN为NEAR标号AGAIN: JBE SHORT AGAGIN ;低于等于/不高于近转移,综合运算符,HIGH、LOW的应用,HIGH 分离字的高 8 位字节 LOW 分离字的低 8 位字节 应用 MOV AH,BX ;指令错,源、目的操作数 类型不匹配 MOV AH,HIGH BX

23、;(AH)=(BH) MOV AH,LOW BX ;(AH)=(BL),HIGH、LOW运算符,HIGH 取得常数或表达式(字)的高字节 LOW 取得常数或表达式(字)的低字节 应用 MOV AL,HIGH 2A3BH ;(AL)=2AH MOV AH,LOW 2A3BH ;(AH)=3BH,运算符的优先级别,同一表达式内可进行多种运算 没有括号时,按优先级别进行运算 同一优先级的运算,按从左到右的顺序进行,8086汇编语言运算符,5.2 伪操作命令,数据类型定义伪指令段定义伪指令段说明伪指令过程定义伪指令符号定义伪指令EQU及=地址计数器伪指令$地址对准器伪指令ORG,数据类型定义伪指令,D

24、B (Define Byte) 变量为字节数据类型 (8位)DW (Define Word) 变量为字数据类型 (16位)DD (Define DWord) 变量为双字数据类型(32位)DQ (Define QWord) 变量为4字数据类型(64位)DT (Define Tbyte) 变量为10字节数据类型(80位),操作数可以为:(1)数值表达式;(2)ASC码字符串;(3)地址表达式;(4)?(只保存内存空间,未定义初始值);(5)DUP 子句,其格式为: 重复次数 DUP (操作数,操作数),DUP子句可以嵌套。,数据类型定义伪指令,变量定义伪指令的使用,使用 变量名 变量定义伪指令 初

25、值(表) ;为变量赋初值 变量名 变量定义伪指令 ? ;保留空间常量、表达式均可作为初值DB的特殊用法 变量名 DB 字符串例:DATA1DW7C00HDATA2DD?DB3FH,66H,70H,TYPE DATA1DATA3DBH72b9 &!,DW、DD的特殊应用,已有字节变量的定义: AVR1 DB ? 可用DW为16位地址指针赋值: DWAVR DW AVR1字变量DWAVR的值为AVR1的16位段内偏移量 可用DD为32位地址指针赋值: DDAVR DD AVR1双字变量DDAVR的值为AVR1的逻辑地址(32位),数据类型定义伪指令,DB、DW 的应用特点,DATA SEGMENT

26、ARE1 DB 20H,30H ARE2 DW 2030HARE3 DB A,B ARE4 DW ABDATA ENDS,ARE1,ARE2,ARE3,ARE4,数据类型定义伪指令,DW、DD用于存储器地址分配,DW分配 16 位地址 DWAVR DW OFFSET AVR1 变量 DWAVR 的类型为 16 位 变量 DWAVR 的值为变量 AVR1 的 16 位偏移地址 DD分配 32 位地址 DDAVR DD AVR2 变量 DDAVR 的类型为 32 位 变量 DDAVR 的值为变量 AVR2 的 32 位目标地址,变量复制语句DUP ( ),DUP的使用 变量名 变量定义伪指令 复制

27、次数 DUP(复制内容)应用 VAR DW 20H DUP(?);保留20H个字空间 XA DD 3 DUP(0);将连续3个双字单元清0 XB DB 2 DUP(0FFH , ? , 4 , 4),TYPE VAR=2 LENGTH VAR=20H SIZE VAR=40HTYPE XA=4 LENGTH XA=3 SIZE XA=12TYPE XB=1 LENGTH XB=2 SIZE XB=8,数据类型定义伪指令,存储器地址分配的应用,DATA SEGMENTORG 0004HAVR1 DW 2030HAVR2 DB 40HDWVR DW OFFSET AVR1DDVR DD AVR2D

28、ATA ENDS,AVR1,AVR2,DWVR,DDVR,0004H,0006H,0007H,0009H,设DATA的段首地址为2000H,段定义伪指令SEGMENT、ENDS,段名标识符 SEGMENT 定位类型组合类型类别 段内定义 段名标识符 ENDS,用于对 DS、ES、SS、CS 段的定义,段定义的相关约定,组合类型:表示与其它段的关系,为连接程序提供信息,可以有6种选择:,定位类型:规定段的起始边界,有4种选择:PAGE:段起始地址的最低8位必须为0。PARA:段起始地址的最低4位必须为0。WORD:段起始地址的最低1位必须为0,即从偶地址开始。BYTE:段起始地址为任意值,即从任

29、何地址开始都行。缺省类型为PARA。,NONE:本段与其它段逻辑上不发生关系,每段都有自己的基地址(缺省选择)。PUBLIC:连接程序首先将本段与其它同名同类别的段相邻地连接在一起,然后为所有这些PUBLIC段指定一个共同的段基址。连接的先后次序由连接命令指定。,STACK:与PUBLIC同样处理,但此段作为堆栈段,SS指向第一个STACK段。COMMON:本段与其它同名同类别段重叠,段基址与最后定义的相同,长度为同名段中最大段的长度。AT表达式:连接程序把本段装在表达式值所指定的段地址(此方式不能指定代码段)。MEMORY:同PUBLIC连接程序将本段定位在被连接在一起的其它所有段之上。,类

30、别:给各段的名字信息,连接程序将类别名相同的段组成一个段组用它们共同的名字作为这个段组的名字。类别必须用单引号括起来。,段定义的相关约定,例:STACKSEGMENT PARA STACK STACK,段说明伪指令ASSUME,ASSUME 伪指令仅用在代码段首行,代码段名 SEGMENT 相关约定 ASSUME CS:段名,DS:段名, 代码段内定义,指令集合代码段名 ENDS例:ASSUME DS:DATA,SS:STACK,CS:CODE,过程定义伪指令,PROC FAR 、ENDP 远过程定义伪指令PROC NEAR、ENDP 近过程定义伪指令,过程名 PROC FAR(NEAR) 过

31、程指令集合 RET过程名 ENDP注:过程定义必须在代码段内 PROC FAR 为定义远过程 PROC NEAR 为定义近过程,符号定义伪指令EQU 、=,格式 符号 EQU 表达式 符号 = 表达式注:符号而非变量,故用EQU、= 定义的 符号不占用存储器单元特点 EQU 不能重复定义 = 可重复定义 ,如 X = X+1,符号定义伪指令的基本形式为:符号名 EQU 表达式符号名 = 常数表达式功能:给表达式指定一个等价的符号名。 说明:(1)=后的表达式只能是常数,对于字符或字符串,在汇编时按整数处理。(2) EQU后的表达式可以是数值、字符串,甚至可以是寄存器名、指令的助记符等。(3)

32、EQU不能重复定义,而“=”伪指令可以重复定义,其作用域从定义点到重新定义之前。,符号定义伪指令EQU 、=,符号定义伪指令,例,DATA SEGMENT ARE1 DB 20H ARE2 EQU 20H ARE3 DW 4142HDATA ENDS注: EQU定义的是常量,故不占存储单元,ARE1,ARE3,0000H,0001H,地址计数器伪指令$,表示下一个地址变量的偏移地址值 SORTD SEGMENT ARRAY DB 25,46,3,75,5 COUNT EQU $ - ARRAY SORTD ENDS ARRAY的偏移地址值为0000H $ 的偏移地址值为0005H COUNT

33、= 0005H 0000H = 5,ARRAY,0000H,0005H,$,把它称为程序计数器。表示位置计数器的当前值,它可以在数值表达式中使用。在程序中,“$”出现在表达式里,它的值为程序下一个所能分配的存储单元的偏移地址。,地址对准器伪指令ORG,下一个地址变量的偏移地址值由ORG确定 DATA SEGMENT ORG 2 VAR1 DB 2,3,4 ORG $ + 3 VAR2 DW 1234H DATA ENDS,VAR1,$ + 3VAR2,0002H,0008H,$,ORG是起始位置设定伪指令,用来指出源程序或数据块的起点。利用ORG伪指令可以改变位置计数器的值。,汇编结束伪指令,

34、END的使用 END 第一条指令的标号或主过程名作用:表示汇编到此结束位于源程序的最后一行。END之后的语句不会被汇编程序翻译,在源程序开始处可以用NAME或TITLE为模块取名字。 NAME伪指令 格式:NAME 模块名 汇编程序将以给出的“模块名”作为模块的名字。 TITLE伪指令 如果程序中没有NAME伪指令,则也可使用TITLE伪指令。 格式:TITLE 正文(text) TITLE伪指令可指定每一页上打印的标题。同时,若程序中没有NAME伪指令,则汇编程序将用text 中的前6个字符作为模块名。text最多可有60个字符。 若程序中既无NAME又无TITLE伪指令,则将用源程序名作为

35、模块名。所以NAME及TITLE伪指令并不是必要的,但一般常使用TITLE,以便在列表文件中能打印出标题来。,程序开始伪指令(自学),EVEN伪操作使下一个字节地址成为偶数。一个字的地址最好从偶地址开始,所以对于字数组为保证其从偶地址开始,可以在它前面用EVEN伪操作来达到此目的。例如:DATA_SEG SEGMENT EVEN WORD_ARRAY DW 100 DUP(?) DATA_SEG ENDS,对准伪指令,格式:名称LABEL 类型 格式中的类型有BYTE、WORD、DWORD、结构名、记录名、NEAR、FAR共 7 种。前 5 种是属于变量的类型,后两种是属于标号的类型。 格式中

36、的名称就是语句的名称,为一标识符,若后面的类型是前 5 种之一,那么该名称就是变量名;当类型为后两种时,该名称就是标号。我们已经知道,变量与标号除具有类型属性外,还具有段和偏移地址的属性,名称的这两个属性就是汇编程序汇编到该语句时语句所在的段和偏移地址。,LABEL伪指令,BARRAY LABEL BYTE; AARRAY DW 100 DUP(?) 上面定义了两种类型的变量,BARRAY为字节类型, AARRAY为字类型, 它们的段和偏移地址属性完全相同,都是下面保留的 100 个字空间的首地址。其目的是为了程序中可以对这100个字空间作两种不同类型的操作。在这一点上, LABEL的作用与前

37、面介绍的PTR操作符的作用相类似。,该伪指令的功能是定义某变量名或标号的类型的。它虽具有段与偏移地址的属性,但它并不占内存单元。 例如:,LABEL伪指令,在我们的程序中,总会有数据的输入和输出。实现数据的输入与输出将涉及输入、输出设备的管理,而对输入、输出设备管理的具体操作是十分繁琐的,好在系统为我们提供了方便。实际上,无论是用户程序还是DOS系统本身,都离不开输入、输出操作,PC DOS系统将输入、输出管理程序编写成一系列子程序,不仅系统可以使用,用户也可以像调子程序一样方便地使用它们。在IBM PC系统中,除了DOS系统中有一组输入、输出子程序可供用户调用外,在系统的ROM中也有一组输入

38、、输出管理程序可供用户使用,这组程序通常称为ROM BIOS(ROM Input/Output System)。,5.3 DOS系统功能调用和BIOS中断调用,调用系统提供的子程序,通常称为系统功能调用。功能调用的基本方法是采用一条软中断指令INT n。所谓软中断是以指令的方式产生的中断,当CPU执行该指令时,就像响应外部中断一样的方式转入中断处理程序,中断处理程序结束后又返回到INT指令的下一条指令处。指令中的n为中断类型号,不同的n将转入不同的中断处理程序。所以,系统所提供的处理输入、输出的子程序是以中断处理程序的方式编写的。关于中断和如何转向中断处理程序以及中断处理程序的结构,将在第7章

39、中详细介绍。本节将主要说明与基本输入、输出有关的DOS系统功能调用的调用方式及其用途,目的是为程序设计中实现输入、输出操作打下基础。,DOS功能调用,DOS功能调用,DOS系统功能调用主要是由软中断指令INT 21H实现的,这是一条功能极强的指令。当累加器AH中设置不同的值时,指令将完成不同的功能,我们称AH中设置的内容为功能号。该指令的功能大体可分为输入、输出设备管理、件管理及目录管理三个方面。这里,我们主要介绍输入、输出设备管理的功能及调用方式,DOS功能调用的其余功能请参阅附录C。 下面给出AH中设置的值与其对应的功能关系。,DOS功能调用,带回显的字符输入,功能号01H,功能:从标准输入设备(如键盘)输入一个字符,并显示在标准输出设备(如CRT)上。如无字符输入,则等待。入口参数:无返回值:AL = 输入字符的ASCII码例:MOV AH,01H;功能编号 INT 21H;调用 CMP AL,0DH;输入字符是回车符吗? ,字符输出,功能号02H,功能:将一个字符(ASCII码)输出到标准输出设备(如CRT)上入口参数:DL=即将输出字符的ASCII码返回值:无例:MOV DL,$;欲输出一个“$”符号 MOV AH,02H;功能编号 INT 21H;调用,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报