0

例如,给定一个长度为 8 倍数的字节向量,我如何使用 mmx 指令将所有 2 转换为 5?

.data
v1 BYTE 1, 2, 3, 4, 1, 2, 3, 4

谢谢。

编辑:2 和 5 只是一个例子。它们实际上是过程的参数。

4

1 回答 1

6

我确信有几种方法可以做到这一点。例如,以下应该工作:

mmx1)在两个寄存器(mm0- mm7)中制作(或加载)一个5的掩码和一个2的掩码

2) 将数据加载到另一个 mmx 寄存器中,例如使用MOVQ

3) 将保存要测试的数据的寄存器与 2 的掩码进行比较,例如使用,PCMPEQB这将根据寄存器中的元素是否为 2得到掩码FFh00h

4) 使用MASKMOVQ、带有 5 的寄存器和比较生成的掩码,以选择性地将 5 写入之前持有 2 的位置。MASKMOVQ将存储保存FFh值的掩码位置的数据。

5)重复这个直到完成。

6)最后,发出EMMS退出MMX状态。还要在例程结束时发出SFENCEor指令(因为会生成非临时提示)。MFENCEMASKMOVQ

如果您使用 MMX 而不是 XMM,则不必担心对齐问题。

编辑:如果您对指令的详细信息有疑问,英特尔® 64 和 IA-32 架构软件开发人员手册,指令集参考(第 2A 和 2B 卷)应该包含您想知道的所有内容。你可以在这里找到它们。

于 2010-01-24T18:52:25.967 回答