【问题标题】:Is Masm can't compile psrldq directive?Masm 不能编译 psrldq 指令吗?
【发布时间】:2018-06-18 17:33:33
【问题描述】:

代码只有一行,我想如果我错过了一些声明。我的 ml 版本是6.14.8444

错误是:

错误 A2008:语法错误:xmm

汇编代码:

.686
.XMM
.model flat,stdcall
option casemap:none

.code
   psrldq  xmm0, 1
end

我在 vs2013 中尝试了内联汇编。没关系。代码:

int _tmain(unsigned int argc, _TCHAR* argv[]) {
    __asm {
        psrldq  xmm0, 1
    }
    return 0;
}

【问题讨论】:

    标签: assembly masm masm32


    【解决方案1】:

    psrldq 是 2001 年推出的 SSE2 的一部分。MASM 版本 6.14.8444 于 1999 年发布 (http://bytepointer.com/masm/index.htm#MASM_6.14)。因此,该 MASM 版本中的 SSE2 是未知的。

    如果你的 CPU 支持 SSE2,你可以插入代表操作码的数据:

    .686
    .XMM
    .model flat,stdcall
    option casemap:none
    
    .code
        db 66h, 0Fh, 73h, 0D8h, 01h      ; psrldq  xmm0, 1
    end
    

    【讨论】:

    • 不是有现代版的 MASM 吗?顺便说一句,如果这对未来的读者来说并不明显,那么在您正在编写的函数中手动编码所有 SIMD 指令基本上会破坏使用汇编程序的目的。它不可维护,所以它不是一个特别有用的解决方案。使用更新的汇编器。
    • @Mysticial:我忘记了细节,但 MASM 6.14 是最后一个版本(某些东西),这就是它仍在使用的原因。可能是关于 16 位代码,或者在 DOS 下运行,或者一些输出格式支持的东西?还是发行/许可问题?
    • @PeterCordes:MASM 版本 6.14.8444 随附 MASM32 package。更高版本的 MASM 支持 SSE2,但我记得你不能只交换 ML.EXE
    • MASM32 附带 6.14(而不是 6.15)的原因是,从 6.15 开始,EULA 要求您拥有 VC++ 6.0 许可证,而 6.14 则没有。 6.15 最终成为能够创建 16 位应用程序的最后一个版本。工具在 DOS 下运行的最后一个版本是 6.11,而后来的版本切换到 PE 控制台可执行格式。
    • 感谢您的回答。这是一种特殊的方式。我试试你的方法,成功了。而且我尝试用vs2013的ML.exe来编译,好像也可以。
    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2023-03-15
    相关资源
    最近更新 更多