汇编语言:第4章 汇编语言程序格式

上传人:工**** 文档编号:570098359 上传时间:2024-08-01 格式:PPT 页数:105 大小:2.66MB
返回 下载 相关 举报
汇编语言:第4章 汇编语言程序格式_第1页
第1页 / 共105页
汇编语言:第4章 汇编语言程序格式_第2页
第2页 / 共105页
汇编语言:第4章 汇编语言程序格式_第3页
第3页 / 共105页
汇编语言:第4章 汇编语言程序格式_第4页
第4页 / 共105页
汇编语言:第4章 汇编语言程序格式_第5页
第5页 / 共105页
点击查看更多>>
资源描述

《汇编语言:第4章 汇编语言程序格式》由会员分享,可在线阅读,更多相关《汇编语言:第4章 汇编语言程序格式(105页珍藏版)》请在金锄头文库上搜索。

1、汇编语言程序格式汇编语言程序格式本章结构本章结构4.3伪指令语句4.2汇编语言的表达式4.1汇编语言语句格式寻址方式寻址方式主要内容主要内容3、常用伪指令及操作符功能、以及参数的表达、变量的 定义,还有变量和标号的属性1、汇编语句的格式、源程序结构、汇编语言程序开发方法2、汇编语言中的数值表达式和地址表达式寻址方式寻址方式教学要求教学要求4、伪指令语句1、汇编语言源程序格式2、数据定义语句掌握3、段定义语句5、符号定义语句寻址方式寻址方式教学要求教学要求了解 汇编程序的开发过程,一些不常用的伪指令,如:地址计数器$、指定起始位置伪指令ORG、EVEN伪指令等。4.1汇编语言程序开发汇编语言程序

2、开发 汇编语言程序的开发必须经过编写源程序、编译、连接和运行3个主要步骤,而编写汇编语言源程序要遵守汇编语言的语句格式和程序格式。4.1汇编语言程序开发汇编语言程序开发4.1.1 汇编语言语句格式汇编语言语句格式4.1.2 汇编语言程序格式汇编语言程序格式4.1.3 汇编语言程序开发过程汇编语言程序开发过程4.1汇编语言程序开发汇编语言程序开发用汇编语言编写的源程序是由许多语句(又称汇编指令)组成的。每个语句由14个部分组成,它们有两种格式:4.1.1 汇编语言语句格式汇编语言语句格式1l执行性语句由硬指令构成的语句,它通常对应一条机器指令:标号: 指令助记符 操作数,操作数 ;注释2l说明性

3、语句由伪指令构成的语句,它通常指示汇编程序如何汇编源程序 名字 伪指令助记符 参数,参数, ;注释其中,用方括号括起来的部分,可以有也可以没有。每部分之间用空格(至少一个)分开,一行最多可有132个字符。4.1汇编语言程序开发汇编语言程序开发4.1.1 汇编语言语句格式汇编语言语句格式标示符 标号和名字是符合汇编语法的用户自定义的标识符。标识符是用来标识指令或某一存储单元地址,每个标识符的定义是唯一的。可由下列字符组成: l字母:字母:AZ,az;l数字:数字:09;l特殊字符:特殊字符:?、_、$。4.1汇编语言程序开发汇编语言程序开发4.1.1 汇编语言语句格式汇编语言语句格式标示符 数字

4、不能作为标识符的第一个字符,而圆点仅能用做第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号,它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。 4.1汇编语言程序开发汇编语言程序开发4.1.1 汇编语言语句格式汇编语言语句格式指令助记符指令助记符l指令助记符表示不同操作的指令,可以是8088的指令助记符,也可以是伪指令。4.1汇编语言程序开发汇编语言程序开发4.1.1 汇编语言语句格式汇编语言语句格式 操作数操作数操作数是指令执行的对象。依指令的要求,可能有一个、两个或者没有。如:RET ;无操作数COUNT: INC CX ;一个操作数如果

5、是伪指令,则可能有多个操作数(参数)。如:COST DB 3,4,5,6,7 ;5个操作数MOV AX,BP+4 ;第二个操作数为表达式4.1汇编语言程序开发汇编语言程序开发4.1.1 汇编语言语句格式汇编语言语句格式 注注 释释 该项可有可无,是为源程序所加的注释,用于提高程序的可读性。使用分号区分为注释语句。 4.1汇编语言程序开发汇编语言程序开发4.1.2 汇编语言程序格式汇编语言程序格式 程序由一条一条语句(指令)构成,每条语句占一行。汇编语言程序中,语句可以分为3种:4.1汇编语言程序开发汇编语言程序开发4.1.2 汇编语言程序格式汇编语言程序格式1完整的汇编语言源程序由段组成。2需

6、独立运行的程需独立运行的程序必须包含一个序必须包含一个代码段,并指示代码段,并指示程序执行的起始程序执行的起始点,一个程序只点,一个程序只有一个起始点。有一个起始点。3所有的可执行性所有的可执行性语句必须位于某语句必须位于某一个代码段内,一个代码段内,说明性语句可根说明性语句可根据需要位于任一据需要位于任一段内。段内。4通常,程序还需要一个堆栈段。汇编语言源程序的组成原则汇编语言源程序的组成原则 4.1汇编语言程序开发汇编语言程序开发4.1.2 汇编语言程序格式汇编语言程序格式 完整段定义格式完整段定义格式DATAREA SEGMENT ; 定义数据段;数据定义语句DATAREA ENDS;*

7、 * * * * * * * * * * * * * * * * * * * * * * * * * PROGNAM SEGMENT ;定义代码段;-MAIN PROC FAR ;主程序ASSUME CS:PROGNAM, DS:DATAREA START: ;程序起始执行地址 ;为程序返回DOS设置堆栈值 PUSH DS ;入栈保存原DS段址 SUB AX,AX ;设置偏移地址为0 PUSH AX ;入栈保存偏移地址;置DS寄存器为当前数据段 MOV AX,DATAREA;DATAREA段地址 MOV DS,AX ;存入DS寄存器;主程序部分 RET ;返回 DOSMAIN ENDP ;主程

8、序结束;-SUB1 PROC NEAR ;定义子程序;子程序部分SUB1 ENDP ;子程序结束;-PROGNAM ENDS ;代码段结束;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *END START ;汇编结束4.1汇编语言程序开发汇编语言程序开发4.1.2 汇编语言程序格式汇编语言程序格式1汇编语言程序通常汇编语言程序通常由若干段组成,段由若干段组成,段由伪指令由伪指令SEGMENTSEGMENT与与ENDSENDS定义,各段定义,各段顺序任意,段的数顺序任意,段的数目按需要确定,原目按需要确定

9、,原则上不受限制。则上不受限制。2段由若干语句组成,语句以指令为主体而构成。一条语句写在一行上,书写时语句的各部分应尽量对齐。3汇编语言程序中至少要有一个启动标号,作为程序开始执行时目标代码的入口地址。启动标号常用START、BEGIN、MAIN等命名。4为增加程序为增加程序的可读性,的可读性,可在汇编语可在汇编语言语句言语句“; ;”后加上注释。后加上注释。汇编语言源程序结构特点汇编语言源程序结构特点4.1汇编语言程序开发汇编语言程序开发4.1.2 汇编语言程序格式汇编语言程序格式 简化段定义格式简化段定义格式.MODEL SMALL;定义存储器模型.STACK 100H ;定义堆栈段.DA

10、TA ;定义数据段;数据定义语句.CODE ;定义代码段MAIN PROC FARSTART: MOV AX,DATA ;数据段地址 MOV DS,AX ;存入DS寄存器;主程序部分 MOV AX,4C00H INT 21H ;返回DOSMAIN ENDP ;主程序结束 END START ;汇编结束4.1汇编语言程序开发汇编语言程序开发4.1.3 汇编语言程序开发过程汇编语言程序开发过程 在计算机上建立并运行汇编语言程序的基本步骤是:编辑程序、汇编程序、连接程序、运行程序。 4.1汇编语言程序开发汇编语言程序开发4.1.3 汇编语言程序开发过程汇编语言程序开发过程 汇编语言程序上机过程汇编语

11、言程序上机过程 4.2汇编语言的表达式汇编语言的表达式 汇编语句中的数据(常数、变量、标号、地址)都可以用表达式给出,MASM汇编语言允许使用的表达式有两种:数值表达式和地址表达式。表达式的运算在汇编阶段由汇编程序进行运算并将结果当做操作数。4.2汇编语言的表达式汇编语言的表达式4.2.1 数值表达式数值表达式4.2.2 地址表达式地址表达式4.1汇编语言的表达式汇编语言的表达式4.2.1 数值表达式数值表达式数值表达式的常用运算符运算符运算符类型型运算符号及运算符号及说明明算术运算符+(正)、-(负)、+(加)、-(减)、*(乘)、/(除)、MOD(取余)、SHL(逻辑左移)、SHR(逻辑右

12、移)逻辑运算符AND(与)、OR(或)、XOR(异或)、NOT(非)关系运算符EQ(相等)、NE(不相等)、GT(大于)、LT(小于)、GE(大于等于)、LE(小于等于)4.1汇编语言的表达式汇编语言的表达式4.2.1 数值表达式数值表达式常 量n 常量是指那些在将源程序翻译成目标程序期间已经有确定数值的量,直接写在汇编语言语句中,在程序的执行过程中,它不可能发生变化。n 常量主要用于伪指令语句中给变量赋初值,或者用做机器指令语句中的立即操作数,变址寻址和基址变址寻址中的位移量、比例因子等。n 通常用二进制、八进制、十进制或十六进制来书写常量。当数字的第一个字符是AF或af时,在字符前应添加一

13、个数字0,以示和变量的区别,如10101011B、1234D、1234H、0abcdH、AB等都是常量。 4.1汇编语言的表达式汇编语言的表达式4.2.1 数值表达式数值表达式 算术运算符如前表中所示。这些运算符和常量、括号可组成数值表达式 如120H LT 100H+3,21H LE 21H等。该表达式的计算结果规定如下: 若关系不成立,则该数值表达式的计算结果为0;否则,其结果为全1。4.1汇编语言的表达式汇编语言的表达式 注意:注意:算术运算的运算对象和运算结果都必须是整数,除法运算的结果只取商,模除运算的结果只取余数。4.2.1 数值表达式数值表达式MOV AH, 2+6 MOV CL

