我一直在试图弄清楚这些指示正在发生什么,并且使它们变得毫无意义。我可以看到PSHUFLW指令作用于XMM寄存器的前16个字节,但无法弄清楚。我已经阅读了《英特尔®架构指令集扩展编程参考》中的解密,但似乎无法理解。我是一个非常有远见的人,因此将不胜感激。我已经使用代码

xxm0 = 00000000000000000000000000003E2D
PSHUFLW xmm0, xmm0, N


运行了一些测试,并且得到了以下结果
了解这些说明的工作原理,并可能提供与此类似的将来说明的直观指南。我只倒车了几周,所以我很新鲜。感谢您提供的任何帮助。

评论

因此,我可以看到大量参考文献,其中一些提到pshuflw,但没有具体示例。你能指出我正确的方向吗?

如果您使用xmm0 = 0xAAAABBBBBBCCCCDDDD
进行测试,则可能会发现图案

#1 楼

PSHUFLW的视觉故事如下:




我将在这里使用与Position相同的均值Order,从零开始(零索引)。

如您所见,它基于N的值从源中选择单词。选择的顺序/位置将由N的2位值选择。例如,当N = 4时,


根据N(= 00)的第一位(2位),它将在源的位置/顺序0选择word并将其复制到目标的位置0。 N(= 01)的第二个位(2位),它将在源的位置/顺序1处选择word并将其复制到目标的第一个位置。 = 00),它将在源的位置/顺序0处选择word并将其复制到目标的第二位置。
根据N(= 00)的第四位(2位),它将在位置的word源的/ order 0,并将其复制到目标的第3个位置。

下一个示例N = 17,


根据N(= 01)的第一位(2位),它将在源的位置/顺序1处选择word并将其复制到
根据N(= 00)的第二位(2位),它将在源的位置/顺序0处选择word并将其复制到目标的第一位。
根据第三位N(= 01)的2位(2位),它将在源的位置/顺序1处选择word并将其复制到目标的第二位置。
根据N(= 00)的第四位(2位) ),它将在源的位置/顺序0处选择word并将其复制到目标的第3个位置。 PSHUFD相同,只是它将从源中选择双字并在目标中复制。因此PSHUFD中将使用低位和高位四字,而PSHUFLW中将使用低位和四位字。

评论


非常感谢,现在我可以看到它非常简单。

–安藤
19年1月11日在22:14

我唯一的问题是,它如何产生上述结果?这是在调试器中通过更改值来计算的。

–安藤
19年1月11日在22:52



产生结果?我不明白你的问题!

–arman
19年1月11日在23:08

@arman:很好的解释,谢谢!

–恐怖
19/12/9在17:15