TASM汇编编译提示Operand types do not match错误求助
报错信息:FileName.ASM(12) Operand types do not match
错误原因
- 变量
var1使用db关键字声明,属于8位单字节类型,而dx是16位通用寄存器,x86汇编要求赋值操作的两个操作数位宽必须匹配,二者类型不匹配因此触发编译错误。 - 你调用的
int 21hah=2是DOS单字符输出功能,要求待输出的ASCII码仅需存入8位的dl寄存器,无需操作dx的高8位dh,原本的写法也不符合功能调用的参数规范。
解决方案
将第12行的mov dx, var1修改为mov dl, var1即可修复编译错误。
如果你有其他需要将8位变量赋值给16位寄存器的场景,可以使用零扩展指令movzx dx, var1或者符号扩展指令movsx dx, var1完成位宽匹配后再赋值,本场景不需要该操作。
另外原代码中输出换行、回车的mov dx, 10、mov dx, 13也建议同步修改为mov dl, 10、mov dl, 13,符合中断调用的参数要求。
修正后完整可运行代码
.model small .stack 100h .data var1 db 65 var2 db 1 .code m proc mov ax, @data mov ds, ax mov cx, 5 x: mov dl, var1 mov ah, 2 int 21h mov dl, var2 add dl, 48 mov ah, 2 int 21h inc var1 inc var2 mov dl, 10 mov ah, 2 int 21h mov dl, 13 mov ah, 2 int 21h loop x mov ah, 4ch int 21h m endp end m
内容的提问来源于stack exchange,提问作者Hanson Deck
相关产品推荐
相关产品推荐

