程序集练习中的代码片段(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寄存器。
答案 0 :(得分:3)
汇编程序是正确的! CMOV cc 指令比MOV更受限制:它们只能将16/32/64位值从存储器移动到寄存器中,或从一个寄存器移动到另一个寄存器。它们不支持立即(或8位寄存器)操作数。
(参考:http://www.intel.com/Assets/PDF/manual/253666.pdf - 来自http://www.intel.com/products/processor/manuals/index.htm提供的手册集。)