pmovmskb可以有64位目的地吗?

时间:2015-07-16 14:33:29

标签: assembly x86

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

pmovmskb eax, mm0

但是错误拒绝以下内容:操作码和操作数的无效组合

pmovmskb rax, mm0

我不明白为什么这不合法?在英特尔手册中,操作行只是说 PMOVMSKB reg,mm ,但操作部分包含两者的解释:

  • PMOVMSKB(带有64位源操作数和r32)
  • PMOVMSKB(带有64位源操作数和r64)

这让我觉得我应该能够以EAX或RAX作为目的地来运行它,对吧?但也许有些东西我不明白......?

1 个答案:

答案 0 :(得分:3)

当我尝试使用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验证它不是该汇编程序中的错误:

enter image description here

嗯,MMX绝对是一个继母,最好忽略它曾经存在过。您可以在this page报告项目的错误。