安防之家讯:1. [< 变量名 >]{DB|DW|DD|DQ|DT}< 表达式 >,< 表达式 >;
2. 表达式 为数据项分配存储单元的 , 用来留预存单元 . TEMP DB ?
3. 带 DUP 的表达式 重复数据定义操作符
DUP<( 表达式 )> TAB1 DB 10H DUP 保留 10H 个字节单元
变量定义( Define )伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化
变量名 伪指令助记符 初值表
变量定义伪指令最常使用变量名
变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址
变量名可以没有 , 这种情况,汇编程序将直接为初值表分配空间,无符号地址
设置变量名是为了方便存取它指示的存储单元
初值表
初值表是用逗号分隔的参数
主要由数值常数、表达式或?、 DUP 组成
?——表示初值不确定,即未赋初值;
DUP ——表示重复初值
DUP 的格式为:
重复次数 DUP( 重复初值参数 )
变量定义伪指令助记符
变量定义伪指令根据申请的主存空间单位分类
DB ——定义字节伪指令
DW ——定义字伪指令
DD ——定义双字伪指令
DF ——定义 3 字伪指令
DQ ——定义 4 字伪指令
DT ——定义 10 字节伪指令
还有定位伪指令
定义字节单元伪指令 DB
DB 伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值
初值表中每个数据一定是字节量( Byte ),存放一个 8 位数据:
可以是 0~255 的无符号数
或是- 128 ~+ 127 带符号数
也可以是字符串常数
data segment ;数据段
X db 'a',-5
db 2 dup(100),?
Y db 'ABC'
data ends
字节单元定义实例
mov al,X
; 此处 X 表示它的第 1 个数据,
故 AL ← 'a'
inc X+1
; 对 X 为始的第 2 个数据减 1 ,
故成为 -4
mov Y,al
; 现在 Y 这个字符串成为
'aBC'
字节变量的应用
定义字单元伪指令 DW
DW 伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值
初值表中每个数据一定是字量( Word ),一个字单元可用于存放任何 16 位数据:
一个段地址
一个偏移地址
两个字符
0 ~ 65535 之间的无符号数
- 32768 ~+ 32767 之间的带符号数
data segment ;数据段
count dw 8000h,?,'AB'
maxint equ 64h
number dw maxint
array dw maxint dup(0)
data ends字单元定义实例
字变量和字常量的定义:
WNUM EQU 5678H
; 定义 WNUM 为常量
COUNT DW 20H
; 定义 COUNT 变量,假设在数据段的偏移地址为 10H
字变量和字常量的应用:
MOV AX,[BX+SI+WNUM] ; MOV AX,[BX+SI+5678H]
MOV AX,COUNT ; MOV AX,[0010H]
MOV AX,[SI+COUNT] ; MOV AX,COUNT[SI]
; MOV AX,[SI+10H]
LEA BX,COUNT ; LEA BX,[0010H]
MOV BX,OFFSET COUNT ; MOV BX,0010H
字变量和字常量
定义双字单元伪指令 DD
DD 伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值
初值表中每个数据是一个 32 位的双字量( Double Word ):
可以是有符号或无符号的 32 位整数
也可以用来表达 16 位段地址(高位字)和 16 位的偏移地址(低位字)的远指针
vardd DD 0,?,12345678h
farpoint DD 00400078h
其他数据单元定义伪指令
定义 3 字伪指令 DF ——用于为一个或多个 6 字节变量分配空间及初始化
6 字节常用在 32 位 CPU 中表示一个 48 位远指针( 16 位段选择器 :32 位偏移地址)
定义 4 字伪指令 DQ ——用于为一个或多个 8 字节变量分配空间及初始化
8 字节变量可以表达一个 64 位整数
定义 10 字节伪指令 DT ——用于为一个或多个 10 字节变量分配空间及初始化
10 字节变量可以表达扩展精度浮点数
例 : 数据定义综合应用
.model small
.stack
.data
bvar DB 16
wvar DW 4*3
dvar DD 4294967295 ; = 232 - 1
qvar DQ ?
DB 1,2,3,4,5
tvar DT 2345 ; 定义了 BCD 码 2345H
abc DB 'a','b','c'
msg DB 'Hello',13,10,'$'
bbuf DB 12 DUP('month')
dbuf DD 25 DUP(?)
CALLDOS EQU <int 21h>
.code
.startup
mov bl,bvar
mov ax,word ptr dvar[0]
mov dx,word ptr dvar[2]
; 取双字到 DX.AX
mov dx,offset msg
mov ah,09h
CALLDOS
.exit 0
end
定位伪指令
定位伪指令控制数据的偏移地址
ORG 参数
ORG 伪指令是将当前偏移地址指针指向参数表达的偏移地址:
ORG 100h ; 从 100h 处安排数据或程序
ORG $+10
; 使偏移地址加 10 ,即跳过 10 个字节空间
MASM 中,符号“ $ ”表示当前偏移地址值
EVEN ; 从偶地址开始
ALIGN n ; 从 n 的整数倍地址开始
安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/