为什么这样定义字节内容编译器会出错

 

 

assume ds:data
data segment

	data1 db 'abcchsadhkjhsfaksaskhasf'
	
data ends

你这里错误是因为没有变量名

使用DB作为数据类型的时候,字符串长度不受限制,默认字符串的每一个字符占一个字节,并且存储过程中,是按照一个字符占一个字节的方式,顺序依次存储的

这里,data1的值将会被编译为这串字符串的首地址对应的偏移地址,也就是0000,此时,data1并不能够代表字符串的全部字符,你可以把它理解为data1 db 'a',也就是第一个字符a是字节型数据,它的标号是data1,但是它后面的字符是没有标号的。

这也就意味着,mov ax,data1会报错,因为data1是字节型数据,而mov al,data1会得到al = 61H。

 

补充:

如果你这样定义:
XY DB 05H, 43H, 21H, 32H
那么,内存中数据就这么分布
地址 数据
XY+0 05
XY+1 43
XY+2 21
XY+3 32

如果你改成这样定义:
XZ DW 4305H, 3221H
那么,内存中数据这么分布:
XZ+0 05
XZ+1 43
XZ+2 21
XZ+3 32

可以看出,这两种定义方式,数据在内存的分布是一模一样的。
区别仅仅是变量名的数据类型的属性不同。