color dw ?
和
parm:
mov ah, 62h
int 21h
mov es, bx
mov bx, 80h
mov cl, [es:bx]
cmp cl, 2
ret
mov bx, 82h
xor ax, ax
xor dx, dx
mov dl, [es:bx]
sub dl, '0'
mov [col], dl
inc bx
我想读取参数值,但是有错误:操作数类型不匹配。为什么这不起作用?
答案 0 :(得分:2)
从"我有颜色dw?" 我知道变量是字长。
由于您事先清除了DX寄存器,因此应将mov [col], dl
更改为mov [color],dx
以存储结果。
第二个问题是你比较命令行的长度但是如果没有参数则无法跳转。您可以将ret
替换为jb
到退出应用程序的位置。
mov cl, [es:bx]
cmp cl, 2
jb NoArg
答案 1 :(得分:1)
在x86程序集中有如下指令时:
mov [col], dl
dl
寄存器为8位,因此必然是8位数据操作。如果col
不定义为8位值,则会出现操作数类型错误。 col
需要定义为8位值,例如:
col db ?
在您的代码中,您在加载dx
之前已使用xor dx, dx
清除dl
的高字节,您可以移动一个字:
mov [col], dx
这里,汇编程序将假设数据类型必须 16位,因此必须将col
定义为单词,例如:
col dw ?