从tasm中的arg /参数读取

时间:2015-06-19 12:44:24

标签: assembly tasm

我有 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

我想读取参数值,但是有错误:操作数类型不匹配。为什么这不起作用?

2 个答案:

答案 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 ?