1. [< 變量名 >]{db|dw|dd|dq|dt}< 表達(dá)式 >,< 表達(dá)式 >;
2. 表達(dá)式 為數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元的 , 用來(lái)留預(yù)存單元 . temp db ?
3. 帶 dup 的表達(dá)式 重復(fù)數(shù)據(jù)定義操作符
dup<( 表達(dá)式 )> tab1 db 10h dup 保留 10h 個(gè)字節(jié)單元
變量定義( define )偽指令為變量申請(qǐng)固定長(zhǎng)度的存儲(chǔ)空間,并可同時(shí)將相應(yīng)的存儲(chǔ)單元初始化
變量名 偽指令助記符 初值表
變量定義偽指令最常使用變量名
變量名為用戶自定義標(biāo)識(shí)符,表示初值表首元素的邏輯地址;用這個(gè)符號(hào)表示地址,常稱為符號(hào)地址
變量名可以沒(méi)有 , 這種情況,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,無(wú)符號(hào)地址
設(shè)置變量名是為了方便存取它指示的存儲(chǔ)單元
初值表
初值表是用逗號(hào)分隔的參數(shù)
主要由數(shù)值常數(shù)、表達(dá)式或?、 dup 組成
?——表示初值不確定,即未賦初值;
dup ——表示重復(fù)初值
dup 的格式為:
重復(fù)次數(shù) dup( 重復(fù)初值參數(shù) )
變量定義偽指令助記符
變量定義偽指令根據(jù)申請(qǐng)的主存空間單位分類
db ——定義字節(jié)偽指令
dw ——定義字偽指令
dd ——定義雙字偽指令
df ——定義 3 字偽指令
dq ——定義 4 字偽指令
dt ——定義 10 字節(jié)偽指令
還有定位偽指令
定義字節(jié)單元偽指令 db
db 偽指令用于分配一個(gè)或多個(gè)字節(jié)單元,并可以將它們初始化為指定值
初值表中每個(gè)數(shù)據(jù)一定是字節(jié)量( byte ),存放一個(gè) 8 位數(shù)據(jù):
可以是 0~255 的無(wú)符號(hào)數(shù)
或是- 128 ~+ 127 帶符號(hào)數(shù)
也可以是字符串常數(shù)
data segment ;數(shù)據(jù)段
x db 'a',-5
db 2 dup(100),?
y db 'abc'
data ends
字節(jié)單元定義實(shí)例
mov al,x
; 此處 x 表示它的第 1 個(gè)數(shù)據(jù),
故 al ← 'a'
inc x+1
; 對(duì) x 為始的第 2 個(gè)數(shù)據(jù)減 1 ,
故成為 -4
mov y,al
; 現(xiàn)在 y 這個(gè)字符串成為
'abc'
字節(jié)變量的應(yīng)用
定義字單元偽指令 dw
dw 偽指令用于分配一個(gè)或多個(gè)字單元,并可以將它們初始化為指定值
初值表中每個(gè)數(shù)據(jù)一定是字量( word ),一個(gè)字單元可用于存放任何 16 位數(shù)據(jù):
一個(gè)段地址
一個(gè)偏移地址
兩個(gè)字符
0 ~ 65535 之間的無(wú)符號(hào)數(shù)
- 32768 ~+ 32767 之間的帶符號(hào)數(shù)
data segment ;數(shù)據(jù)段
count dw 8000h,?,'ab'
maxint equ 64h
number dw maxint
array dw maxint dup(0)
data ends
字單元定義實(shí)例
字變量和字常量的定義:
wnum equ 5678h
; 定義 wnum 為常量
count dw 20h
; 定義 count 變量,假設(shè)在數(shù)據(jù)段的偏移地址為 10h
字變量和字常量的應(yīng)用:
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 偽指令用于分配一個(gè)或多個(gè)雙字單元,并可以將它們初始化為指定值
初值表中每個(gè)數(shù)據(jù)是一個(gè) 32 位的雙字量( double word ):
可以是有符號(hào)或無(wú)符號(hào)的 32 位整數(shù)
也可以用來(lái)表達(dá) 16 位段地址(高位字)和 16 位的偏移地址(低位字)的遠(yuǎn)指針
vardd dd 0,?,12345678h
farpoint dd 00400078h
其他數(shù)據(jù)單元定義偽指令
定義 3 字偽指令 df ——用于為一個(gè)或多個(gè) 6 字節(jié)變量分配空間及初始化
6 字節(jié)常用在 32 位 cpu 中表示一個(gè) 48 位遠(yuǎn)指針( 16 位段選擇器 :32 位偏移地址)
定義 4 字偽指令 dq ——用于為一個(gè)或多個(gè) 8 字節(jié)變量分配空間及初始化
8 字節(jié)變量可以表達(dá)一個(gè) 64 位整數(shù)
定義 10 字節(jié)偽指令 dt ——用于為一個(gè)或多個(gè) 10 字節(jié)變量分配空間及初始化
10 字節(jié)變量可以表達(dá)擴(kuò)展精度浮點(diǎn)數(shù)
例 : 數(shù)據(jù)定義綜合應(yīng)用
.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
定位偽指令
定位偽指令控制數(shù)據(jù)的偏移地址
org 參數(shù)
org 偽指令是將當(dāng)前偏移地址指針指向參數(shù)表達(dá)的偏移地址:
org 100h ; 從 100h 處安排數(shù)據(jù)或程序
org $+10
; 使偏移地址加 10 ,即跳過(guò) 10 個(gè)字節(jié)空間
masm 中,符號(hào)“ $ ”表示當(dāng)前偏移地址值
even ; 從偶地址開(kāi)始
align n ; 從 n 的整數(shù)倍地址開(kāi)始