【发布时间】:2017-01-31 12:38:55
【问题描述】:
我似乎无法让cmove 以我想要的方式工作。我有这段代码:
cmove $1, %eax
我在编译时收到此错误:
Error: operand type mismatch for `cmove'
但是,将cmove 替换为mov 效果很好,并且
mov $1, %ecx
cmove %ecx, %eax
也可以。我也尝试过使用cmovel,但它不起作用。我错过了什么吗?
【问题讨论】:
-
有效地使用
cmov指令不可避免地意味着您将不得不破坏临时寄存器。你的第二个 sn-p 就是你这样做的方式,使用ecx作为暂存寄存器。请注意这是多么有效,因为mov指令从不影响标志,因此您始终可以将其插入到测试(设置标志)和条件移动之间。