14、, 33/5MOV DL, 23 MOD 5 MOV BL, 00001010B SHL 4MOV AH, 0110B SHR 5 等效于:MOV AH,08HMOV CL,06HMOV DL,03HMOV BL,10100000BMOV AH,0000B4.1汇编语言的表达式汇编语言的表达式4.2.1 数值表达式数值表达式逻辑运算符和表达式逻辑运算符和表达式 逻辑运算符如前表中所示。这些逻辑运算符和常量、括号也可组成数值表达式。 如47H AND 0FH,NOT 56H。4.1汇编语言的表达式汇编语言的表达式【例例】 指令中的逻辑运算指令中的逻辑运算MOV ALMOV AL,NOT 0011

15、0011B NOT 00110011B MOV BLMOV BL,11110000B AND 10111101B 11110000B AND 10111101B MOV AHMOV AH,10100000B OR 00000101B 10100000B OR 00000101B MOV BHMOV BH,10101011B XOR 10100100B10101011B XOR 10100100B 等效于:等效于:MOV ALMOV AL,11001100B11001100BMOV BLMOV BL,10110000B10110000BMOV AHMOV AH,10100101B10100101

16、BMOV BHMOV BH,00001111B00001111B4.2.1 数值表达式数值表达式4.1汇编语言的表达式汇编语言的表达式 地址表达式是计算存储单元地址的表达式,它可由标号、变量名和由括号括起来的基址或变址寄存器组成。4.2.2 地址地址表达式表达式地址表达式的常用运算符运算符运算符类型型运算符号及运算符号及说明明分析运算符HIGH(高字节)、LOW(低字节)、SEG(段地址)、OFFSET(偏移量)、TYPE(标识符类型)、LENGTH(变量长度)、SIZE(变量容量)、WIDTH(记录/记录字段宽度)、MASK(记录/记录字段的屏蔽位)属性运算符PTR(符号地址)、段操作符、S

17、HORT(短转向地址)、THIS(指定类型)4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式标号 标号是指在代码段内定义和使用的指令地址。标号是可有可无的,如果有标号,必须和后面的操作项以冒号分隔开来。标号常作为转移指令的操作数,确定程序转移的目标地址。标号的3个属性:(1)段属性(SEG)(2)偏移属性(OFFSET)(1)距离属性(DISTANCE)4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式变量 变量在除代码段以外的其他段中被定义,用来定义存放在存储器单元中的数据。经过定义的变量有3个属性:(1)段属性。定义变量所在段的起始地址(即段基址)

18、。(2)偏移地址属性。表示变量所在的段内偏移地址。此值为一个16位无符号数,它代表从段的起始地址到定义变量的位置之间的字节数。(3)类型属性(TYPE)。表示变量占用存储单元的字节数,即所存放数据的长度。变量可分别被定义为8位(DB,1个字节)、16位(DW,2个字节)、32位(DD,4个字节)、64位(DQ,8个字节)和80位(DT,10个字节)数据。4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能: 选取表达式计选取表达式计算结果的高算结果的高8 8位和位和低低8 8位位HIGHHIGH和和LOWLOW运算符运算符格式:格式:HIGH/LO

19、W HIGH/LOW 表达式表达式4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能:计算变量或标号的段地址计算变量或标号的段地址如:如:MOV AX,SEG A MOV AX,SEG A ; ;将变量将变量A A所在段的段地址所在段的段地址值送值送AX AX SEGSEG运算符运算符格式:格式: SEG SEG 变量变量或标号或标号4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能:计算变量或标号的段内偏移计算变量或标号的段内偏移地址地址如:如:MOV BX,OFFSET A MOV BX,OFF

20、SET A ; ;将变量将变量A A的偏移地址值送的偏移地址值送BX BX OFFSETOFFSET运算符运算符格式:格式: OFFSETOFFSET 变量或标号变量或标号4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能: 计算变量或标号计算变量或标号的类型值的类型值TYPETYPE运算符运算符格式:格式: TYPE TYPE变量或标号变量或标号4.1汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能:对于使用对于使用DUPDUP定义的定义的变量,计算分配给该变量,计算分配给该变量的单元数,其他变量的单

21、元数,其他变量的变量的LENGTHLENGTH值为值为1 1LENGTHLENGTH运算符运算符格式:格式: LENGTH LENGTH 变量变量4.2汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能: 计算分配给该变计算分配给该变量的字节数量的字节数SIZESIZE运算符运算符格式:格式: SIZESIZE 变量变量4.2汇编语言的表达式汇编语言的表达式A1A1 DB DB21H, 42H21H, 42HA2A2 DW DW3412H3412HA3A3 DD DD?ALOP:ALOP:MOVMOVAL, TYPEAL, TYPEA1A1MOVMOV

22、BL, TYPEBL, TYPEA2A2MOVMOVAH, TYPEAH, TYPEA3A3MOVMOVDL, TYPEDL, TYPEALOPALOP等效于:等效于:ALOP:ALOP:MOVMOVAL, 1AL, 1MOVMOVBL, 2BL, 2MOVMOVAH, 4AH, 4MOVMOVDL, 0FFH DL, 0FFH 4.2.2 地址地址表达式表达式【例例】 指令中的指令中的TYPETYPE运算符运算符4.2汇编语言的表达式汇编语言的表达式FEES DW 100DUP(0) FEES DW 100DUP(0) ARRAY DW 1,2,3ARRAY DW 1,2,3MOV CX,L

