使用带有masm的if指令时,指令操作数无效

时间:2011-12-22 00:48:03

标签: assembly x86 masm

  

可能重复:
  error A2070:invalid instruction operands with MASM
  Need help understanding conditional directives with MASM

我正在尝试实现以下基本代码块。我试图实现一个基本的if,elseif,elseif块来学习在MASM中使用条件指令,但似乎无法使逻辑工作。

.if a > b
sub a, 1
.elseif b >= c1
sub b, 2
.elseif c1 > d
mov eax, d
add c1, eax
.else
mov eax, d
cdq
mov ebx, 2
idiv ebx
mov d, eax
.endif

在.if和.elseif行上我得到上述错误A2070。

为什么呢?我的代码的实际问题是什么?

1 个答案:

答案 0 :(得分:1)

MASM最有可能希望比较的实体可以在单个CMP指令中直接编码。 CMP支持以下几对操作数:

  • reg / mem,reg
  • reg,reg / mem
  • reg / mem,imm

reg是注册,mem是内存位置,imm是数字常量,reg/memreg或{{1} }。因此,您不能直接比较两个内存位置或两个常量,mem指令不支持这样的操作数组合。