是否有指令“打包” amd64程序集中的寄存器?

用户名

amd64提供了许多晦涩的硬件快捷方式。我拥有的是0xff00ff00ff00ff00我想要的0xffffffff00000000,甚至是0x00000000ffffffff尽管挖掘了AMD的手册显示pshufb,但该手册的操作含糊不清。

我的问题是,是否有执行上述操作的指令(不是软件实现)?

黄昏-无效-

pshufb 可能是您想要的指令。

它需要两个MMX / XMM寄存器作为参数。第一个是要洗牌的数据;第二个是要洗牌的数据。第二个(“控制遮罩”)控制它的改组方式。

每个寄存器中的数据被分解为字节。对于输出的每个字节,处理器使用控制掩码中的相应字节来决定如何设置它:

  • 如果0x80设置了屏蔽字节的高位(),则该字节的结果为零。
  • 否则,掩码字节的下半部分将用作输入字节的索引。例如,如果掩码字节为0x03,则输入的第三个字节用于输出的此字节。

举例来说,的控制掩码0x0f0e0d0c0b0a09080706050403020100将反转寄存器中的字节。

请注意,如果您仅使用普通的整数寄存器,则将数据输入适当的寄存器可能会很麻烦。使用编译器内在函数可能会使此操作更容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在x86_64程序集中检查寄存器是否为零

编写AMD64 SysV程序集时,哪个寄存器可用作临时寄存器?

CS和DS寄存器是否仍会影响x64 intel中的指令

是否有一种简单的方法可以在AT&T程序集中将两个寄存器相乘:%eax *%ebx =%ecx

AMD的CPU寄存器是否不同?“ rax”与“ eax”有何不同?

用更少的指令对64位寄存器中的所有字节进行异或

是否有更好的AVX指令从3个ymm寄存器中移出数据?

Linux AMD64中如何使用fs / gs寄存器?

使用xmm寄存器的AMD Jaguar / Bulldozer / Zen上的vxorps调零是否比ymm快?

ARM-v8 NEON:是否有指令在NEON寄存器的多个通道之间拆分单个普通寄存器?

为什么32位寄存器上的x86-64指令将整个64位寄存器的高位归零?

哪里可以查看gdb中的程序计数器(PC)和指令寄存器(IR)

MIPS寄存器指令解码

用LEA指令减去寄存器?

带段寄存器的x86-64 MOV指令上的REX.W前缀

有没有办法在arm64中将32位寄存器复制到64位寄存器中?

汇编程序可以在1byte寄存器上使用movw指令吗?

我的处理器是64位的-这是否意味着我需要amd64映像?

如何在 AVX 寄存器上打包 16 个 16 位寄存器/变量

32 位和 64 位值是否共享相同的寄存器空间?

是否有类似于 Node 的 Webpack 的 PHP 打包器

如何检查寄存器是否具有偶数值?

与指令寄存器和计数器寄存器的混淆

CPU如何在64位模式下拥有其他寄存器?

内联汇编:将imm移至没有符号扩展的64位寄存器

程序每次运行时是否使用相同的cpu寄存器?

陷阱指令:为什么必须自动更改程序计数器和处理器状态寄存器?

如何将两个打包的64位Quadwords加载到128位Xmm寄存器中

%rax 寄存器在“调用”指令之后是否包含函数的返回值?