代码之家  ›  专栏  ›  技术社区  ›  Alex F

条件移动问题

  •  0
  • Alex F  · 技术社区  · 14 年前

    汇编练习中的代码片段(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而不是$more,才能使用它进行打印。最后,该值将转到Linux系统调用4(write)的%ecx寄存器。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Matthew Slattery    14 年前

    汇编程序是正确的!CMOV 复写的副本 指令比MOV更有限:它们只能将16/32/64位值从内存移到寄存器中,或从一个寄存器移到另一个寄存器中。它们不支持立即数(或8位寄存器)操作数。

    http://www.intel.com/Assets/PDF/manual/253666.pdf -从可在 http://www.intel.com/products/processor/manuals/index.htm