《《基本汇编语言》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《基本汇编语言》PPT课件.ppt(83页珍藏版)》请在金锄头文库上搜索。
1、第第4 4章章 汇编语言程序格式汇编语言程序格式p教学目的及要求教学目的及要求:1.掌握各个伪指令的功能和使用方法掌握各个伪指令的功能和使用方法2.掌握汇编语言程序格式掌握汇编语言程序格式3.熟悉汇编语言程序的上机过程熟悉汇编语言程序的上机过程p教学教学重重点与难点点与难点:1.在理解伪指令功能的基础上,着重理解伪指令与指令的本质区在理解伪指令功能的基础上,着重理解伪指令与指令的本质区别别2.在理解程序的段结构基础上,着重理解各个段寄存器的初始化方在理解程序的段结构基础上,着重理解各个段寄存器的初始化方法法3.地址计数器的理解和使用地址计数器的理解和使用4.理解变量、标号的三个基本空间特性:段
2、、偏移量、类型理解变量、标号的三个基本空间特性:段、偏移量、类型开开 始始第第4 4章章 汇编语言程序格式汇编语言程序格式4.1 汇编语言的语句格式汇编语言的语句格式4.2 汇编语句表达式汇编语句表达式4.3 伪指令伪指令4.4 DOS系统功能调用系统功能调用4.5 综合举例综合举例开开 始始4.1 汇编语言的语句格式汇编语言的语句格式4.1.1 指令语句格式指令语句格式4.1.2 伪指令语句格式伪指令语句格式4.1.3 标识符标识符返回本章首页返回本章首页4.1.1 指令语句格式指令语句格式指令语句的一般格式如下:标号: 指令助记符 操作数 ;注释1标号:标号是机器指令语句存放地址的符号表示
3、,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:” 。2指令助记符:指令助记符为语句的核心成分,表示了该语句的操作类型。 3操作数:操作数表示指令助记符的操作对象。 4注释:注释项用来说明程序或语句的功能。注释均以分号开始,它可占一行或多行,一般放在一条语句的后面。 返回本节返回本节4.1.2 伪指令语句格式伪指令语句格式伪指令语句格式如下:符号名 伪指令符 操作数 ;注释1符号名:符号名是伪指令语句的一个可选项,可以定义为变量名、符号常数、子程序名或段名等。符号名与伪指令符之间用空格分隔。 2伪指令符:伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪
4、指令SEGMENT,假定伪指令ASSUME等。 3操作数:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。4注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。 返回本节返回本节4.1.3 标识符标识符1。标号和符号名-统称为标识符。2。有关标识符的规定 标识符可以使用下列字符: 字母 AZ(大写) az (小写) 数字 09 特殊字符 . ?标识符的长度为131个字符;除数字外,上面所有规定的字符都可以作为标识符的第一个字符,但问号(?)本身不能单独作为标识符;标识符中如果用到“.”,则必须是第一个字符;不能采用
5、汇编语言的保留字作为标识符。一般情况下,汇编程序不区分标识符和保留字中的字母的大小写。返回本章首页返回本章首页4.2 汇编语句表达式汇编语句表达式4.2.1 常量常量4.2.2 变量变量4.2.3 标号标号4.2.4 表达式与运算符表达式与运算符4.2.5 运算符的优先级运算符的优先级返回本章首页返回本章首页4.2.1 常量常量1数值常量数值常量2. 字符串常量字符串常量1数值常量数值常量表表3.1 各种形式数字常量格式对照表各种形式数字常量格式对照表2. 字符串常量字符串常量字字符符串串常常量量是是用用单单引引号号或或双双引引号号引引起起来来的的一一个个或或多多个个字字符符。在在机机器器内内
6、部部,字字符符串串常常量量是是以以各各字字符符的的ASC码码表表示示的的。如如A用用41H 表表示示,字字符符串串A1B2用用41H,31H,42H,32H表示。表示。返回本节返回本节4.2.2 变量变量1变量变量2变量的定义变量的定义在程序运行期间取值可能发生变化的操作数称为变量。变量可以看作盛放操作数的容器。在机器中,盛放操作数的容器只有寄存器和存储器两种,所以变量也可以分为寄存器变量和存储器变量。通常所指的变量都是存储器变量。变量一般在除代码段以外的其他段中用伪指令定义。变量通常在操作数字段中被引用,它有段、偏移和类型三种属性。(1)段属性:变量所在段的段基值。(2)偏移地址属性:变量的
7、偏移地址,它是一个16位无符号数,代表从段起始地址到定义变量的位置之间的字节数。(3)类型属性:变量的类型属性定义变量在内存中所占的字节数,即所存放的数据的长度。如字节属性BYTE为1,字属性WORD为2。1变量变量变变量量定定义义语语句句的的主主要要任任务务是是为为变变量量分分配配存存储储单单元元,且为这个变量提供一个初始值。且为这个变量提供一个初始值。常用的数据定义伪指令有常用的数据定义伪指令有 DB 定义字节变量定义字节变量 DW 定义字变量定义字变量 DD 定义双字变量定义双字变量 DQ 定义定义4字变量字变量 DT 定义定义5字变量字变量格格式式:变变量量名名数数据据定定义义伪伪指指
8、令令符符表表达达式式,2变量的定义变量的定义表达式表达式表表达达式式项项是是给给变变量量或或指指定定存存储储单单元元赋赋予予初初值值,它它有以下几种形式:有以下几种形式:(1 1)数值表达式)数值表达式(2 2)字符串表达式)字符串表达式(3 3)地址表达式(只适用)地址表达式(只适用DWDW和和DDDD两个伪指令)两个伪指令)(4 4) ? ? 表达式表达式(5 5)带)带DUPDUP的表达式的表达式数数据据定定义义伪伪指指令令可可以以为为一一个个或或连连续续的的存存储储单单元元设设置置数数值值初值。初值。【例例3.1】为数据段分配存储单元。为数据段分配存储单元。DATA SEGMENTAD
9、B11H,12H,13HBDW1122H,3344HCDD12345678HDATA ENDS上述变量的存储单元分配及初始化情况如下图上述变量的存储单元分配及初始化情况如下图3.1所示。所示。 (1)数值表达式)数值表达式图图3.1 数据段中数据存储分配图数据段中数据存储分配图字字符符串串表表达达式式中中的的字字符符串串必必须须用用引引号号引引起起来来。DB、DW、DD伪伪指指令令将将字字符符串串中中的的各各字字符符均均以以ASC码码形形式式存存放放在在相应的存储单元,但表示形式各不相同。相应的存储单元,但表示形式各不相同。【例例3.2】为字符串分配存储单元。为字符串分配存储单元。DATA S
10、EGMENTSTR1 DB1234STR2 DWAB,CD,ASTR3 DDABDATA ENDS其存储单元分配如下图其存储单元分配如下图3.2所示。所示。(2) 字符串表达式字符串表达式图图3.2 数数据据段段存存储储分分配配图图(3)地址表达式(只适用)地址表达式(只适用DW和和DD两个伪指令)两个伪指令)如如果果该该地地址址表表达达式式为为一一变变量量(或或标标号号)名名,用用DW伪伪指指令令则则是是取取它它的的偏偏移移地地址址来来初初始始化化变变量量,用用DD伪伪指指令令则则是是取取它它的的段段首首址址和和偏偏移移地地址址来来初初始始化化变变量。量。例如:例如: BUF1DWA BUF
11、2DDB ()?表达式)?表达式表达式为?,只分配存储单元,不赋予初始值表达式为?,只分配存储单元,不赋予初始值在在表表达达式式中中使使用用重重复复数数据据操操作作符符DUP,可可以以为为连连续续的的存存储单元提供重复数据,其格式为:储单元提供重复数据,其格式为: N DUP(表达式)表达式)其其中中N为为重重复复因因子子,只只能能取取正正整整数数,表表示示定定义义了了N个个重重复复数数据据存存储储单单元元,其其类类型型由由它它前前面面的的数数据据定定义义伪伪指指令令确确定定,而而每每个个数数据据存存储储单单元元中中的的初初值值由由DUP后后面面圆圆括括号号中中的的表表达式给定。达式给定。例如
12、:例如: BUF DB 100 DUP(0)以以上上语语句句定定义义了了以以BUF为为首首址址,大大小小为为100个个字字节节,初初值值为为0的数据存储单元。的数据存储单元。(5 5)带)带DUPDUP的表达式的表达式返回本节返回本节4.2.3 标号标号标标号号是是一一条条指指令令语语句句的的符符号号地地址址。在在汇汇编编源源程程序序中中,只只有有在在需需要要转转向向一一条条指指令令语语句句时时,才才为为该该指指令令语语句句设设置置标标号号,以以便便在在转转移移类类指指令令(含含子子程程序序调调用用指指令令)中中直直接接引引用用这这个个标标号号。因因此此,标标号号可可作为转移类指令的操作数,即
13、转移地址。作为转移类指令的操作数,即转移地址。【例例3.3】符号地址表示。符号地址表示。 NEXT:MOV AL, SI;带标号带标号NEXT的指令的指令 DEC CX JNE NEXT ;标号标号NEXT作转移指令的操作数作转移指令的操作数1 1段段属属性性:定定义义标标号号所所在在段段的的段段基基值值,该该地地址总是存放在址总是存放在CSCS段寄存器中。段寄存器中。2 2偏偏移移地地址址属属性性:标标号号的的偏偏移移地地址址,它它是是1616位位无无符符号号数数,代代表表从从段段起起始始地地址址到到定定义义标标号号的位置之间的字节数。的位置之间的字节数。3 3类类型型属属性性:用用来来指指
14、出出该该标标号号是是在在本本段段内内引引用用还还是是在在其其他他段段中中引引用用。在在段段内内引引用用的的为为NEARNEAR类,在段外引用的为类,在段外引用的为FARFAR类。类。标号也具有三种属性标号也具有三种属性 :段属性、偏移地址属性、:段属性、偏移地址属性、类型属性。类型属性。返回本节返回本节4.2.4 运算符运算符1算术运算符算术运算符2逻辑运算符逻辑运算符3关系运算符关系运算符4属性运算符属性运算符5数值返回运算符数值返回运算符算算术术运运算算符符包包括括:(加加)、(减减)、*(乘乘)、(除除)、MOD(求求模模)、SHL(左左移移)、SHR(右右移移)、 几种,它既可以用于数
15、值表达式又可用于地址表达式。几种,它既可以用于数值表达式又可用于地址表达式。运算时要理解其物理意义:运算时要理解其物理意义:(1)减法:允许在两个变量之间(相距的字节数)减法:允许在两个变量之间(相距的字节数)(2)加法:不允许在变量间使用)加法:不允许在变量间使用(3)地址表达式:)地址表达式:变量变量数值数值(4)SHL,SHR:对数值进行,在汇编时执行。对数值进行,在汇编时执行。 格式:格式: 数值数值 SHL/SHR 移位次数移位次数 例:例: NUM EQU 1111B MOV AL, NUM SHL 4 ADD BL, NUM SHL 41算术运算符算术运算符 NUM1 EQU25
16、*4 50;NUM1=50NUM2 EQUNUM1 / 7;NUM2=7NUM3 DBNUM1 MOD 7 ;NUM3=1VAR1DB1,2,3,4,5VAR2DB12345NUM4 EQUVAR2-VAR1;NUM4=5NUM5 EQU0FH MOVAL,NUM5 SHL 4;(;(AL)=11110000BMOVBL,NUM5 SHR 4; (BL)=00000000B【例例3.4】用算术运算符进行数值表达式运算。用算术运算符进行数值表达式运算。逻逻辑辑运运算算符符包包括括:AND、OR、XOR、NOT四四种种运运算算。由由于于逻逻辑辑运运算算是是按按位位操操作作,且且在在汇汇编编过过程程
17、中中完完成成,因因而而运运算算的的结结果果仍仍为为整整数数常常量。量。【例例3.5】用逻辑运算符进行运算。用逻辑运算符进行运算。MOVAL,34H AND 0FH ;04HALMOVBL,05H OR 30H ;35HBLMOVCX,NOT 00FFH ;0FF00HCXMOVDX,789AH XOR 000FH;7895HDX2逻辑运算符逻辑运算符关系运算符包括:相等(关系运算符包括:相等(EQ),),不等(不等(NE),),小于(小于(LT),),大于大于(GT),),小于等于(小于等于(LE)及大于等于(及大于等于(GE)。)。 关系运算符的两个操作数必须都是数字或是同一段内的两个存储器
18、关系运算符的两个操作数必须都是数字或是同一段内的两个存储器地址。计算的结果应为逻辑值:结果为真,用全地址。计算的结果应为逻辑值:结果为真,用全1表示;结果为假,表示;结果为假,用用0表示。表示。【例例3.6】用关系运算符进行数值表达式运算。用关系运算符进行数值表达式运算。NUM1 DB10 LT 5 ;NUM1=0NUM2 DB0AAAAH GT 7FFFH;NUM2=0FFHMOVAX,A EQ 41H ;0FFFFHAXMOVBX,NUM2 LT NUM1 ;0BX3关系运算符关系运算符(1)PTR运算符运算符格式:格式: 类型类型 PTR 地址表达式地址表达式 类类 型型 可可 以以 是
19、是 BYTE、 WORD、 DWORD、 FAR和和NEAR之之一一。表表达达式式是是存存储储器器操操作作数数地地址址。PTR用用来来为为表表达达式式确确定定新新的的类类型型属属性性,它它本本身身并并不不改改变变存存储储器器分分配配情情况况,只只是是用用来来给给已已分分配配的的存存储储器器地地址址赋赋予予另另一一种种类类型型属属性性。格格式式中中的的类类型型字字段段表表示示所所赋赋予予的的新新的的类类型属性,而表达式字段则是被取代类型的符号地址。型属性,而表达式字段则是被取代类型的符号地址。4属性运算符属性运算符已有数据定义如下:已有数据定义如下: TWOBYTE DW ?TWOBYTE已已定
20、定义义为为字字操操作作数数的的存存储储地地址址,可可以以用用以以下下语语句句给给这这两两个个字字节赋予另一种类型属性节赋予另一种类型属性:ONEBYTE EQU BYTE PTR TWOBYTE OTHERBYTE EQU BYTE PTR (TWOBYTE +1)这这时时 ONEBYTE 和和TWOBYTE 两两个个符符号号地地址址具具有有相相同同的的段段地地址址及及偏偏移地址移地址,但是它们的类型属性不同但是它们的类型属性不同,前者为前者为1,后者为后者为2.有时指令要求使用有时指令要求使用PTR操作符操作符.例例:MOV BX,6指指令令把把立立即即数数存存入入BX寄寄存存器器内内容容指
21、指定定的的存存储储单单元元中中,但但汇汇编编程程序序不不能能分分清清是存入字单元还是字节单元是存入字单元还是字节单元,此时必须用此时必须用PTR操作符来说明属性操作符来说明属性. MOV BYTE PTRBX,6或或 MOV WORD PTRBX,6(2)THIS(2)THIS 运算符运算符 格式为格式为: THIS 类型类型 THIS运算符常与运算符常与EQU连用连用,用来定义一个新的变量名或标号用来定义一个新的变量名或标号,并将右并将右边的类型属性赋给新的变量或标号边的类型属性赋给新的变量或标号,而新变量或新标号的段基值和偏而新变量或新标号的段基值和偏移量与紧跟其后的变量或标号相同移量与紧
22、跟其后的变量或标号相同. 例如例如: DATAB EQU THIS BYTE DATAW DW 100 DUP(0)此时此时DATAB的段基值、偏移地址和的段基值、偏移地址和DATAW完全相同完全相同,但它是字节类但它是字节类型的型的,而而DATAW则是字类型的则是字类型的. 又如又如: START EQU THIS FAR L: MOV CX,100这样这样,MOV指令有一个指令有一个FAR属性的地址属性的地址START,这就这就允许其他段的转移允许其他段的转移指令直接跳转到该条指令指令直接跳转到该条指令.(1)SEG 运算符运算符(2)OFFSET运算符运算符(3)TYPE运算符运算符(4
23、)LENGTH运算符运算符(5)SIZE运算符运算符(6)字节分离运算符)字节分离运算符5数值返回运算符数值返回运算符(1)SEG 运算符运算符格式:格式:SEG 变量或标号变量或标号功能:分离出其后变量或标号所在段的段基址。例如:功能:分离出其后变量或标号所在段的段基址。例如:MOV AX,SEGARR ;ARR为某个变量为某个变量(2)OFFSET运算符运算符格式:格式:OFFSET 变量或标号变量或标号功能:分离出其后变量或标号的偏移地址。例如:功能:分离出其后变量或标号的偏移地址。例如:MOV BX,OFFSET BUF 所以这条指令与指令:所以这条指令与指令:LEA BX,BUF等价
24、。等价。(3)TYPE运算符运算符格式:格式:TYPE 变量或标号变量或标号功功能能:分分离离出出其其后后变变量量或或标标号号的的类类型型。如如果果是是变变量量,将将返返回回该该变变量量的的类类型型对对应应字字节节数数;如如果果是是标标号号,则则返返回回代代表标号类型的数值。它们之间的关系见下表所示。表标号类型的数值。它们之间的关系见下表所示。(4)LENGTH运算符运算符格式:格式:LENGTH 变量变量功能:对于变量中使用功能:对于变量中使用DUP的情况,回送最外层的情况,回送最外层DUP的的重复次数。若无重复次数。若无DUP则返回则返回1。【例例3.12】DATA SEGMENTADBA
25、BCDEFBDW10DUP(1,2DUP(2)DATA ENDS MOV AX,LENGTH A;1AXMOV BX,LENGTH B;10BX (5)SIZE运算符运算符格式:格式:SIZE 变量变量功功能能:取取出出变变量量所所占占的的数数据据存存储储区区大大小小。其其返回值为:返回值为: LENGTH 变量变量 * TYPE 变量变量例如:上例中例如:上例中A、B变量:变量:SIZE A = LENGTH A*TYPE A = 1SIZE B = LENGTH B*TYPE B = 20(6)字节分离运算符)字节分离运算符字节分离运算符包括:字节分离运算符包括:HIGH和和LOW。格式:
26、格式: HIGH 常量或地址表达式常量或地址表达式 LOW 常量或地址表达式常量或地址表达式功功能能:HIGH 用用来来分分离离出出其其后后16位位常常量量或或地地址址表表达达式式的的偏偏移移量量的的高高字字节节;LOW用用来来分分离离出出其其后后16位位常常量量或或地地址址表达式偏移量的低字节。表达式偏移量的低字节。例例:CONST EQU 0ABCDH MOV AH,HIGH CONST将汇编成:将汇编成: MOV AH,0ABH返回本节返回本节4.2.5 运算符的优先级运算符的优先级表表3.3 运算符的优先级运算符的优先级返回本节返回本节4.3 伪指令伪指令4.3.1 数据定义伪指令数据
27、定义伪指令4.3.2 符号定义伪指令符号定义伪指令4.3.3 段定义伪指令段定义伪指令SEGMENT/ENDS4.3.4 假定伪指令假定伪指令ASSUME4.3.5 置汇编地址计数器伪指令置汇编地址计数器伪指令ORG4.3.6 源程序结束伪指令源程序结束伪指令返回本章首页返回本章首页4.3.1 数据定义伪指令数据定义伪指令功能:定义数据存储区,类型由数据定义伪指令功能:定义数据存储区,类型由数据定义伪指令符确定,初值由表达式给定。符确定,初值由表达式给定。 格式:格式:变量名变量名数据定义伪指令表达式数据定义伪指令表达式,返回本节返回本节4.3.2 符号定义伪指令符号定义伪指令1赋值伪指令赋值
28、伪指令EQU2等号伪指令等号伪指令 = =3LABEL1赋值伪指令赋值伪指令EQU格式:符号名格式:符号名 EQU 表达式表达式功功能能:为为常常量量、表表达达式式及及其其他他各各种种符符号号定定义义一一个个等等价价的的符号名,但符号名,但它不申请存储单元它不申请存储单元。用途:用途: 用用符符号号表表示示常常量量、数数值值表表达达式式,即即定定义义符符号号常常量量。使使用用符符号号常常量量可可使使程程序序简简单单明明了了,增增强强程程序序的的可可读读性性和和通通用性。用性。 EQU与与属属性性运运算算符符PTR或或THIS联联合合使使用用,可可以以给给变变量量或或标标号号定定义义新新的的类类
29、型型属属性性并并重重新新命命名名,但但保保持持其其段段和和偏偏移地址属性不变。移地址属性不变。 利用利用EQU可以用一个符号名替代一个复杂的地址表达可以用一个符号名替代一个复杂的地址表达式和其他一些符号,如指令助记符、变量名、标号、段式和其他一些符号,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。名、寄存器名、宏定义名等。 举例如下举例如下:CONSTANT EQU 256 ;数赋以符号名数赋以符号名 DATA EQU HEIGHT+12 ;地址表达式赋以符号名地址表达式赋以符号名 ALPHA EQU 7 ;这是一组赋值伪操作这是一组赋值伪操作,把把 BETA EQU ALPHA2
30、7-2=5 赋以符号名赋以符号名ADDR EQU VAR+BETA BETA,VAR+5 赋以符号名赋以符号名ADDRB EQU BP+8 ;变址引用赋以符号名变址引用赋以符号名BP8 EQU DS:BP+8 ;加段前缀的变址引用赋以符号名加段前缀的变址引用赋以符号名P8必须注意必须注意:1.EQU语句的表达式中如果有变量或标号的表达式语句的表达式中如果有变量或标号的表达式,则在该语句前应则在该语句前应该先给出它们的定义该先给出它们的定义.2.在同一个源程序中在同一个源程序中,同一个符号不能用同一个符号不能用EQU伪指令重新定义伪指令重新定义. 2等号伪指令等号伪指令格式:符号名格式:符号名
31、= 表达式表达式功功能能:为为常常量量、表表达达式式及及其其他他各各种种符符号号定定义义一一个个等等价价的的符符号号名名,并并能能对对所所定定义义的的符符号号多多次次重重复复定定义义,且且以以最最后后一次定义的值为准。一次定义的值为准。【例例3.17】定义等价符号名。定义等价符号名。 COST = 20M= MOVCOST = COST+10;30LOSTM= ADD;M=ADD 3LABEL伪指令伪指令格式:变量名或标号格式:变量名或标号 LABEL 类型类型功功能能:定定义义与与原原有有变变量量类类型型不不同同的的新新变变量量或或为为指指令令语语句句定定义义有有指指定定类类型型的的标标号号
32、。通通常常与与指指令令或或数数据据定定义义伪伪指指令令连连用用,其其功功能能类类似似语语句句“变变量量名名或或标标号号 EQU THIS 类类型型”。【例例3.18】定义新类型的变量或标号。定义新类型的变量或标号。 DDBUF LABEL DWORDBUF DB 200 DUP(0) A LABEL FARB: LEA DX,BUF 返回本节返回本节4.3.3 4.3.3 段定义伪指令段定义伪指令SEGMENT/ENDSSEGMENT/ENDSv格式:段名格式:段名 SEGMENT SEGMENT 定位类型定位类型组合类型组合类型类别类别 。 。 语句语句 。 段名段名 ENDSENDS 1
33、1段名段名 2 2定位类型定位类型 3 3类别类别 4 4组合类型组合类型1段名段名段名是为该段起的名字,段名是为该段起的名字, 命名规则与标识符相同。用来指出命名规则与标识符相同。用来指出汇编程序为该段分配的存储区起始位置。汇编程序为该段分配的存储区起始位置。 2定位类型定位类型(1)PARA:表表示示本本段段必必须须从从能能被被16整整除除的的地地址址处处开开始始存存放放,即段起始地址最低四位必须是即段起始地址最低四位必须是0。PARA为缺省项。为缺省项。(2)WORD:表表示示本本段段要要从从一一个个偶偶数数地地址址处处开开始始存存放放,即即段段起始地址的最低一位必须起始地址的最低一位必
34、须是是0。(3)BYTE:表示本段起始地址可以从任一地址处开始存放。表示本段起始地址可以从任一地址处开始存放。(4)PAGE:表表示示本本段段要要从从能能被被256整整除除的的地地址址处处开开始始存存放放,即起始地址的最低八位必须是即起始地址的最低八位必须是0。段的类别是单引号括起的类别名称,连接程序将把类别名相同的各段的类别是单引号括起的类别名称,连接程序将把类别名相同的各段连接组合在一起。先出现的段在前,后出现的段在后。它常与组段连接组合在一起。先出现的段在前,后出现的段在后。它常与组合类型相配合以形成不同的段组合结构。合类型相配合以形成不同的段组合结构。【例例3.19】连接程序进行连接前
35、存储区各段相对位置分布连接程序进行连接前存储区各段相对位置分布: DATA1 SEGMENT DATA CODE SEGMENT CODE STACK1 SEGMENT STACK DATA2 SEGMENT DATA STACK2 SEGMENT STACK经连接程序连接后,各段的相对位置如下:经连接程序连接后,各段的相对位置如下:DATA1 SEGMENT DATADATA2 SEGMENTDATACODE SEGMENTCODESTACK1SEGMENTSTACKSTACK2SEGMENTSTACK3类别类别组合类型的作用是通知连接程序本段与程序中其他段的组合关系。组合类型的作用是通知连
36、接程序本段与程序中其他段的组合关系。有六种类型可供选择。有六种类型可供选择。 (1)“不选择不选择”:表示本段与其他段无逻辑关系。自己是一个:表示本段与其他段无逻辑关系。自己是一个独立段。独立段。(2)PUBLIC :表示可以把本段与同名同类别的其他段连接组表示可以把本段与同名同类别的其他段连接组合在一起,构成一个物理段合在一起,构成一个物理段,共用一个段基值。共用一个段基值。(3)STACK :与:与PUBLIC组合方式相同,只是它用于堆栈段的组合方式相同,只是它用于堆栈段的连接。组合的段长为各堆栈段长度的总和。连接。组合的段长为各堆栈段长度的总和。(4)COMMON :表示本段将与同名同类
37、别的其他段相覆盖。表示本段将与同名同类别的其他段相覆盖。段的长度取决于最长的段的长度取决于最长的COMMON段长。段长。(5)MEMORY :表示本段连接在其他段的后面,位于内存高表示本段连接在其他段的后面,位于内存高地址端。地址端。(6)AT 表达式表达式 :表示本段将安装在:表示本段将安装在 表达式的值所指定的段地表达式的值所指定的段地址上。这种组合类型可以明确地指定段在存储器中的地址。但它址上。这种组合类型可以明确地指定段在存储器中的地址。但它不能用于指定代码段。不能用于指定代码段。4 4组合类型组合类型【例例3.20】有两个模块,各模块段定义如下:有两个模块,各模块段定义如下: 模块模
38、块1: DATA1SEGMENT PARA PUBLIC DATA1M1DB 45H DUP(0)DATA1ENDSDATA2SEGMENT PARA COMMON DATA2N1 DB 102H DUP(0)DATA2ENDS模块模块2: DATA1SEGMENT PARA PUBLIC DATA1M2DB 104H DUP(11H)DATA1ENDSDATA2SEGMENT PARA COMMON DATA2N2DB 105H DUP(0)DATA2ENDSDATA3SEGMENTT1DB 50H DUP(20H)DATA3ENDS经过连接程序连接后经过连接程序连接后,该程序段的定位组合方
39、式示意图如图该程序段的定位组合方式示意图如图3.3所示。所示。图3.3 模块1、模块2连接后段的定位组合方式示意图返回本节返回本节4.3.4 假定伪指令假定伪指令ASSUME格式:格式:ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名功功能能:建建立立段段寄寄存存器器与与段段之之间间的的对对应应关关系系。但但不不用用来来设设置置段段寄寄存存器器的内容的内容. .该伪指令一般出现在代码段中。该伪指令一般出现在代码段中。【例例3.21】用用ASSUME伪伪指指令令建建立立代代码码段段、堆堆栈栈段段与与CS和和SS的的对对应应关系。关系。DATA1 SEGMENT
40、ADB 1,2,3DATA1 ENDSSTACK SEGMENT STACKDB200 DUP(0)STACK ENDSDATA2 SGEMENTBDB 123ABCDATA2 ENDSCODE SEGMENTASSUMEDS:DATA1,ES:DATA2,CS:CODE,SS:STACKSTART:MOV AX,DATA1 MOV DS,AX;DATA1DS MOV AX,DATA2 MOV ES,AX;DATA2ES Q1: MOV AL,AASSUMEDS:DATA2 ;建建立立DS与与DATA2段段的对应关系的对应关系MOV AX,DATA2MOV DS,AX MOV AL,B COD
41、E ENDS ENDSTART返回本节返回本节4.3.5 定位伪指令定位伪指令ORG格式:格式:ORG 数值表达式数值表达式功能:将数值表达式的值赋给当前位置计数器。数值表达式的功能:将数值表达式的值赋给当前位置计数器。数值表达式的值须为值须为065535之间的非负整数之间的非负整数,指出偏移地址。指出偏移地址。伪指令伪指令ORG可设置于代码段、数据段的任何地方。表明该语句可设置于代码段、数据段的任何地方。表明该语句下面的程序或数据要从表达式指定的地址开始存放。下面的程序或数据要从表达式指定的地址开始存放。汇编语言用符号汇编语言用符号“”表示位置计数器的当前值。当用在指表示位置计数器的当前值。
42、当用在指令中时,表示本条指令第一个字节的地址偏移;当用在伪指令令中时,表示本条指令第一个字节的地址偏移;当用在伪指令的参数中时,表示的是汇编地址计数器的当前值。的参数中时,表示的是汇编地址计数器的当前值。返回本节返回本节【例例3.22】给汇编地址计数器赋值。给汇编地址计数器赋值。 DATA SEGMENT ORG 10 ; 置值为置值为10 VAR1 DW 100H,200H ORG +5 ; 置的值为置的值为14+5,即为,即为19 VAR2 DB 1,2, +1,+2 N EQU -VAR2; ()()=23 DATA ENDS4.3.6 源程序结束伪指令源程序结束伪指令格式:格式:END
43、 标号标号功功能能:其其中中标标号号指指出出程程序序开开始始执执行行的的第第一一条条指指令令的的地地址址。该该语语句句标标志志整整个个程程序序的结束,是源程序的最后一条语句。的结束,是源程序的最后一条语句。返回本节返回本节;定义源字符串变量sstr的值为小写字母表,用程序将它复制到目标字符串dstr中。 data segment sstr dbabcdefghijklmnopqrstuvwxyz data ends extra segment dstr db 26 dup(?) extra ends code segment assume cs:code,ds:data,es:extra st
44、art: mov ax,data mov ds,ax mov ax,extra mov es,ax lea si, sstr lea di, dstr mov cx,26 cld rep movsb mov ah,4ch ;dos系统功能调用,标志源程序结束 int 21h code endsend startDEBUG的主要命令的主要命令1。DEBUG程序的调用程序的调用 在在DOS的提示符下,可键入命令:的提示符下,可键入命令:CDEBUG指定驱动器指定驱动器path文件名文件名.扩展名扩展名在在DEBUG程序调入后,将出现提示符程序调入后,将出现提示符-,此时就可用,此时就可用DEBUG
45、命令来调试程序。命令来调试程序。2。DEBUG的主要命令的主要命令1)显示存储单元的命令)显示存储单元的命令D,格式为:格式为:-Daddress或或-Drange例如,按指定范围显示存储单元内容的方法为:例如,按指定范围显示存储单元内容的方法为: -d 100 12018E4:0100 C7 06 04 02 38 01 C7 0606 02 00 02 C7 06 08 02 G8.G.G18E4: 0110 02 02 BB 04 02 E8 02 00CD 20 50 51 56 57 8B 37 .;.h.MPQUVW.718E4: 0120 8B其中其中0100至至0120是是DE
46、BUG显示的单元内容。左边用十六进制表示每个字节,右边显示的单元内容。左边用十六进制表示每个字节,右边用用ASCII字符表示每个字节,字符表示每个字节,.表示不可显示的字符。这里没有指定段地址,表示不可显示的字符。这里没有指定段地址,D命令命令自动显示自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。个字节的内容。如果完全没有指定地址,则显示上一个如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。命令显示的最后一个单元后的内容。2)检查和修改寄存器内容的命令)检查和修改寄存器内容的命令R,它有三种格式
47、如下:它有三种格式如下:。显示。显示CPU内所有寄存器内容和标志状态,其格式为:内所有寄存器内容和标志状态,其格式为:-R。显示和修改某个寄存器内容,其格式为:显示和修改某个寄存器内容,其格式为:-R register name 例如,键入例如,键入 r ax系统将响应如下:系统将响应如下:AX F1F4 :即即AX寄存器的当前内容为寄存器的当前内容为F1F4,如不修改则按如不修改则按Enter键,否则,可键入欲修改的键,否则,可键入欲修改的内容,如:内容,如:-r bxBX 0369:059F则把则把BX寄存器的内容修改为寄存器的内容修改为059F。显示和修改标志位状态,命令格式为:显示和修
48、改标志位状态,命令格式为:-RF系统将响应,如:系统将响应,如:OV DN EI NG ZR AC PE CY此时,如不修改其内容可按此时,如不修改其内容可按Enter键,否则,可键入欲修改的内容,如:键,否则,可键入欲修改的内容,如:OV DN EI NG ZR AC PE CYPONZDINV4)运行命令)运行命令G,其格式为:其格式为:-G=address1address2address3其中,地址其中,地址1指定了运行的起始地址,如不指定则从当前的指定了运行的起始地址,如不指定则从当前的CS:IP开开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止始运行。后面的地址均为断点地
49、址,当指令执行到断点时,就停止执行并显示所有寄存器及标志位的内容,和下一条将要执行的指令。执行并显示所有寄存器及标志位的内容,和下一条将要执行的指令。5)跟踪命令)跟踪命令T,有两种格式:有两种格式:。逐条指令跟踪。逐条指令跟踪-T=address从指定地址起执行下一条指令后停下来,显示所有寄存器内容及标从指定地址起执行下一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的志位的值。如未指定地址则从当前的CS:IP开始执行。开始执行。多条指令跟踪。多条指令跟踪-T=addressvalue从指定地址起执行从指定地址起执行n条指令后停下来,条指令后停下来,n由由value指定
50、。指定。6)汇编命令)汇编命令A,其格式为:其格式为:-Aaddress该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,把键入的数字均看成十六进制数,所以如果要键入十进制数,则其后应加以说明,如所以如果要键入十进制数,则其后应加以说明,如100D。7)反汇编命令反汇编命令U,有两种格式。有两种格式。从指定地址开始,反汇编。从指定地址开始,反汇编32个字节,其格式为:个字节,其格式为:-Uaddress
51、如果地址被省略,则从上一个如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示命令的最后一条指令的下一个单元开始显示32个个字节。字节。对指定范围内的存储单元进行反汇编,格式为:。对指定范围内的存储单元进行反汇编,格式为:-Urange8)退出退出DEBUG命令命令Q,其格式为:其格式为:-Q它退出它退出DEBUG,返回返回DOS。3.4 DOS系统功能调用系统功能调用3.4.1 概述概述3.4.2 常用常用的的DOS系统功能调用系统功能调用返回本章首页返回本章首页3.4.1 概述概述1.DOS系统功能调用的定义系统功能调用的定义 MS-DOS内包含了许多涉及设备驱动和文件管内包
52、含了许多涉及设备驱动和文件管理等方面的子程序,为了方便程序员使用,把这理等方面的子程序,为了方便程序员使用,把这些子程序编成相对独立的程序模块且编上号。程些子程序编成相对独立的程序模块且编上号。程序员利用汇编语言可方便地调用这些子程序。这序员利用汇编语言可方便地调用这些子程序。这些编了号的可由程序员调用的子程序就称为些编了号的可由程序员调用的子程序就称为DOS的功能调用。的功能调用。2。DOS功能调用的组成功能调用的组成 DOS功能调用主要包括三方面的子程序:设功能调用主要包括三方面的子程序:设备驱动(基本备驱动(基本I/O)、)、文件管理和目录管理等。文件管理和目录管理等。返回本节返回本节3
53、。调用方法。调用方法DOS系统功能调用的方法一般可分为以下几步:系统功能调用的方法一般可分为以下几步: 设置所要调用功能的入口参数。设置所要调用功能的入口参数。 在在AH寄存器中存入所要调用功能的功能号。寄存器中存入所要调用功能的功能号。 INT 21H指令自动转入中断子程序入口。指令自动转入中断子程序入口。 相相应应中中断断子子程程序序运运行行完完毕毕,可可按按规规定定取取得得出出口口参数。参数。3.4.2 常用常用的的DOS系统功能调用系统功能调用1单字符输入(单字符输入(1号调用)号调用)2单字符显示(单字符显示(2号调用)号调用)3打印输出(打印输出(5号调用)号调用)4结束调用(结束
54、调用(4CH号调用)号调用)5显示字符串(显示字符串(9号调用)号调用)6字符串输入(字符串输入(10号调用)号调用)1单字符输入(单字符输入(1号调用)号调用)格式:格式:MOV AH,1 INT21H功能:将从键盘输入字符的功能:将从键盘输入字符的ASCII码送入寄存器码送入寄存器AL中,中,并送显示器显示。并送显示器显示。 2单字符显示(单字符显示(2号调用)号调用)格式:格式:MOV DL,待显示字符的待显示字符的ASCII码码 MOV AH,2 INT 21H功功能能:将将DL寄寄存存器器中中的的字字符符送送显显示示器器显显示示,如如果果DL中中为为CTRL + C 或或CTRL+B
55、REAK的的ASCII码,则退出。码,则退出。3打印输出(打印输出(5号调用)号调用)格式格式:MOVDL,待打印字符的待打印字符的ASCII码码 MOVAH,5 INT 21H功能:将功能:将DL寄存器中的字符送打印机打印。寄存器中的字符送打印机打印。4结束调用(结束调用(4CH号调用)号调用)格式:格式:MOVAH,4CH INT21H功能:终止当前程序并返回调用程序。功能:终止当前程序并返回调用程序。5显示字符串(显示字符串(9号调用)号调用)格式:格式:LEADX,待显示字符串首偏移地址待显示字符串首偏移地址 MOV AH,9 INT21H功能:将当前数据区中以功能:将当前数据区中以结
56、尾的字符串送显示器结尾的字符串送显示器显示。显示。 6字符串输入(字符串输入(10号调用)号调用)格式:格式:LEADX,缓冲区首偏移地址缓冲区首偏移地址 MOVAH,10 INT21H功功能能:从从键键盘盘上上输输入入一一字字符符串串到到用用户户定定义义的的输输入入缓缓冲冲区区中,并送显示器显示。中,并送显示器显示。DATASEGMENT STRDB Example of string display!DATAENDSCODE SEGMENTASSUME DS:DATA,CS:CODEBEGIN:MOVAX ,DATAMOVDS,AXLEADX,STRMOVAH ,9INT21HMOVAH,
57、4CH INT21HCODEENDSENDBEGIN【例例3.25】若要在屏幕上显示字符串若要在屏幕上显示字符串“Example of string display!”,则程序如下:则程序如下: 3.5 综合举例综合举例【例例3.27】已知一数据段中的数据为:已知一数据段中的数据为:DATA SEGMENTADW MBUFDB AB,0DH,0AHCEQU 500HBDW 0FFAAHDDD BUFMDB 2DUP(1) ,2DUP(2,B)DATA ENDS请画出该数据段数据存储的形式。请画出该数据段数据存储的形式。 返回本章首页返回本章首页该数据段在主存中的存储形式如左图所示。DATA S
58、EGMENTNUM DB 01000101BBUFDB 0DH,0AH,(NUM)=STRDB 4 DUP(?)(?)DATA ENDSSTACKSEGMENT STACKDB200 DUP(0)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODE【例例3.28】阅读下列程序,指出此程序所完成的功能以阅读下列程序,指出此程序所完成的功能以及在显示器上显示的内容。及在显示器上显示的内容。 START:MOV AX,DATA MOV DS,AX LEADI,STRMOV AL,NUM MOV CL,4SHRAL,CLORAL,30HMOV DI,AL
59、INCDIMOV AL,NUM ANDAL,0FHORAL,30HMOV DI,ALINCDIMOV BYTE PTR DI,HINCDIMOV BYTE PTR DI,LEADX,BUF MOV AH,9INT21HMOV AH,4CHINT21HCODEENDSENDSTARTDATA SEGMENTINFO1DB0DH,0AH,INPUT STRING:INFO2DB0DH,0AH,OUTPUT STRING:BUFA DB81DB?【例例3.29】从键盘上输入一串字符到输入缓冲区,然后从键盘上输入一串字符到输入缓冲区,然后将输入的字符串在显示器上以相反的顺序显示。将输入的字符串在显示器
60、上以相反的顺序显示。DB80 DUP(0)BUFB DB81 DUP(0)DATA ENDSSTACKSEGMENTDB200 DUP(0)STACKENDSCODESEGMENTASSUMEDS: DATA, SS: STACK, CS:CODESTART:MOV AX,DATA MOV DS,AX LEADX,INFO1MOVAH,9 ; 9号调用,显示输入提示信息号调用,显示输入提示信息INT21HLEADX,BUFAMOVAH,10; 10号号调调用用,键键盘盘输输入入字字符符串串到到缓缓 冲区冲区BUFAINT21HLEASI,BUFA+1 MOVCH,0 ; 取字符长度取字符长度C
61、X MOVCL,SIADDSI,CX ;SI 指向字符串尾部指向字符串尾部LEADI,BUFB;DI指向字符串变量指向字符串变量BUFBNEXT:MOVAL,SIMOV DI,ALDECSIINCDILOOPNEXTMOV BYTE PTR DI, LEADX,INFO2MOV AH,9 ;9号号调调用用,显显示示输输出出提示信息提示信息 INT21HLEA DX,BUFBMOVAH,9 ;反向显示字符串反向显示字符串INT 21HMOVAH,4CHINT 21HCODEENDSEND START返回本节返回本节Thank you very much !本章到此结束,谢谢您的光临!本章到此结束,谢谢您的光临!返回本章首页返回本章首页结结 束束