匯編這樣可以直接讀寫內存的程序也需要用到變量。但它不像其它高級語言那樣把變量分成許多類型,它是按照變量的長度來區分的,所以定義(define)變量時就用5個不同的關鍵字:DB,DW,DD,DQ,DT(事實上常用的只有DB,DW)
DB(DEFINE BYTE)即定義的變量占一個字節的長度(也可以說把定義的變量值放入一個字節的內存空間)
如:
a DB 7h ;意思是將7h放入內存的某一個字節(空間)中,然后讓變量a指向這個字節
也可以這樣:
a DB 'h' ;雖然‘h’是個字符但存入內存卻成了它對應的ASCII碼48h
你也可以用DB來定義數組,如:
a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h
b DB 'Hello', 0
這樣定義出來的a和b中的元素是完全相同的。
可以作如下引用:
MOV AL, a[3]
也可以用指針和變址寄存器(BX, SI, DI, BP):
MOV SI, 3
MOV AL, a[SI]
如果你想定義一個具有一系列相同元素的數組可以用DUP關鍵字,如:
c DB 5 DUP(9)
與下面的效果相同:
c DB 9, 9, 9, 9, 9
d DB 5 DUP(1, 2)
相同於:
d DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
如果你想把一個超過1字節的值用DB來定義是不可能實現的,編譯器會報錯,如:
a DB 1234H ;編譯時是不能通過的,報錯信息:Cannot convert word to byte!
另外DUP的第一個操作數就是例子中的5,不能超過1020,否則會報錯:DUP expansion is over 1020 chars!
以上是DB的用法剩下的DW,DD,DQ,DT與之大至相同,除了它們不能定義字符數組(因為ASCII碼值就是0..255,一個字節肯定能放下一個字符的ASCII碼值)
DW(DEFINE WORD)定義一個字(兩個字節)長度
DD(DEFINE DOUBLE WORD)定義雙字(4個字節)長度
DQ(DEFINE QUARTET WORD)定義四字(8個字節)長度
DT(DEFINE TEN BYTE)定義十字節長度