伪指令语句:(指示性语句)在汇编时被解释执行,由汇编程序来处理的一类操作。
伪指令的格式
格式:符号名 定义符 操作数; 注释
常用伪指令
1、符号定义伪指令(赋值语句)
(1)等值伪指令
格式:符号名 EQU 表达式 (EQU定义不占用内存单元)
功能:将表达式的值赋给符号名。
注意:符号名一旦被EQU定义,就不能再赋值,即不能用EQU再为符号名重新赋值。
(2)等号伪指令
格式:符号名 = 表达式
功能:将表达式的值赋给符号名。
说明:可以在程序中不同的地方多次使用以重新为符号名赋值。
(3)定义符号名伪指令
格式:符号名 LABEL 类型
功能:定义一个标号或变量,并指定其类型。
2、数据定义伪指令
表达式——是赋给变量的初始值,可以有一个,也可以有多个。
(1)数值表达式
实际上是为数据分配存储单元,并把变量名作为该存储单元的名称。若要定义多个相同类型的数据,可用逗号把这些数据隔开,并依次分配在相邻的存储单元。
例如:BUF DB 20H,30H
(2)ASCII字符串
字符串必须用引号括起来,并且不超过256个字符,它们在内存中按地址递增顺序自左向右依次存放字符的ASCII码。
例如:STRING DB 'ABC'
(3)?——
为数据项分配存储单元的一种方法,只是存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最终结果。
例如:RESULT DB ? ;预置一个字节单元,其值不定
(4)重复定义子句DUP——可以为若干个重复的字符或数字分配存储单元。
格式:n DUP(表达式)
说明:n:重复次数 表达式:重复的内容
例如:C DB 100 DUP (0)
注意:(1)DUP操作可以嵌套。(2)在定义变量及存储单元的同时,也定义了它们的类型属性。同一数据定义语句所定义的各存储单元具有相同的类型。
3、段定义伪指令
4、段寄存器说明伪指令(只是声明)
格式:ASSUME 段寄存器:段名【】
功能:向汇编程序指示当前各段所用的段寄存器,设定段寄存器与段的对应关系。
注意:(1)、本伪指令只是指示各逻辑段使用寄存器的情况,并没有对段寄存器内容进行装填。段寄存器的实际值还要由MOV指令在程序中装填数据。
(2)、也可以用来取消段寄存器与段之间的对应关系(用NOTHING),然后再建立新的对应关系。
5、过程定义伪指令
过程是程序的一部分,它可以被程序调用。每次可调用一个过程,当过程中的指令执行完后,控制返回调用它的地方。过程的定义就是用过程定义伪指令完成的。
6、模块定义及通信伪指令
(1)模块开始伪指令
格式:NAME 模块名
功能:指明程序模块的开始,并指出模块名。
说明:模块名是自定义符,不能是系统保留字。若该项缺省,则取TITLE语句中的页标题6个字符;若没用TITLE语句,则取源程序文件名为模块名。
(2)模块结束伪指令
格式:END 启动标号或过程名
功能:END表示一个模块(源程序)的结束。一个汇编程序只能有一个。通知汇编程序源程序到此结束,并给出执行程序的入口位置。
注意:汇编处理只进行到END为止。
宏指令
宏定义的格式: 宏指令名 MACRO 【形参,形参,---】
宏体
ENDM
宏调用的格式为:宏指令名【实参,实参,---】
例如:为了实现ASCII码和BCD码之间的互相转换,往往需要把AL中的内容左移或右移4位。设左移4位,可用下列指令序列实现:
若多次使用,则可用一条宏指令来替代:
扩展内容
ORG 偏移地址 声明偏移地址指令。
例如:ORG 0100H
DATA1 DB .....
则上段代码表明DATA1从0100H为偏移地址的位置开始。
$ 取当前偏移地址指令。
例如:ORG 0100H
DATA1 DW 1234H,$+1(偏移地址为0102H,加以后0103H,存入内存单元。)
则内存中为,34H,12H,03H,01H