4.2.2 字节变量的定义
4.2.2 字节变量
定义字节变量的定义符为DB/BYTE(DefineByte),每个字节只占一个字节单元。其中:BYTE是MASM6.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', '.'
显然,前者的说明要比后者方便得多,所以,在程序中都采用前者的书写方式。