伪指令和宏指令
8086宏汇编语言有两种类型的语句:
- 指令语句:在汇编过程中被翻译成相应的目标代码,经连接后生成可执行的机器指令代码。
- 伪指令语句:(指示性语句)在汇编时被解释执行,由汇编程序来处理的一类操作,如数据定义,分配存储器等。
前面用来多少内存单元的个数,在字符串定义/$表示数据结束符
1、伪指令语句的格式
格式:符号名 定义符 操作数;注释
1、常用伪指令
1、符号定义伪指令(赋值语句)
等值伪指令
格式:符号名 EQU 表达式
功能:将表达式的值赋给符号名。
例: ALFA EQU 100
COUNT EQU ALFA
注意:符号名一旦被EQU定义,就不能再赋值,即不能用EQU再为符号名重新赋值。
2、等号伪指令
格式:符号名 = 表达式
功能:将表达式的值赋给符号名。
说明:可以在程序中不同的地方多次使用以重新为符号名赋值。
例: ALFA = 100
MOV AL,ALFA ;AL←100
ALFA = ALFA+2 ; ALFA = 102
2、数据定义伪指令
格式:[变量名] DB 表达式 ;定义字节
[变量名] DW 表达式 ;定义字
[变量名] DD 表达式 ;定义双字
[变量名] DQ 表达式 ;定义8个字节
[变量名] DT 表达式 ;定义10个字节
表达式——是赋给变量的初始值,可以有一个,也可 以有多个,常见的有以下几种:
数值表达式
实际上是为数据分配存储单元,并把变量名作为该存储单元的名称。若要定义多个相同类型的数据,可用逗号把这些数据隔开,并依次分配在相邻的存储单元。
例:
BUF DB 20H,30H
BUF1 DW 100
DAT DW 1234H,5678H ;字变量DAT的内容为1234H,占用两个字节单元,下一个字单元即DAT+2单元的内容为5678H,仍是低字节存在低地址单元。

ASCII字符串
字符串必须用引号括起来,并且不超过256个字符,它们在内存中按地址递增顺序自左向右依次存放字符的ASCII码。
例:STRING DB ‘ABC’
STRING1 DB ‘ How are you? ’
例: DATA DB ‘AB’
DATA1 DW ‘AB’
3、?
?——为数据项分配存储单元的一种方法,只是存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最终结果。
例: RESULT DB ?;预置一个字节单元,其值不定
ABC DB 12H , ?, ? , 24H
DEF DW ?,895H ,?
4、重复定义子句 DUP——可以为若干个重复数据分
配存储单元。
格式: n DUP (表达式)
说明: n:重复次数 表达式:重复的内容
例: C DB 100 DUP(0)
TAB DB 100 DUP(5 DUP(1),2)
注意:
(1) DUP操作可以嵌套。
(2)在定义变量及存储单元的同时,也定义了它们的类型属性。同一数据定义语句所定义的各存储单元具有相同的类型。
例:
DA1 DB 3 DUP(5,?, 6); 从DA1地址单元开始存放三组“05H,预留,06H”共9个地址单元
DA2 DW 40 DUP(?);从DA2地址单元开始保留40个字共80个地址单元
DA3 DB 10 DUP(1,2,3 DUP(30,4);从DA3地址单元开始存放十组“01,02,30,04,30,04,30,04”,共占用80个字节**。**
3、段定义伪指令
格式:
段名 SEGMENT [定位类型][组合类型][‘类别名’]
┆段体
段名 ENDS
功能:把模块化分为若干个逻辑段。
每个SEGMENT/ENDS可定义一个逻辑段。
4、段寄存器说明伪指令
格式:
ASSUME 段寄存器 :段名[,段寄存器 :段名…]
功能:向汇编程序指示当前各段所用的段寄存器,设
定段寄存器与段的对应关系。
注意:
①本伪指令只是指示各逻辑段使用寄存器的情况,并没有对段寄存器内容进行装填。段寄存器的实际值(CS除外)还要由MOV指令在程序中装填数据。
②也可用来取消段寄存器与段之间的对应关系(用NOTHING),然后再建立新的对应关系。
例: ASSUME DS: NOTHING
ASSUME DS: DATAB
MOV AX, DATAB 装载数据段寄存器
MOV DS, AX
5、过程定义伪指令
过程是程序的一部分,它可以被程序调用。每次
可调用一个过程,当过程中的指令执行完后,控制返
回调用它的地方。过程的定义是用过程定义伪指令完成的。
格式: 过程名 PROC [NEAR / FAR]
┇ 过程体
RET
过程名 ENDP
宏指令
1、宏定义及其调用
宏定义格式: 宏指令名 MACRO [形参,形参,┅] ┇ 宏体
ENDM
宏调用的格式为: 宏指令名 [实参,实参,┅]
例:为了实现ASCII码和BCD码之间的相互转换,往往需要把AL中的内容左移或右移4位。设左移4位,可用下列指令序列实现:
MOV CL,4
SAL AL,CL
若多次使用,则可用一条宏指令来代替,宏定义如下:
SHIFT MACRO
MOV CL,4
SAL AL,CL
ENDM
例24:
┇
MOV AL,[DI]
ADD AL,[SI]
SHIFT ;宏调用
MOV [BX],AL
┇