23、ENGTH FEESMOV CX,LENGTH FEESMOV BX,LENGTH ARRAYMOV BX,LENGTH ARRAY等效于:等效于:MOV CX,100MOV CX,100MOV BX,1MOV BX,14.2.2 地址地址表达式表达式【例例】 指令中的指令中的LENGTHLENGTH运算符运算符4.2汇编语言的表达式汇编语言的表达式FEES DW 100DUP(0) FEES DW 100DUP(0) ARRAY DW 1,2,3ARRAY DW 1,2,3TABLE DB ABCDTABLE DB ABCDMOV CX, SIZE FEESMOV CX, SIZE FEES

24、MOV CX, SIZE ARRAYMOV CX, SIZE ARRAYMOV CX, SIZE TABLEMOV CX, SIZE TABLE等效于:等效于:MOV CX, 200MOV CX, 200MOV CX, 2MOV CX, 2MOV CX, 1MOV CX, 14.2.2 地址地址表达式表达式【例例】 指令中的指令中的SIZESIZE运算符运算符 注意:注意:当变量为DUP定义且DUP括号内为单项数据时,下列关系成立: SIZE=LENGTH*TYPE4.2汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式属性运属性运算符和算符和表达式表达式l属性运算符又称修改属性

25、运算符或合成运算符。属性运算符在程序运行过程中暂时修改变量或标号的属性。在程序运行过程中,当需要修改变量或标号的属性(段属性、偏移地址属性和类型属性)时,可用属性运算符来实现。4.2汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能: 用来修改变量或用来修改变量或标号的类型属性。标号的类型属性。PTRPTR运算符运算符格式:格式:类型类型 PTR PTR 表达式表达式4.2汇编语言的表达式汇编语言的表达式F1 DB 15HF1 DB 15HF2 DW 3132HF2 DW 3132HALPHA: MOV AX, WORD PTR F1ALPHA: MO

26、V AX, WORD PTR F1BETA: MOV BL, BYTE PTR F2BETA: MOV BL, BYTE PTR F24.2.2 地址地址表达式表达式【例例】4.2汇编语言的表达式汇编语言的表达式段操作运算又称段超越前缀。段操作运算又称段超越前缀。段寄存器(段寄存器(CSCS,DSDS,ESES和和SSSS)后跟一个冒号,)后跟一个冒号,称为修改段属性运算符,表示后跟的操作数由称为修改段属性运算符,表示后跟的操作数由指定的段寄存器提供段地址值。指定的段寄存器提供段地址值。4.2.2 地址地址表达式表达式4.2汇编语言的表达式汇编语言的表达式MOV AX, ES:BX MOV A

27、X, ES:BX ; ;从从ESES中偏移地址为中偏移地址为BXBX的地址中取出一个字送的地址中取出一个字送AX AX MOVMOVBL, DS:BP BL, DS:BP ; ;从从DSDS中偏移地址为中偏移地址为BPBP的地址中取一个字节送的地址中取一个字节送BL BL 4.2.2 地址地址表达式表达式4.2汇编语言的表达式汇编语言的表达式SHORTSHORT为短转向地址说明运算符,为短转向地址说明运算符,它说明转移指令的目标地址与本指令它说明转移指令的目标地址与本指令之间的字节距离在之间的字节距离在-128-128+127+127范围内,范围内,具有短程转移的属性。具有短程转移的属性。4.

28、2.2 地址地址表达式表达式4.2汇编语言的表达式汇编语言的表达式LOOP1: JMP SHORT LOOP2LOOP1: JMP SHORT LOOP2LOOP2: MOV AX, BXLOOP2: MOV AX, BX表示标号表示标号LOOP1LOOP1与目标标号与目标标号LOOP2LOOP2之间的距离小于之间的距离小于127127个字节。个字节。 4.2.2 地址地址表达式表达式4.2汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式分析运算符和表达式功能:功能:将变量或标号定义成指定将变量或标号定义成指定的类型,但并不分配新的的类型,但并不分配新的存储单元,其地址与跟在存

29、储单元,其地址与跟在后面的变量的地址相同。后面的变量的地址相同。THISTHIS运算符运算符格式:格式:变量变量/ /标号标号 EQU EQU THIS THIS 类型类型4.2汇编语言的表达式汇编语言的表达式4.2.2 地址地址表达式表达式GAMA EQU THIS BYTESTART EQU THIS FAR4.2汇编语言的表达式汇编语言的表达式n运算符的优先级4.2.2 地址地址表达式表达式优先先级运算符号运算符号低级1 ( )、 、LENGTH、SIZE、WIDTH、MASK2段超越前缀运算符(:)、PTR、OFFSET、SEG、TYPE、THIS3HIGH、LOW4、 (单目)5*、

30、/、MOD、SHL、SHR6、 (双目)7EQ、NE、LT、LE、GT、GE8NOT9AND10OR、XOR11SHORT4.3伪指令语句伪指令语句n汇编语言最主要的特点是用助记符代替机器指令的操作码,用符号代替操作数地址或操作数,这就是汇编语言中的机器指令语句。汇编语言程序中的语句可以由指令、伪指令和宏指令组成。n伪指令和指令的区别是:每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其他伪指令不生成目标码。4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令4.3.

