cmov 的操作数类型不匹配

Operand type mismatch for cmov

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

cmove   , %eax

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

Error: operand type mismatch for `cmove'

但是,将 cmove 替换为 mov 效果完美,并且

mov    ,   %ecx
cmove  %ecx, %eax

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

Am I missing something?

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

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

CMOVcc 的描述中,他们拼写了这一点:

These instructions can move 16-bit, 32-bit or 64-bit values from memory to a general-purpose register or from one general-purpose register to another.