定义字节变量的定义符为DB/BYTE(Define Byte),每个字节只占一个字节单元。其中:BYTE是MASM 6.0及其以后版本的数据类型说明符,随后的其它类型说明符同此说明。
例如:
| COUNTER | DB 6 | 
| 
 DB 'A', 'D', 0Dh, '$'  |       
  |
| TABLE | DB 1, 3, 5, 7, 9, 11 | 
上面的定义语句经汇编后所产生出的内存单元分配情况如图4.1所示。图中的数据是用十六进制表示的(以后也如此,不再说明),由引号括起来的字符在内存中是存放其ASCII码值。所以,'D'和0Dh是不同的,前者是字符'D',后者是数值12的十六进制编码。
|      
 …  |     
           
 06  |     
           
 41  |     
           
 44  |     
           
 0D  |     
           
 24  |     
           
 01  |     
           
 03  |     
           
 05  |     
           
 07  |     
           
 09  |     
           
 0B  |     
           
 …  |     
    
| COUNTER | TABLE | 
图4.1 内存单元的分配情况示意图
注意:在上例中,说明语句“DB 'A', 'D', 0Dh, '$'”之前并没有给出变量名,但我们可以从前面的变量名COUNTER一直往后数,或从TABLE往前数,来访问某存储单元,因为它们是一片连续的存储单元,这和高级语言的变量定义有点区别的。在高级语言中,我们一定要用某个标识符来说明变量,也必须用该变量名来访问其所对应的存储单元。
用定义符DB还可定义一种特殊的数据形式——字符串。在定义字符串时,必须用成对的单引号或双引号把所要的字符括起来,括号内字符的ASCII码将依次存放在相应的字节单元内。例如:
MSG1 DB 'I am a student.'
该说明语句所对应的存储单元分布如下所示。为了看起来方便,并没有用字符的ASCII码来存放在相应的存储单元内,而直接用该字符,请不要引起误解。
| … | 'I' | ' ' | 'a' | 'm' | ' ' | 'a' | ' ' | 's' | 't' | 'u' | 'd' | 'e' | 'n' | 't' | … | 
上面的例子也可改写为另一种等价的语句:
MSG1 DB 'I', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.'
显然,前者的说明要比后者方便得多,所以,在程序中都采用前者的书写方式。