cmov的操作数类型不匹配

时间:2017-01-31 12:38:56

标签: assembly att

我似乎无法让cmove以我想要的方式工作。我有这段代码:

cmove   $1, %eax

我在编译时遇到这个错误:

Error: operand type mismatch for `cmove'

但是,将cmove替换为mov可以完美地运作,

mov    $1,   %ecx
cmove  %ecx, %eax

也有效。我也试过使用cmovel,但它不起作用。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

  

我错过了什么吗?

要让cmove $1,%eax工作,必须使用cmove形式接受r32,imm(或r/m32,imm)作为参数组合。但Intel's manual中列出的唯一有效cmove形式为:

CMOVE r16, r/m16
CMOVE r32, r/m32
CMOVE r64, r/m64

CMOVcc的说明中,他们拼写出来:

  

这些指令可以将16位,32位或64位值从存储器移动到通用寄存器或从一个寄存器   通用注册到另一个。