2015-06-19 96 views
1

我有 color dw ?從ARG /參數閱讀TASM

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 

我想參數的讀取值,但有錯誤:操作數類型不匹配。爲什麼這不起作用?

+1

仔細校對您的代碼。你有'mov dl',沒有第二個參數。 – lurker

+0

對不起,有mov \t dl,[es:bx]; – user3597184

+0

prog.asm(214),它是行:mov [col],dl 操作數類型不匹配 – user3597184

回答

1

當你有一個指令,如在x86彙編以下:

mov [col], dl 

dl寄存器是8位,所以這是一定一個8位數據的操作。如果col而不是定義爲8位值,則會得到操作數類型錯誤。 col需要被定義爲一個8位的值,例如:

col db ? 

因爲在你的代碼中已經加載dl前清零的dxxor dx, dx高字節,你可以移動一個字:

mov [col], dx 

這裏,彙編器將假設數據類型是一定 16位,所以col必須定義爲一個字,例如:

col dw ? 
2

「我有顏色dw?」我得知這個變量是字大小的。
由於您事先清除了DX寄存器,因此應將mov [col], dl更改爲mov [color],dx以存儲結果。

第二個問題是您比較命令行的長度,但如果沒有參數則無法跳轉。您可以用jbret替換爲退出應用程序的位置。

mov cl, [es:bx] 
cmp cl, 2 
jb NoArg