使用NASM版本2.11.08,以下编译就可以了:

pmovmskb eax, mm0

但是以下错误被拒绝:操作码和操作数的无效组合:
pmovmskb rax, mm0

我不明白为什么这不合法?在Intel手册中,操作行仅显示 PMOVMSKB reg,mm ,但“操作”部分包含以下两者的说明:
  • PMOVMSKB(带有64位源操作数和r32)
  • PMOVMSKB(带有64位源操作数和r64)

  • 因此,我认为我应该可以将EAX或RAX作为目的地来运行它,对吗?但是也许有些我不明白...?

    最佳答案

    当我尝试由ml64.exe生成的代码时,仅向您显示调试器的输出:

    .CODE
    testfunc PROC
        pmovmskb eax, mm0
    00007FF78A611060 0F D7 C0             pmovmskb    eax,mm0
        pmovmskb rax, mm0
    00007FF78A611063 48 0F D7 C0          pmovmskb    rax,mm0
        ret
    00007FF78A611067 C3                   ret
    

    使用this site验证它不是该汇编器中的错误:



    好吧,MMX绝对是继子,最好忽略它的存在。您可以在this page上报告该项目的错误。

    08-16 10:22