4.2.2 字节变量

定义字节变量的定义符为DB/BYTE(Define Byte),每个字节只占一个字节单元。其中:BYTEMASM 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', '.'

显然,前者的说明要比后者方便得多,所以,在程序中都采用前者的书写方式。