我似乎无法按照cmove自己想要的方式开始工作。我有这段代码:
cmove $1, %eax
Run Code Online (Sandbox Code Playgroud)
我在编译时收到此错误:
Error: operand type mismatch for `cmove'
Run Code Online (Sandbox Code Playgroud)
然而,替换cmove为,比如说,mov效果很好,并且
mov $1, %ecx
cmove %ecx, %eax
Run Code Online (Sandbox Code Playgroud)
也有效。我也尝试过使用cmovel,但就是不行。我错过了什么吗?
我错过了什么吗?
为了cmove $1,%eax工作,必须有一种cmove接受r32,imm(或r/m32,imm) 作为参数组合的形式。但英特尔手册cmove中列出的唯一有效形式是:
CMOVE r16, r/m16
CMOVE r32, r/m32
CMOVE r64, r/m64
Run Code Online (Sandbox Code Playgroud)
在他们的描述中CMOVcc阐明了这一点:
这些指令可以将 16 位、32 位或 64 位值从存储器移动到通用寄存器,或从一个通用寄存器移动到另一个通用寄存器。
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |