汇编练习的代码片段(GNU 汇编程序,Linux 32 位)
.data more: .asciz "more\n" .text ... movl $more, %eax # this is compiled cmova more, %eax # this is compiled cmova $more, %eax # this is not compiled
错误:“cmova”的后缀或操作数无效
我可以使用 movl 将字符串地址放入 %eax,但 cmova 未编译。我需要源操作数是 $more 而不是更多,以便将其用于打印。最后,这个值进入 Linux 系统调用 4(写入)的 %ecx 寄存器。
最佳答案
汇编器是正确的! CMOVcc 指令比 MOV 更受限制:它们只能将 16/32/64 位值从内存移动到寄存器,或从一个寄存器移动到另一个寄存器。它们不支持立即数(或 8 位寄存器)操作数。
(引用:http://www.intel.com/Assets/PDF/manual/253666.pdf - 来自 http://www.intel.com/products/processor/manuals/index.htm 提供的手册集。)
关于linux - 条件移动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3627046/