31、2 符号定义伪指令符号定义伪指令4.3.4 其他伪指令其他伪指令4.3.3 段定义伪指令段定义伪指令4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令“助记符”字段说明所用伪指令的助记符。.“注释”字段用来说明该伪指令的功能,它也不是必须有的。 数据定义及存储器分配伪指令格式中的“变量”是操作数的符号地址,它是可有可无的,它的作用与指令语句前的标号相同,区别是变量后面不加冒号。如果语句中有变量,那么汇编程序将操作数的第一个字节的偏移地址赋于这个变量。数据定义及存储器分配伪指令的格式如下:数据定义及存储器分配伪指令的格式如下: 变量变量 助记符助记符 操作数操作数 ,操作数,操作

32、数 ; ;注释注释 4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令nDB(define byte)伪指令用来定义字节,对其后的每个数据都存储在一个字节中。DB能定义十进制数、二进制数、十六进制数和ASCII字符,二进制数和十六进制数要分别用“B”和“H”表示,ASCII字符用单引号()括起来。DB DB 伪指令伪指令4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令例如:COUNTER DB 6 DB A, D, 0Dh, $TABLE DB 1, 3, 5, 7, 9, 114.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令lDW(defi

33、ne word)伪指令用来定义字,对其后的每个数据分配两个字节(1个字),数据的低8位存储在低字节地址中,高8位存储在高字节地址中。DW DW 伪指令伪指令4.3伪指令语句伪指令语句例如:例如:Word1Word1 DW 89H, 1909H, -1 DW 89H, 1909H, -1DW 0abcdH, ?, 0DW 0abcdH, ?, 04.3.1 数据定义伪指令数据定义伪指令4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令 DD(define doubleword)伪指令用来定义双字,对其后的每个数据分配4个字节(2个字)。该伪指令同样将数据转换为十六进制,并根据低地

34、址存储低字节,高地址存储高字节的规则来存放数据。 DD DD 伪指令伪指令4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令例如:DW1 DD 12345678H, ?DW2 DD 0abcd1243H4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令 * DQ(define quadword)伪指令用来定义4字,即64位字长的数据,DQ之后的每个数据占用8个字节(4个字)。 DQ DQ和和DTDT伪指令伪指令*DT(define ten bytes)伪指令用来为压缩的BCD数据分配存储单元,它虽然可以分配10个字节(5个字),但最多只能输入18个数字,要注意的

35、是,数据后面不需要加H。 4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令 DUP(duplicate)伪指令可以按照给定的次数来复制某个(某些)操作数,用以避免多次输入同样一个数据。 DUP DUP 伪指令伪指令4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令例如,把6个0FFH存入相继字节中,可以用下面两种方法,显然用DUP的方法更简便些。DATA1 DB 0FFH,0FFH, 0FFH,0FFH,0FFH,0FFHDATA2 DB 6 DUP(0FFH)4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令 DUP操作一般用来保留数据区,如

