指令系统及汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令系统及汇编语言程序设计
2.4 伪指令
伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元的用途。伪指令在汇编过程中由汇编程序进行处理。
2.4.1 数据定义伪指令
数据定义伪指令用于定义变量的类型、给存储器赋初值或给变量分配存储单元。常用的数据定义伪指令有DB、DW和DD等。
格式: [变量名] 伪指令助记符数据表项
功能:定义一个数据存储区,其类型由所定义的数据定义指令而指定。
操作说明:方括号中的变量名为任选项,变量名后面不跟冒号“:”。数据表项可以包含多个数据之间用逗号分隔开。数据定义伪指令助记符有以下三种:
(1) DB定义变量类型为字节(BYTE),DB后面的每个数据占一个字节。
(2) DW 定义变量类型为字(WORD),DW后面的每个数据占一个字,即两个字节。在内存中,低字节在前,高字节在后。
(3) DD 定义变量类型为双字(DWORD),后面的每个数据占两个字。在内存中,低位字在前,高位字在后。
例如,有下列数据定义语句
D1 DB 1,-12
D2 DW 1,2010H
D3 DD 1,10203040H
数据表项中除了常数、表达式和字符串外,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋初值。相同的操作数重复出现时,可用重复符号“DUP”表示。
其格式为:
n DUP(初值[,初值,……]);n表示重复的次数,圆括号中为重复的内容。
下面是用问号或DUP表示操作数的例子:
ARRAY DB 1000 DUP(0)
VAR DW ?,?
2.4.2 符号定义伪指令
1. 赋值伪指令
格式:变量名 EOU 表达式
功能:将右边表达式的值赋给左边的变量。
操作说明:表达式可以是一个常数、符号、数值表达式或地址表达式。
需要注意的是:EQU伪指令不允许对同一符号重复定义。
EQU伪指令具体应用举例如下:
CR EQU ODH ;定义CR为常数(回车的ASCII代码)
TAB EQU TABLE-ASCII ;定义变量
DIS EQU 1024*768 ;定义数值表达式
ADR EQU ES:[DI+3] ;定义地址表达式
M EQU MOV ;定义助记符
2.等号(=)伪指令
格式:变量名=表达式
功能:将右边表达式的值赋给左边的变量。
操作说明:等号(=)伪指令的功能与EQU伪指令相仿,它可以对同一个名字重复定义。
利用等号(=)伪指令可以使程序设计更加灵活。
例如下面的程序段:
TABLE=1
MOV AX,TABLE
RRRR:ADD AX,1
┊
TABLE=TABLE+1
MOV AX,TABLE
CMP AX,100
JNE RRRR
┊
3. 定义符号名伪指令LABEL
格式:符号名 LABEL 类型
功能:定义一个标号或变量名,并指定其类型。
操作说明:其中符号名可以是标号或变量,LABEL伪指令通常要与指令语句或DB、DW、DD伪指令语句连用。与指令连用时,类型属性有NEAR和FAR两种;与DB等伪指令语句连用,可以使同一个数据区既有BYTE属性,又有WORD属性和DWORD属性,这样在以后的程序中根据不同的需要分别以字节或字为单位存取其中的数据。LABEL伪指令具体使用如下:
DATAW LABEL WORD ;变量DATAW类型为WORD
DATAB DB 20 DUP(?) ;变量DATAB类型为BYTE
MOV DATAW,AX ;按字存入
MOV DATAB[2],AL ;按字节存入
LABEL伪指令也可以将属性已经定义为NEAR的标号再定义为FAR属性。例如:
ABCF LABEL FAR ;过程入口(远程调用)
ABC MOV AX,0000H ;过程入口(段内调用)
上面的过程既可用标号ABC在本段调用,也可以用标号ABCF被其他段调用。
2.4.3 段定义伪指令
段定义伪指令在汇编语言源程序中定义逻辑段。常用的段定义伪指令有ASSUME、SEGMENT和ENDS等。
1. 段定义伪指令SEGMENT和ENDS
SEGMENT和ENDS伪指令用于定义一个逻辑段,给逻辑段赋予—个段名,并在后面的任选项中给出这个逻辑段的其他特性,如定位类型、组合类型和类别。
段定义伪指令格式如下:
段名SEGMENT [定位类型][组合类型][‘类别’]
┊
段名 ENDS
说明: SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令则表示一个逻辑段的结束,这两个伪指令总是成对出现,而且前面的段名必须一致。两个伪指令语句之间的部分是该逻辑段的内容。汇编语言的逻辑段包括代码段、数据段和堆栈段等。代码段主要是程序指令和某些伪指令;数据段用于定义数据和存储单元;堆栈段为堆栈操作预留出存储空间。
SEGMENT伪指令后面可以有三个任选项:
1)定位类型定位类型任选项是告诉汇编程序如何确定逻辑段的边界在存储器中的位置,定位类型有四种:
① BYTE表示逻辑段边界可以从任何一个字节开始。
② WORD 表示逻辑段边界从字地址开始,这样该逻辑段的起始地址必须是偶数。
③ PARA 表示逻辑段边界从节地址开始,16个字节称为一个节。如果省略定位类型任选项,汇编语言程序默认该逻辑段为PARA。
④ PAGE表示逻辑段边界地址从页边界开始,256个字节称为一个页。