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 的整數倍地址開始