36、用数据定义伪指令“DB 64 DUP(?)”可为堆栈段保留64个字节单元。DUP还可以嵌套。 DUP DUP 伪指令伪指令4.3伪指令语句伪指令语句4.3.1 数据定义伪指令数据定义伪指令例如:T1 DB 3 DUP(0)T2 DW 2 DUP(?)T3 DB 3 DUP(1, 2 DUP(50H)4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令 汇编语言中所有的变量名、标号名、过程名、指令助记符、寄存器名等统称为“符号”。这些符号可以用符号定义伪指令来命名或重新命名。 4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令功能:功能: 将表达式的值赋将表达式的值

37、赋给给EQUEQU左边的符号左边的符号等值语句等值语句 EQU EQU 格式:格式: 符号符号 EQU EQU 表达式表达式 nEQU伪指令的使用可使汇编语言程序简单明了,便于程序调试和修改。4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令1 用符号名代表常量或表达式。当把一个常量或表达式定义成一个具有一定含义的符号名后,在程序中就可以用该符号名来代表该常量或表达式。 NUMBERNUMBER EQUEQU100100 ; ;给缓冲区的长度取一个给缓冲区的长度取一个符号名符号名BUFF_LEN EQUBUFF_LEN EQU NUMBER+2NUMBER+2CRCR EQUE

38、QU 1313 ; ;给给“回车回车”符的符的ASCIIASCII码定义一个符号名码定义一个符号名LFLF EQUEQU 10 ;10 ;给给“换行换行”符的符的ASCIIASCII码码定义一个符号名定义一个符号名BUFFERBUFFER DBDBNUMBER, ?, NUMBER DUP (?)NUMBER, ?, NUMBER DUP (?) ; ;用符号名来定义缓冲区用符号名来定义缓冲区 4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令2 用符号名代表字符串。用一个具有一定含义的符号名定义某一个较长的字符串,在随后的程序中就用该符号名。 MOR EQU Good Mor

39、ning! 在该定义之后,就可使用符号名GREETING来代表字符串How are you!。4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令3用符号名代表关键用符号名代表关键字或指令助记符。字或指令助记符。MOVE EQU MOV ;MOVE EQU MOV ;给指令给指令MOVMOV取另取另一个符号名一个符号名MOVEMOVECOUNTER EQU CX ;COUNTER EQU CX ;给寄存器给寄存器CXCX取一取一个叫个叫“计数器计数器”的符号名的符号名 上面的定义只是给原来的助记符上面的定义只是给原来的助记符MOVMOV和和CXCX起了起了另一个别名,而原来助记符

40、另一个别名,而原来助记符MOVMOV和和CXCX仍然可以使用,仍然可以使用,所以,可编写如下语句:所以,可编写如下语句:MOVE AX, CX ;MOVE AX, CX ;相当于指令:相当于指令:MOV MOV AX, CXAX, CXMOV COUNTER, BX ;MOV COUNTER, BX ;相当于指令:相当于指令:MOV CX, BXMOV CX, BX4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令4用符号名定义存储用符号名定义存储单元的别名。可将单元的别名。可将一片存储单元定义一片存储单元定义为另一个数据类型为另一个数据类型的符号名,有关叙的符号名,有关叙述参

41、见前面的操作述参见前面的操作符符THIS。WORD1 EQU THIS WORDWORD1 EQU THIS WORD; ;给后面的字节存储单元取一给后面的字节存储单元取一个字属性的符号名个字属性的符号名BYTE1 DB 12h, 21hBYTE1 DB 12h, 21hFLAG DW 1234HFLAG DW 1234HFLAG1 EQU byte ptr FLAGFLAG1 EQU byte ptr FLAG; ;给给FLAGFLAG的低字节取一的低字节取一个字节属性的符号名个字节属性的符号名FLAG2 EQU byte ptr FLAG+1FLAG2 EQU byte ptr FLAG+

42、1; ;给给FLAGFLAG的高字节取一的高字节取一个字节属性的符号名个字节属性的符号名有了上述定义后,可编写如下语句:有了上述定义后,可编写如下语句:MOV AX, WORD1 ;MOV AX, WORD1 ;执行后,执行后,(AX)=2112H(AX)=2112HMOV BL, FLAG1 ;MOV BL, FLAG1 ;执行后,执行后,(BL)=34H(BL)=34H4.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令等值语句等值语句 EQUEQU注意:注意:等值语句在汇编时不产生任何目标代码,也不占用存储单元。但在同一个程序中,不能对经EQU语句定义的符号重新定义。4.3

43、伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令功能:功能: 等号语句与等号语句与EQUEQU语句有语句有同样的功能,区别在于等号同样的功能,区别在于等号语句定义的符号允许重新定语句定义的符号允许重新定义,使用更加方便灵活。义,使用更加方便灵活。THISTHIS运算符运算符格式:格式: 符号符号= =表达式表达式 下列等号语句是有效COUNT=5COUNT=5COUNT=COUNT+100COUNT=COUNT+1004.3伪指令语句伪指令语句4.3.2 符号定义伪指令符号定义伪指令LABELLABEL伪指令伪指令 n符号名定义语句LABEL与前面的操作符THIS功能类似,用于定义

44、一个指定的符号名,且该符号名的段地址和偏移量与下面紧跟存储单元的相应属性相同,但该符号的类型是新指定的。LABEL语句的一般格式如下:符号名符号名 LABEL LABEL 类型类型其中,常用的类型有其中,常用的类型有BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR和和FARFAR等。等。4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令 段定义伪指令指示汇编程序如何按段组织程序和使用存储器。在MASM 5.0以上的汇编语言版本中,有完整段定义伪指令和简化段定义伪指令两种。4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令段定义伪指令主要有SEG

45、MENT/ENDSSEGMENT/ENDSASSUMEASSUME完整段定义完整段定义 4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令段段的的定定 义义 段名 SEGMENT 定位类型 组合类型 类别名本段语句序列 段名 ENDS4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令1 BYTE BYTE(字节)(字节):表示本段起始单:表示本段起始单元可从任一地址开元可从任一地址开始。始。4PAGE(页):表示本段从一个页的边界开始。一页为256字节,所以段的起始地址一定能以256整除。这样,段起始地址的最后8位二进制数一定为0(也即以00H结尾的地址)。3PARA(

46、节):如果定位类型用户未选择,则默认为PARA。它表示本段从一个节的边界开始(一节为16字节)。所以段的起始地址一定能以16整除,最后4位二进制数一定是0,如09150H,0AB30H等。2WORD(字):表示本段从一个偶字节地址开始,即段起始单元地址的最后一位二进制数一定是0,即以0,2,4,6,8,A,C,E结尾。4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令NONENONECOMMONCOMMONPUBLICPUBLICATAT表达式表达式STACKSTACKMEMORYMEMORY组合类型4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令n类别用于表示段的分

47、类。类别名是由程序设计人类别用于表示段的分类。类别名是由程序设计人员自己选定的由任何字符串组成的名字,但是它员自己选定的由任何字符串组成的名字,但是它不能再作为程序中的标号、变量名或其他定义符不能再作为程序中的标号、变量名或其他定义符号。在连接处理时,号。在连接处理时,LINKLINK程序把类别名相同的所程序把类别名相同的所有段存放在连续的存储区内(如没有指定组合类有段存放在连续的存储区内(如没有指定组合类型型PUBLICPUBLIC、COMMONCOMMON时,它们仍然是不同的段)。时,它们仍然是不同的段)。类类别别名名 4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令例例题题

48、DATA1 SEGMENTWORD1DW1, 9078H, ?BYTE1DB21, Hello DD12345678HDATA1ENDS 【例例】 数据段的定义实例数据段的定义实例4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令例例题题CODE1 SEGMENTMOVAX, DATA1;把数据段DATA1的段值送AXMOVDS, AX ;把AX的值送给DS,即DS存储数据段的段值MOVAX, 4C00HINT21H ;调用DOS功能,结束程序的运行CODE1 ENDS 【例例】 代码段的定义实例代码段的定义实例4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令 在汇编

49、语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:ASSUME 段寄存器名:段名, 段寄存器名:段名, 其中,段寄存器是CS、DS、ES、SS,段名是在段定义语句说明时的段名。4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令例例题题 【例例】段寄存器的说明实例段寄存器的说明实例DATA1 SEGMENT ;定义数据段DATA1WORD1DW 4231HBYTE1DB AAAAFFFDATA1 ENDSDATA2 SEGMENT ;定义数据段DATA2WORD2DW 5566HWORD3DW 7878HDATA2 ENDS4.

50、3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令例例题题DATA3 SEGMENT ;定义数据段DATA3BYTE2DB ?DATA3 ENDSCODE1 SEGMENT ;编写代码段CODE1ASSUME CS:CODE1, DS:DATA1, ES:DATA2 ;(1)MOV AX, DATA1 ;(2)MOV DS, AX ;(3)MOV AX, DATA2 ;(4)MOV ES, AX ;(5)4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令例例题题MOV AX, WORD1 ;访问段DATA1中的字变量WORD1MOV WORD2, AX ;访问段DATA2中

51、的字变量WORD2ASSUME DS:DATA3, ES:NOTHING;(6)MOV AX, DATA3MOV DS, AXMOV BL, BYTE2 ;访问段DATA3中的字节变量BYTE2MOV AX, 4C00H ;(7)INT21H ;(8)CODE1 ENDS4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令堆栈段的说明 堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64KB的堆栈段。4.3伪指令语句伪指令语句4

52、.3.3 段定义伪指令段定义伪指令 简化段定义 用完整的段定义格式可以控制段的各种属性,MASM 5.0以后的汇编程序提供了一种简化的段定义方式,它使定义段更简单、方便。4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令 n存储模型伪指令 4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令 存储模型存储模型功功 能能适用系统适用系统Tiny(微型)所有数据和代码都放在一个段内,其访问都为NEAR型,整个程序小于或等于64 KB,并会产生.COM文件MS-DOSSmall(小型)所有代码在一个64KB的段内,所有数据在另一个64 KB的段内(包括数据段、堆栈段和附加段)M

53、S-DOSWindowsMedium(中型)所有代码大于64KB时可放在多个代码段中,转移或调用可为FAR型。所有数据限在一个段内,DS可保持不变MS-DOSWindowsCompact(紧凑型)所有代码限在一个段内,转移或调用可为NEAR型。数据大于64 KB时,可放在多个段中MS-DOSWindowsLarge(大型)代码段和数据段都可超过64 KB,被放置在有多个段内,所以数据和代码都是远访问MS-DOSWindowsHuge(巨型)单个数据项可以超过64KB,其他同Large模型MS-DOSWindowsFlat(平展型)所有代码和数据放置在一个段中,但段地址是32位的,所以整个程序可

54、为4 GB。MASM 6.0支持该模型OS/2Windows NT4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令 简化的段伪指令 简化段伪指令简化段伪指令功功 能能注注 释释.CODE 段名创建一个代码段段名为可选项,如不给出段名,则采用默认段名。对于多个代码段的模型,则应为每个代码段指定段名.DATA创建一个数据段段名是:_DATA.DATA?创建无初值变量的数据段段名是:_BSS.FARDATA 段名建立有初值的远调用数据段可指定段名,如不指定,则将以FAR_DATA命名.FARDATA? 段名建立无初值的远调用数据段可指定段名,如不指定,则将以FAR_BSS命名.CONS

55、T建立只读的常量数据段段名是CONST.STACK 大小创建一个堆栈段并指定堆栈段大小段名是STACK。如不指定堆栈段大小,则默认值为1 KB4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令 与简化段定义有关的预定义符号 LOGOAdd Your TitleAdd Your TitleAdd Your TitleCODE: 由.CODE伪指令定义的段名或段组名。DATA:由.DATA伪指令定义的段名,或由.DATA、.DATA?、.CONST和.STACK所定义的段组名。STACK:堆栈段的段名或段组名。4.3伪指令语句伪指令语句4.3.3 段定义伪指令段定义伪指令例例题题.MO

56、DEL SMALL.STACK 100H ; 定义堆栈段及其大小.DATA ; 定义数据段.CODE ; 定义代码段START: ; 起始执行地址标号MOV AX, DATA ; 数据段地址MOV DS, AX ; 存入数据段寄存器 MOV AX, 4C00HINT 21HEND START ;程序结束4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 简化段定义 除了以上介绍的伪指令之外,还有其他一些伪指令,如地址计数器$、指定起始位置伪指令、EVEN伪指令等。4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 地址计数器$ LOGOAdd Your TitleAdd You

57、r TitleAdd Your Titlen在汇编程序对源程序汇编的过程中,使用地址计数器来保存当前正在汇编的指令的地址。地址计数器的值在汇编语言中可用$来表示。n当$用在伪指令的参数字段时,它所表示的是地址计数器的当前值。n汇编语言允许用户直接用$来引用地址计数器的值n例如指令: JMP $+ 64.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令指定起始位置伪指令ORGORGORG格式:格式:ORG ORG 表达式表达式 其中,其中,ORGORG(originorigin)是操作码,不可省略。表达式给出偏)是操作码,不可省略。表达式给出偏移地址值,即移地址值,即ORGORG语句后的指

