有条件的移动问题

时间:2010-09-02 12:25:46

标签: linux assembly x86

程序集练习中的代码片段(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寄存器。

1 个答案:

答案 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提供的手册集。)