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