58、令或数据以表达式给出的值作为起语句后的指令或数据以表达式给出的值作为起始的偏移地址。表达式必须是一个可计算得到的正整数,数值范始的偏移地址。表达式必须是一个可计算得到的正整数,数值范围在围在0 06553565535之间。之间。4.2汇编语言的表达式汇编语言的表达式SDATA SEGMENTSDATA SEGMENTORG 0010H ORG 0010H D1 DB 00H, 5AH, 80H, 24HD1 DB 00H, 5AH, 80H, 24HORG 30HORG 30HD2 DW 4142H, 6162H, 0A0DHD2 DW 4142H, 6162H, 0A0DH SDATA EN

59、DSSDATA ENDS4.2.2 地址地址表达式表达式【例例】 如果不设置ORG语句,字节变量D1的第一个元素00H的偏移地址为0000H,字变量D2的第一个元素4142H的偏移地址应为0004H。由于ORG的设置,D1的第一个元素00H的偏移地址为0010H,而D2的第一个元素4142H的偏移地址为0030H。4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 EVENEVEN伪指令伪指令 EVEN伪指令使下一个变量或指令开始于偶数字节地址。 一个字的地址最好从偶地址开始,所以对于字数组,为了保证它从偶地址开始,可以在DW定义之前用EVEN伪指令来达到这一目的。4.2汇编语言的表达

