版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 微型计算机汇编语言及汇编程序汇编语言和机器语言相比,突出优点就是可以使用符号,即使用助记符表示指令的操作码和操作数,用标号和符号来代替地址、常量和变量。汇编语言编写的程序不能由机器直接执行,而必须翻译成由机器代码组成的目标程序,这个过程叫做汇编。用来把汇编语言编写的程序自动翻译成目的程序的软件叫做汇编程序。汇编语言源程序源程序汇编汇编程序目的程序用汇编语言编写的程序叫做源程序。汇编语言大量被用于编写计算机系统程序、实时通信程序、实时控制程序等。第一节 宏汇编程序语言的基本语法一、伪指令语句格式伪指令语句中的伪指令本身不产生对应的机器目标代码。它仅仅是告诉汇编程序,对后面的指令语句和伪指
2、令语句的操作数应该如何产生机器目标代码。伪指令格式如下示:标号名注释伪指令操作数,1、标号名字段这是任选字段。标号名可以是常量名、变量名、过程名、结构名、记录名等。标号名就表示一个常量或存储器地址。2、伪指令字段这是伪指令语句不可省略的主要部分。它们是伪指令语句要求汇编程序完成的具体操作命令。3、操作数字段本字段是否需要,需要几个,需要什么样的操作数等都由伪指令字段中伪指令来确定。操作数可以是一个常数、字符串、常量名、变量名、标号、一些专用的符号。4、注释字段这是一个任选字段,它必须以分号为开始,它的作用与指令语句的注释字段相同。二、常数、变量和标号1、常数常数分为数值型常数和字符型常数,分别
3、为:(1)二进制数 (2)八进制数 (3)十进制数 (4)十六进制数 (5)实数:它由整数、小数和指数3部分组成。这是计算机中的浮点数表示法。(6)字符串常数:用引号括起来的一个或多个字符。这些字符以ASCII码形式存储在内存中。如“AB”,在内存中就是41H、42H。在程序中,常数主要出现在:(1)指令语句中源操作数中作立即数,它应与目的操作数的位数相一致,可以是8位或16位。如:MOV AX,0A5F1H(2)在指令语句的基址加变址的寻址方式中作位移量,如:MOV BX,SI+32H(3)在数据定义的伪指令中,如:DB 12HDW 1234HDD 12345678HDB ABCD2、变量变
4、量是代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以修改。为了便于对变量的访问,它常常以变量名的形式出现在程序中,它可以认为是存放数据存储单元的符号地址。(1)变量的定义与预置定义变量就是给变量分配存储单元,且对这个存储单元赋于一个符号名变量名,同时将这些存储单元预置初值。VAR-DATA SEGMENT ;定义一个数据段DATA1 DB 12H ;定义DATA1=12HDATA2 DB 34H ;定义DATA2=34HDATA3 DW 5678H ;定义DATA3=5678HVAR-DATA ENDS经过定义的变量,每个变量均有3个属性。1)段属性(SEG):表示变量存放在哪一个
5、逻辑中,例如,上面所定义的变量,它就是在数据段中。当在指令中要对这些变量进行存取操作时,事先要把它们所在段的段基值存放在某一个段寄存器(如DS)中。2)偏移量属性(OFFSET):表示变量在逻辑段中离段起始点的字节数。例如,变量DATA1的偏移量为0,而DATA2的偏移量为1,DATA3偏移量为2。上述段和偏移量两个属性就构成了变量的逻辑地址。3)类型属性(TYPE):表示变量占用存储单元的字节数。这一属性是由数据定义伪指令DB、DW、DD来规定的。变量DATA1、DATA2是用DB定义的,它的类型属性为字节;而DATA3是用DW定义的,类型属性为字;如果用DD定义,类型属性为双字。(2)数据
6、定义伪指令这种伪指令主要为数据项分配存储单元并预置初值。它的格式为:变量名DBDWEDD表达式1表达式2、其中表达式1、表达式2、是给变量赋予的初值。表达式可以有以下几种情况:1)数值表达式。DAT-BYTE DB 50H,50变量DA-BYTE的内容为50H,它的下一个字节为32H。2)?表达式:不带引号的?表示可预置任何内容。例:DA-B DB ?,?DA-W DW ?,?第一条语句是要求汇编程序分配两个字节单位,第2条语句是要求分配两个字单元。这些单元里现在可以是任意值。3)字符串表达式:对于DB伪指令,为字符串中每一个字符分配一个字节单元。字符串必须是用引号括起来且不超过255个字符。
7、字符串自左至右以字符的ASCII码按地址递增的排列顺序依次存放。如:STRING1 DB ABCDEF,它们在存储器中存放的情况见下图:41H42H43H44H45H46HSTRING142H41H44H43H46H45H42H41H00H00H44H43HSTRING2STRING300H00H对于DW的伪指令,可以给两个字符组成的字符串分配两个字节存储单元,而且这两个字符ASCII码的存储顺序是前一字符在高字节,后一个字符在低字节,每一个数据项不能多于两个字符。如STRING2 DW AB,CD,EF,具体在存储器中存放的情况见上图。对于DD伪指令,仅可给两个字符组成的字符串分配4个字节单
8、元,且这两个字符ASCII码是存储在两个低字节中,两个高字节均存放00H。STRING3 DD AB,CD,具体在存储器中存放的情况见上图。4)带DUP表达式:DUP是定义重复数据操作符。在表达式中,使用DUP操作符格式是:变量名DBDWEDD表达式1DUP(表达式2)其中表达式1是重复的次数,表达式2是重复的内容。如D-B1 DB 20H DUP(?)D-B2 DB 10H DUP(ABCD)D-W1 DW 10H DUP(4)第1语句表示保留20H个字节,每个字节可预置任意内容。第2语句是重复10H个字符串“ABCD”,共占有40H个字节。第3语句是重复10H个字单元,每个单元预置为4,共
9、占有20H个字节。3、标号标号是一条指令目标代码的符号地址,它常作为转移指令的操作数。例如START: AA: 与变量相似,每个标号亦具有3个属性:(1)段属性(SEG)表示这条指令目标代码在哪个逻辑段中。(2)偏移量属性(OFFSET)表示这条指令目标代码的首字节在段内离段起始点的字节数。同样,上述两个属性构成了这条指令目标代码首字节的逻辑地址。(3)距离属性:表示本标号可作为段内或段间的转移特性。距离属性分为两种:NEAR,本标号只能被标号所在段的转移和调用指令所访问;FAR,本标号可被其他段的转移和调用指令访问。三、表达式和运算符表达式由操作数和运算符组成,在汇编时一个表达式得到一个值。
10、用一个运算符可以对一个操作数或几个操作数进行运算,这就构成一个表达式,从而得到一个新的值。86系列CPU包括六类运算符:算术运算符、逻辑运算符、关系运算符、分析运算符、组合运算符和分离运算符。1、算术运算符、×、÷()是加减乘除运算符。MOD是除法取余运算符。例如:32 MOD 5=2SHL是左移操作符。例如:21H SHL 2=84HSHR 是右移操作符2、逻辑运算符AND 是逻辑“与”操作符,例如:24H AND 0FH=04HOR 是逻辑“或”操作符,例如:24H OR 0FH=2FHXOR 是逻辑“异或”操作符,例如:24H XOR 0FH=2BHNOT 是逻辑“非
11、”操作符,例如:24H NOR 0FH=0DBH3、关系运算符关系运算符是逻辑判定式,当为“真”时结果取0FFFFH,当为“假”时结果取为0。关系运算是数值型的。EQ 等于。例如,已赋给符号PP为25,则25 EQ PP=0FFFFHNE 不等于。例如,25 NE PP=0LT 小于。例如,25 LT 26=0FFFFHLE 小于等于。例如,25 LE 26=0FFFFHGT 大于。例如,26 GT 25=0FFFFHGE 大于等于,例如,24 GE PP=04、分析运算符(1)SEG 求段基址格式:SEG <符号名>(2)OFFSET 求偏移地址格式:OFFSET <符号名
12、>(3)TYPE 求符号名类型值格式:TYPE <符号名>符号名类型值见下表:类型1字节2字节4字节8字节10字节近程远程类型值124810-1-2(4)SIZE 求为符号名分配的字节数格式:SIZE <符号名>为符号名定义的数据项必须是用重复格式DUP( )定义的。(5)LENGTH 求为符号名分配的项数格式:LENGTH <符号名>为符号名定义的数据项必须是用重复格式DUP()定义的。SIZE <符号名>=(LENGTH<符号名>)*(TYPE<符号名>)5、组合运算符组合运算符是用来改变或建立符号名的新类型。(
13、1)定义符号名为新类型格式:<类型> PTR <符号名>例如:设内存变量D1是字节属性,把它的两个字节内容送到AX中。属性符号见上表。MOV AX,WORD PTR D1这里的符号名可以是间址、变址寻址、基址加变址寻址表示的存储器操作数。(2)指定新类型与PTR类似,可为某个符号名建立新类型。格式:THIS <类型>例如:LABC EQU THIS BYTE LABD DW 4321H,2255H MOV AL,LABC ;AL=21H MOV AX,LABD ;AX=4321H符号名LABC与LABD有相同的段地址和偏移地址,但LABC是字节类型,而LAB
14、D是字类型。6、分离运算符(1)LOW 取低字节格式:LOW <表达式 >(2)HIGH 取高字节格式:LOW <表达式 >例如:SSY=2050HMOV AL,LOW 3080H ;AL=80HMOV AH,HIGH SSY ;AH=20HMOV CL,LOW 3A4BH ;CL=4BH7、汇编运算符的优先级优先级序号运算符0括号中的表达式1LENGTH、SIZE、WIDTH、MASK2PTR、OFFSET、SEG、TYPE、THIS、段前缀(段寄存器名)3HIGH、LOW4*、/、MOD、SHL、SHR5+、6EQ、NE、LT、LE、GT、GE7NOT8AND9OR
15、、XOR10SHORT第二节 伪指令伪指令没有对应的机器指令,它不是由86系列CPU来执行,而是由MASM-86识别,并完成相应的功能。它在很大程序上规定了MASM-86的性能,因此也可称之为汇编命令。MASM-86中使用的伪指令可分成14类,下面逐一进行介绍。1、符号定义伪指令(赋值语句)(1)名字 EQU表达式(2)名字 =表达式该语句把表达式的值赋给符号名,在同一程序中,用EQU语句赋值的符号名不能被重新赋值,但用“=”号赋值的符号名可以被重新赋值。“< >”号表示此项不能默认,但符号不需要输入。2、内存数据定义伪指令(1)字节定义伪指令名字 DB表达式或数据项表表达式值或项
16、表中的每一项是一个字节数,它们从符号名地址开始按字节连续存放,直到表中数据项结束(地址递增方向)。方括号 表示该项可以默认。(2)字定义伪指令名字 DW表达式或数据项表除表达式值或项表中的每一项是两个字节数之外,其它与DB伪指令相同。(3)4字节定义伪指令名字 DD表达式或数据项表表达式值或项表的每一项是4个字节数,该语句可以定义有小数点的十进制数或用科学表示法表示的数据,此时在汇编时被译成4字节浮点数,尾数在低地址一端,阶码在高地址一端。浮点格式在第一章中介绍。例如N1 DD 25ABH,0A002677HN2 DD 2.5,3.2E+2(4)8字节定义伪指令名字 DQ表达式或数据项表表达式
17、值或数据项表的每一项是8字节数,各项从小地址一端连续存放,允许浮点数形式,与DD伪指令相同。高4个字节填0。(5)10字节定义伪指令名字 DT表达式或数据项表表达式值或数据项表的每一项是10字节数,允许浮点数形式,与DQ伪指令相同;若项表中的数据项是十进制数书写的,汇编程序按组合的BCD码格式存放,最低字节在高地址一端存放,数据的最高字节的最高位是符号位,“0”表示正,“1”表示负。表达式或数据表多于一项时,项与项之间用逗号或空格分隔,表达式或数据项重复书写时,可用重复格式简写。例如D1 DB 12H,13H,12HD1 DB 3 DUP(12H)在指令中引用上述定义的符号时,必须考虑符号名的
18、类型,否则会出现错误提示。例如MOV AX,D1 ;D1类型错误MOV AX,WORD PTR D1 ;正确3、段定义伪指令存储器在逻辑上是分段的,各段的定义由伪指令实现。格式:段名 SEGMENT 定位方式连接方式类别名 段名 ENDS段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB。SEGMENT后面的参数是可选项。(1)定位方式(定位类型):定位方式指定段的起始地址边界,方式有4种。PAGE指定起始地址的低8位是0,即其值能被256整除(称为页边界)。PARA指定起始地址的低4位是0,即其
19、值能被16整除(称为段边界)。这是系统隐含定位方式。WORD指定起始地址的低位是0,即其值能被2整除(称为字边界)。BYTE指定起始地址是任意值。以上4种边界如下所示:×××× ×××× ×××× 0 0 0 0 0 0 0 0 PAGE×××× ×××× ×××× ×××× 0 0 0 0 PARA×
20、15;×× ×××× ×××× ×××× ××00 WORD×××× ×××× ×××××××× ×××× BYTE(2)连接方式(组合类型):连接方式告诉连接程序本段与其他段可按某种方式连接,它有6种选择。PUBLIC告诉连接程序把本段与
21、其他同名同类别的段连接起来,公用一个段的起点地址,形成一个物理段。STACK表示本段是堆栈段,连接方式同PUBLIC,连接后的段起始地址在SS寄存器中。连接程序要求源程序至少要有一个堆栈段,否则提示错误,此时,系统取约定堆栈段值。NONE(空缺)表示本段不与任何段连接,这是系统隐含连接方式。COMMON表示本段与同名同类别的段共用同一段起始地址,即同名同类段相重叠,段的长度是最长段的长度。MEMORY表示本段在连接时定位在所有段之上,即高地地址。AT表达式表示本段定位在表达式值指定的段地址处。(3)类型名:类型名是合法的自定义符,它必须用单引号括起来。凡是类别名相同的段在连接时均按先后顺序连接
22、起来。4、段寄存器说明伪指令格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2,该伪指令告诉汇编程序在汇编时,段寄存器CS:,DS:,SS:和ES:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存器实际值(CS除外)还要由传送指令在执行程序时赋值。5、过程(子程序)定义伪指令格式:过程名 PROC NEAR(FAR) 过程名 ENDP过程名是自定义符。定义过程是为实现子程序调用而设的。调用格式为:CALL 过程名过程由RET指令返回,它可以不是最后一条指令,它在过程中可以设多点返回。过程起始名和终止名必须相同。类型NEAR和FAR默认时系统约定是近过程,当选NEA
23、R时,过程是段内调用,过程中的RET是段内返回。当选FAR时,过程是段间调用,过程中的RET是段间返回。6、模块开始伪指令格式:NAME 模块名该伪指令指明程序模块的开始,并指出模块名。模块名是自定义符,它不能是系统保留字,每次汇编只能出现一次。若该伪指令默认,则取TITLE语句中的页标题前6个字符;若没有TITLE语句,则取源程序文件名为模块名。7、模块结束伪指令格式:EDN 启动标号或过程名该伪指令告诉汇编程序源文件结束,并给执行程序的入口位置。启动地址只有在主模块才有意义。8、定位伪指令格式:ORG 表达式该指令把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,
24、直到遇到新的ORG指令。表达式的值是一个无符号数。9、列表伪指令(1)建立标题格式:TITLE 标题为列表文件每页第一行定义大标题(2)建立小标题格式:SUBTTL 小标题为列表文件每页定义小标题,输出在大标题之后(3)自动排版(行数、列数)格式:PAGE 行数、行字数为列表文件定义每页行数(10255)和每行字符数(60132),默认值是66行,80列10、系统隐含进位制伪指令格式:·RADIX 表达式定义在源程序中书写数据时的隐含进位制方式。表达式的值是216之间的十进制数,要遇到新的·RADIX语句后才改变隐含进位制。例如,表达式取值是8时,书写默认后缀的数据是八进制
25、而不是十进制。11、连接伪指令连接伪指令主要解决多模块的连接问题,对一个大程序来说,往往要分模块编程,分模块调试,最后再系统连接与调试。连接伪指令为多模块连接进行说明。(1)公用符号伪指令格式:PUBLIC 符号名1,符号名2,本模块用PUBLIC伪指令说明的自定义符号名可由其他程序模块引用,没有说明的符号名不能被其他模块引用。符号名可以是变量名、标号、过程名或符号常量等。(2)引用符号伪指令格式:EXTRN 符号名1:类型,符号名2,类型在本模块引用的在其他模块定义的符号名必须用EXTRN进行说明,否则不能引用。此外还应注意,所引用的外模块定义的符号名还应是用PUBLIC伪指令说明过的。类型
26、是指符号名的类型,它们可以是:内存变量型:BYTE,WORD,DWORD过 程 型:NEAR,FAR数 值 型:ABS(3)插入伪指令(或称包含伪指令)格式:INCLUDE 模块名在本模块汇编时,把另一模块插入该伪指令处一起汇编,被插入的模块可以是不完整的。(4)合段伪指令(或称组合伪指令)格式:组合 GROUP 段名1,段名2,把其后指定的段组合在一个64KB的物理段中,组名和段名都是自定义符,但不可重名。12、记录伪指令(1)记录定义伪指令格式:记录名 RECORD 段名1:字段宽,段名2:字段宽,记录定义伪指令完成对内存单元二进制位的定义,这在实际应用中可以实现按位开关量或按位组合信息的
27、处理。记录名和字段名是自定义符,字段宽度是116常数。记录是把116个二进制位分为段并赋于一个字段名。记录定义伪指令不真正为记录分配内存单元,它只是在汇编时进行记录名、字段名以及记录长度的说明。(2)记录存储单元分配及赋值格式:变量名 记录名胜古迹字段值表变量名是自定义符,字段值表中的各字段值赋给记录的各字段中,其顺序与记录定义的顺序相同,若字段值表中的某些项默认,则默认值为0。应用时尖括号“ ”不能默认。例如TAN RECORD X:6,Y:4,Z:6AP TAN 5,10,BP TAN 12,20此例在存储器中分配两个记录,每个记录长是两个字节(16位)。(3)记录操作符1)WIDTH格式
28、:WIDTH 记录名(或字段名)用该操作符可求出记录或字段所占的位数。例如MOV AX,WIDTH TAN ;16送AXMOV BH,WIDTH Y ;4送BH2)MASK格式:MASK 记录字段名用该操作符可返回记录字段位或使用情况,它是8位或16位二进制数,1表示是该字段位,0表示不是该字段位。例如MOV AL,MASK Z ;00111111B送ALMOV BL,MASK Z ;11111100B送BL13、结构伪指令结构伪指令是把多个数据定义语句组织成一个结构,而把每一个数据定义语句称为一个结构字段,内存变量名称为字段名。(1)结构定义格式:结构名 STRUC 数据定义语句 结构名 E
29、NDS结构定义不真正为结构分配存储空间,它是在汇编时进行结构说明的。(2)结构存储单元分配及赋值格式:变量名 结构名胜古迹字段值表变量名是自定义符,字段值表的各字段值赋给结构的各字段中,其顺序与结构定义的顺序相同,若字段值表中某些项默认,则保留初始值。应用时尖括号“ ”不能默认。例如TAN1 STRUC D1 DB 2,25,10H D2 DB WTAN SYY DB ?TAN1 ENDSSUN TAN1 ,DOG1,2CAT TAN1 ,beg,在存储器中分配了两个结构单元。(3)结构引用格式:结构变量名.结构字段名例如MOV DH,SUN.SYY ;2送DHMOV AL,CAT.SYY ;
30、0送AL14、块注释伪指令格式:COMMENT 定界符 注释 定界符定界符是自定义任何非空字符。例如,COMMENT /注释文/第三节 宏指令为了简化汇编程序的书写,把一些频繁出现的程序段定义为“宏指令”,当程序中遇到这个程序段时,只需用一条宏调用语句,这样有效地缩短了源程序的长度,使源程序易读,也减少了由于重复书写而此起的错误。宏调用与过程调用的区别如下:(1)宏调用语句由宏汇编程序MASM-86中的宏处理程序来识别,并完成相应的处理;而调用过程的CALL语句由CPU来执行。(2)汇编语言源程序在汇编过程中要将宏指令所代替的程序段汇编成相应的机器代码,并插入到源程序的目标代码中,每次调用均要
31、插入。而“过程”经汇编后的机器代码是与主程序分开而独立存在的,其目标代码在存储器中只需保留一份。(3)过程调用需要保留程序的断点和现场,待过程执行完毕还要恢复现场和断点,这些操作需要耗费CPU的时间,而宏调用则不需进行这些操作。(4)在每次宏调用时允许修改有关参数,使得同一条宏指令在各次调用过程中可完成不同的操作;而“过程”一旦被定义,一般不允许修改。在使用高级语言时,各语句的定义是由相应的编译程序去处理的,但宏指令却不一样,它需要定义。宏指令的使用要经过如下3个步骤:(1)宏定义:对各个宏指令进行定义,并分别起一个名字。(2)宏调用:在需要使用的地方,通过宏指令名来调用它。(3)宏扩展:由宏
32、汇编程序用宏定义中的指令来代替宏调用中的宏指令名。1、宏代换语句格式:宏名 MACRO形式参数1,形式参数2,。 宏体(指令序列) ENDM功能:宏代换语句为指令序列定义一个宏名,称为宏指令,宏名可以像指令一样在程序中引用。形式参数是任选项,可用来代换宏体中某些参数或符号。当代换指令中的称号时,在其前面需加一个宏代换符&。例如:AH MARCO Y,X MOV CL,X RO&Y CL ENDM经宏代换语句定义的宏名,在应用时可直接引用,称为宏调用。宏调用时,形式参数要用实在参数取代,顺序也应与形式参数顺序相同。例如AH R,5源程序在汇编后,在引用宏名的地方,插入了宏体,它在
33、。LST文件列表时可以看到,其中有+号的指令便称为宏扩展。宏指令可以嵌套,并可与子程序联合嵌套。2、局域符号定义语句格式:LOCAL 符号1,符号2,。功能:指出符号1,符号2,。仅在宏代换中有意义,其目的是在宏扩展时不会引起符号重复定义的错误。LOCAL语句必须紧跟在MACRO之后。3、删除宏定义语句格式:PURGE 宏定义名1,宏定义名2,。功能:删除(注销)程序中引用的宏指令,使之在宏调用的地方不再生成宏扩展。4、退出宏定义格式:EXITM功能:在宏体或重复定义的语句中,遇到EXITM语句时,终止以后的宏扩展。5、重复定义语句(1)格式:REPT表达式 指令序列 ENDM功能:重复执行R
34、EPT与ENDM之间的指令,表达式是重复次数。6、重复定义语句(2)格式:IRP 形式参数,参数1,参数2,。 指令序列 ENDM功能:重复执行IRP与ENDM之间的语句,每次重复,将一个参数代入形式参数中,直到最后一个参数代换为止。7、重复定义语句(3)格式:IRPC 形式参数,字符串 指令序列 ENDM功能:重复执行IRPC与ENDM之间的语句,每次重复,将一个字符代入形式参数中,直到最后一个字符代换完为止。8、包含汇编语句格式:INCLUDE 文件名功能:在程序汇编时,把INCLUDE指示的文件插入该语句处一起汇编。第四节 系统功能调用为给编写汇编语言源程序提供方便,MS-DOS系统中设
35、置了几十个内部子程序,它们可完成I/O设备管理、存储管理、文件管理和作业管理等功能。即它们是几十个独立中断服务程序,它们的入口已由系统置入中断入口地址表中,在汇编语言源程序中可用软中断指令调用它们。一般常用的软中断指令有8条,系统规定它们的中断类型码为20H27H,它们各自的功能及入口/出口参数见下表。软中断指令功能入口参数出口参数INT 20H程序正常退出INT 21H系统功能调用AH=功能号,相应入口号数相应出号数INT 22H结束退出INT 23HCTRL-Break处理INT 24H出错退出INT 25H读盘AL=驱动器号CX=读入扇区数DX=起始逻辑扇区号DS:BX=内存缓冲区地址C
36、F 0:成功 1:出错INT 26H写盘AL=驱动器号CX=写盘扇区数DX=起始逻辑扇区号DS:BX=内存缓冲区地址CF 0:成功 1:出错INT 27H驻留退出这些软中断完全隐蔽了设备物理特性和接口方式,调用它们时只需要先设置好入口参数,随后安排一条软中断指令“INT n”(n=2027H),即可转去执行相应的子程序。其中“INT 21H”是系统功能调用,它本身包含80多个子程序,每个子程序对应一个功能号,其编号从057H。系统功能调用中的几十个子程序成为汇编语言程序员的重要工具,程序员不必了解所使用设备的物理特性、接口方式及内存分配等,不必编写繁锁的控制程序。调用它们时采用统一的格式,只需
37、使用以下3个语句。(1)传送入口参数到指定寄存器中;(2)功能号送入AH寄存器中;(3)INT 21H有的子程序无入口参数,则只需安排后两个语句,调用结束后,系统将出口参数送到指定寄存器中或从屏幕显示出来,例如2号系统功能调用可用如下指令:MOV DL,要求打印的字符MOV AH,2INT 21H调用结果是将DL寄存器中的可打印字符通过屏幕显示输出(或打印机打印输出)。1、键盘输入单字符这是1号系统功能调用,使用格式如下所示:MOV AH,1INT 21H它没有入口参数,执行1号系统功能调用时,系统等待键盘输入,待程序员按下任何一键,系统先检查是否Ctrl-Break键,如果是则退出,否则将键
38、入字符的ASCII码置入AL寄存器中,并在屏幕上显示该字符。2、键盘输入字符串这是0AH号系统功能调用,其功能是将键盘输入的字符串写入到内存缓冲区中,因此必须事先在内存储器中定义一个缓冲区。其第1字节给定该缓冲区中能存放的字节个数,第2字节留给系统填写实际键入字符个数,从第3个字节开始用来存放键入的字符串,最后键入回车()键表示字符串结束。如果实际键入的字符数不足填满缓冲区时,则其余字节填“0”;如果实际键入的字符数超过缓冲区的容量,则超出的字符将被丢失,而且响铃,表示向程序员出出警告。0AH号系统功能调用的使用格式如下所示: ;定义缓冲区 BUF DB 20 DB ? DB 20 DUP(?
39、) 0AH号系统功能调用 MOV DX,OFFSET BUF MOV AH,0AH INT 21H此上程序中,由变量定义语句定义了一个可存放20个字节的缓冲区,执行到INT 21H指令时,系统等待用户键入字符串。程序员每键入一个字符,其相应的ASCII码将被写入缓冲区中,待程序员最后键入回车()键时,由系统输出实际键入的字符数,并将其写入缓冲区的第2字节串。3、输出单字符这是2号系统功能调用,使用格式如下示:MOV DL,AMOV AH,2INT 21H执行2号系统功能调用时,将置入DL寄存器中的字符从屏蔽上显示输出(或打印机打印输出)。4、输出字符串这是9号系统功能调用,其功能是将指定的内存
40、缓冲区中的字符串从屏蔽显示输出(或打印输出)。缓冲区中的字符串以“$”字符作为结束标志。9号系统功能调用的使用格式如下所示: BUF DB good bye $ MOV DX,OFFSET BUF MOV AH,9 INT 21H 执行9号系统功能调用时,将内存缓冲区BUF中存放的字符串(以“$”字符为结束)送屏蔽显示输出(或送打印机)。5、直接控制台输入/输出单字符这是6号系统功能调用,如果(DL)=0FFH,则表示是从键盘输入单字符送AL寄存器中;如果(DL)0FFH,则表示是将DL寄存器中内容送屏蔽显示输出。它们的使用格式如下: MOV DL,0FFH MOV AH,6 ;键盘输入单字符
41、送AL中 INT 21H MOV DL,A MOV AH,6 ;将DL中的字符“A”送屏蔽显示 INT 21H6、无回显直接控制台输入单字符这是7号系统功能调用,等待从标准输入设备输入单字符置入AL寄存器中,但不送屏幕显示。其使用格式如下: MOV AH,7 INT 21H它是没有入口参数,系统等待从控制台标准输入设备输入单字符后,将其ASCII码置入AL寄存器中。7、无回显键盘输入单字符这是8号系统功能调用,等待从键盘输入单字符,将其从ASCII码置入AL寄存器中。但不送屏幕显示,其使用格式如下: MOV AH,8 INT 21它没有入口参数,与1号系统功能调用的区别仅在于键入的字符不送屏幕
42、显示。8、从串口输入单字符这是3号系统功能调用,其使用格式如下: MOV AH,3 INT 21H它没有入口参数,系统将从异步通信口串行输入的字符置入AL寄存器中。9、向串口输出单字符这是4号系统功能调用,其使用格式如下: MOV DL,$ MOV AH,4 INT 21H执行结果将DL寄存器中的字符通过异步通信口串行输出。10、返回操作系统这是4CH号系统功能调用,其使用格式如下: MOV AH,4CH INT 21H它没有入口参数,执行结果是结束当前正在执行的程序,并返回操作系统。屏幕显示操作系统提示符(N),N为当前使用的驱动器名。11、设置日期这是2BH号系统功能调用,其功能是设置有效
43、日期。例如,当前需要设置的日期是1990年12月26日,那么应将年号1990以装配型BCD码形式置入CX寄存器中,将月号12置入DH寄存器中,将日期26装入DL寄存器中。其使用格式如下: MOV CX,1990H MOV DH,12H MOV DL,26H MOV AH,2BH INT 21H执行的结果是将有效日期设置为1990年12月26日,如果设置成功,则0送AL寄存器,否则0FFH送AL寄存器。从此以后日期会自动修改。12、取得日期这是2AH号系统功能调用,其功能是将当前有效日期取到CX和DX寄存器中,存放格式与设置日期时相同,其使用格式如下: MOV AH,2AH INT 21H它没有
44、入口参数,执行结果是将年号置入CX寄存器中,月份和日期置入DX寄存器中。13、设置时间这是2DH号系统功能调用,其功能是设置有效时间。例如,当前有效时间是8点15分20.5秒,那么应将小时数8置入CH寄存器中、分钟数15置入CL寄存器中,秒数20置入DH寄存器中,百分之一秒数50置入DL寄存器中。其使用格式: MOV CX,0815H MOV DX,2050H MOV AH,2DH INT 21H执行结果是将当前有效时间设置为8点15分20.5秒以后会自动修改时间。如果设置成功,则将AL寄存器内容清“0”,否则将AL寄存器置全“1”。14、取得时间这是2CH号系统功能调用,其功能是将当前时间置
45、入CX和DX寄存器中,存放格式与设置时间相同。其使用格式如下: MOV AH,2CH INT 21H它没有入口参数,执行结果是将当前时间送入CX和DX寄存器中供使用。第五节 汇编程序的功能及汇编过程一、汇编程序的功能汇编程序的主要功能是将由汇编语言(助记符)编写的源程序翻译成用机器语言(二进制代码)编写的目标程序。可以用下图表示和说明:汇编语言源程序文件(.ASM)汇编程序(MASM或ASM)目标代码文件(.OBJ)列表文件(.LST)交叉索引文件(.CRF)目标代码文件就是机器码文件,在目标代码文件中的地址数据还是浮动的(相对的),因此,它还不是直接运行;列表文件包含了程序的逻辑地址、代码程
46、序及源程序对照清单,并在该文件后附有引用符号表,该文件可用DOS的TYPE命令输出;交叉索引文件包含了符号定义行号和引用行号,该文件不能用TYPE命令输出,它需要执行CREF文件后生成索引列表文件(.REF)才能输出。二、程序的编辑、汇编及连接过程汇编语言的程序一般要经过编辑、汇编(MASM或ASM)、连接(LINK)和调试(DEBUG)这些步骤,见下图。编辑源程序文件(例如用EDLIN)文件存盘用户MASM汇编源程序文件(.ASM)生成目标代码文件(.OBJ)打印源程序开始打印有语法错用LINK连接目标代码文件(.EXE)有语法错在DOS下执行.EXE文件程序运行错修改源程序结束调试文件是否
47、是否是否是否是1、建立源程序文件建立源程序文件用编辑软件完成,常用的编辑软件有行编辑EDLIN,全屏幕编辑WORDSTAR等。2、汇编(MASM或ASM)源程序IBMPC微机提供了两种汇编程序版本:一种是全型版本(MASM);另一种是小型版本(ASM)。全型版本比小型版本增加了宏汇编、条件汇编及错误信息全部打印输出功能。汇编程序有两种启动方式:(1)提问方式在MS-DOS下输入命令行:MASM或ASM这时,MS-DOS将装入并启动执行汇编程序,然后汇编程序就逐次向用户提问,用户必须根据要求回答。在回答信息的最后,可输入一个或多个开关,汇编程序将按照回答信息及开关的定义做相应处理。汇编程序的提示
48、信息和所要求的回答见下表1所示;允许使用的开关及其功能见下表2所示。其中,开关/R和/E只允许在MASM1.20以上版本使用。表1提示信息回答Source filename.ASM欲汇编的.ASM源文件名Object filenameSource.OBJ可重定位目标代码文件名(默认:源文件名.OBJ)Source listingNUL.LST列表文件名(默认:无列表文件)Cross referenceNUL.CRF交叉参考文件用的文件名(该文件将由交叉参考程序CREF处理)(默认:无交叉参考文件)表2开关功能/D两趟扫描中都给出列表文件/O在列表文件中用八进制表示生成的目标代码和位移量/X列表
49、伪操作在条件为假时不作列表/R对源程序中的8087/80287/80387指令进行汇编,并产生目标代码/E对源程序中的8087/80287/80387指令进行汇编,产生仿真目标代码在回答提示信息时,可以使用以下两个命令字符:; 用于省略对后续提示的回答,仅取默认值;CRTL-C 当因为输入了错误的文件名或其他原因而想中途退出汇编程序时,按下CTRL-C键即可退出;(2)命令方式以命令方式启动汇编程序时,必须在MS-DOS下打入下列格式的命令:MASM(或ASM)源文件,目标文件,列表文件,交叉参考文件/开关于是在装入汇编程序后将立即开始进行汇编。命令中MASM(或ASM)后面的项目,分别顺次对
50、应于提问方式中对各提示信息的回答,各项目之间用逗号隔开。/开关可放在任一项目之后。如果对某一提示信息采用默认值,则只需在对应的项目处连续输入两个逗号。如:MASM FUN,FUN/D/X,FUN3、程序连接连接程序LINK用来连接汇编程序生成的目标代码文件(.OBJ)以及指定的库文件,产生一个可执行的装入文件(.EXE)。连接程序有3种启动方式:(1)提问方式在MS-DOS下输入命令行:LINK这时MS-DOS将把连接程序装入内存,并向用户提问,用户根据要求输入相应的回答。LINK的提示信息和所要求的回答见表3,允许使用的开关及功能见表4。表3提示信息回答Object Modules.OBJ目
51、标代码模块表(各模块之间用+号隔开)Run Fileobject.EXE连接后生成的装入模块名List FileNUL.MAP列表文件名(默认:无列表文件)Libraries.LIB库文件名表(各文件名之间用+号隔开)表4开关功能/D把数据装到数据区DS的上部/H把装入模块(.EXE)装到存储器的高区/L在列表文件中加入行号和地址/M以字典顺序在列表文件中列出全部公共变量/P暂停连接(使用此开关可以在LINK输出.EXE文件前换磁盘)/S:n指定装入模块的栈的大小(n的值最大为65535)/N禁止连接默认库除了在汇编程序一段中叙述过的两个命令字符以外,连接程序的回答信息中还可使用命令符+号,它
52、用以分隔多个要连接的目标代码模块或库文件。当显示器上一行输入不下时还可使用+号另起一行。(2)命令方式以命令方式启动连接程序时,必须在MS-DOS下输入如下格式的命令:LINK目标代码模块表,装入模块名,列表文件名,库文件名表/开关命令中LINK后面的各项目顺次对应于提问方式中以各提示信息的回答,各项目之间用逗号隔开。如对某一项提示信息采用默认值,则只需在对应的项目处连续输入两个逗号。例如:LINK FUN+TEST+TABLE+CARE/P/M,FUNLIST,COBLIB.LIB(3)文件方式以文件形式启动LINK的命令格式为:LINK 文件名其中,文件名用来指出一个包含有对于LINK提示信息回答的正文文件,文件中每一行正文对应一个回答
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店餐饮部食品安全风险管控指南
- 教育培训教师师资KPI考核表
- 2026年财务报表对账确认函(8篇范文)
- 【三年级下册数学】【通 用版】面积九大类型专项练习带答案(长和宽边长扩大的问题+跑圈问题+铺地砖种树种庄稼问题+靠墙围篱笆问题+在长方形中剪出一个最大正方形+挖空问题+围铁丝变形问题+拼接问题+看图计算面积)
- 非遗文化产品数字化保护与传播方案
- 关于申请审核的回复函6篇
- 高效能办公设备使用维护手册
- 金融服务行业风险管理经理绩效考评表
- 湖北省武汉新洲区五校联考2026年数学八上期末质量检测模拟试题含解析
- 2027届漳县数学六年级第一学期期末教学质量检测模拟试题含解析
- 2026年高端私人健康管理会所商业计划书
- 2026-2030建筑垃圾处理行业发展分析及投资战略研究报告
- 2026年高校教师资格证之高等教育心理学考试题库附答案a
- 2026学年七年级道德与法治上册第三单元重点题型过关检测含答案及解析
- 智慧农业前沿技术导论 课件 第14章 智慧植保
- 山东能源集团2026年委培试题
- (2026年)放射性皮肤损伤的护理中华护理团标课件
- 深度解析(2026)《WST 92-1996血中锌原卟啉的血液荧光计测定方法》
- 原发性血小板减少症
- 村卫生所医疗规章制度
- 2026年及未来5年中国环孢素滴眼液行业市场全景监测及投资战略咨询报告
评论
0/150
提交评论