assume cs: code, ds: data
data segment
a dw ?
b: db ?, ?
data ends
code segment
start:
xor ax, ax
push ax
push ds
mov ax, data
mov ds, ax
mov a, 12h ; 能够汇编,因为知道a是个word类型的数据,即相当于mov word ptr a, 12h
mov b, 12h ; 不能汇编,因为不知道b的数据类型,即其字节大小,得改成mov byte ptr b, 12h
; 报错:error A2001: immediate operand not allowed
retf
code ends
end start
比如
num1 db 12h
num2 dw 34h
不带冒号的标号num1,表示了12h在内存中存放地址,同时表示了12h是字节型的。同样num2表示了字类型数据34h在内存的地址,同时也表示了34h是字类型的。
所以有了上面的定义,mov ax,num1就是错误的(类型不一致)