60、式汇编语言的表达式DATA_SEG SEGMENTDATA_SEG SEGMENTBYTE_DAT DB ?BYTE_DAT DB ?EVENEVENWORD_DAT DW 100 DUP (?)WORD_DAT DW 100 DUP (?)DATA_SEG ENDSDATA_SEG ENDS4.2.2 地址地址表达式表达式【例例】4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 EVENEVEN伪指令伪指令 ALIGN伪指令使它后面的数据或指令从2的整数倍地址开始。其格式为:ALIGN 2n (n为任意整数) ALIGN伪指令保证了双字数组ARRAY地址边界从4的倍数开始。 ALI

61、GN伪指令是将当前偏移地址指针指向2的乘方的整数倍的地址,如果源地址指针已指向2的乘方的整数倍的地址,则不作调整;否则将指针加一个数,使地址指针指向下一个2的乘方的整数倍的地址。4.3伪指令语句伪指令语句ALIGN 4ALIGN 4ARRAY DD 100 DUP (?)ARRAY DD 100 DUP (?)ALIGN 2ALIGN 2和和EVENEVEN是等价的是等价的4.3.4 其他伪指令其他伪指令【例例】4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 程序开始伪指令程序开始伪指令程序开始伪指令程序开始伪指令 程序开始伪指令有两种指令格式,用来指示汇编语言源程序的开始,为模块

62、取名字。4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 (2 2)TITLETITLE伪指令。伪指令。格式:格式:TITLE TITLE 文本文本 TITLETITLE伪指令可指定所打伪指令可指定所打印模块的标题。如程序中印模块的标题。如程序中没有没有NAMENAME伪指令,则汇编伪指令,则汇编程序将用文本中的前程序将用文本中的前6 6个个字符作为模块名。文本最字符作为模块名。文本最多可有多可有6060个字符。个字符。(1)NAME伪指令。格式:NAME 模块 汇编程序将以给出的模块名作为模块的名字。4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令程序结束伪指令程序结束伪

63、指令 格式:格式:格式:格式:END END 标号标号 4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令 END标号表示源程序的结束。其中,标号为程序开始执行的起始地址标号。这样,程序在汇编、连接后,将目标代码装入内存之后准备要执行的起始地址由此标号所决定。如果多个程序模块相连接,则只有主程序要使用标号,其他子程序模块只用END而不必指定标号。这个表达式也可省略不写。4.3伪指令语句伪指令语句4.3.4 其他伪指令其他伪指令进制伪指令进制伪指令RADIX RADIX 伪指令伪指令RADIXRADIX用来设置整数的默认进制,宏汇编开始时用来设置整数的默认进制,宏汇编开始时默认的整数进制为十进制。该伪指令的使用格式如下:默认的整数进制为十进制。该伪指令的使用格式如下: .RADIX exp .RADIX exp 其中,伪指令前面要用点其中,伪指令前面要用点“. .”开始,开始,expexp的值必须是区的值必须是区间间2, 162, 16内的一个整数。内的一个整数。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号