我似乎无法让cmove
以我想要的方式工作。我有这段代码:
cmove $1, %eax
我在编译时遇到这个错误:
Error: operand type mismatch for `cmove'
但是,将cmove
替换为mov
可以完美地运作,
mov $1, %ecx
cmove %ecx, %eax
也有效。我也试过使用cmovel
,但它不起作用。我错过了什么吗?
答案 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位值从存储器移动到通用寄存器或从一个寄存器 通用注册到另一个。