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.
我似乎无法 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.