帮助简单组装mmx运动

时间:2010-01-24 17:14:05

标签: assembly mmx

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

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

感谢。

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

1 个答案:

答案 0 :(得分:6)

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

1)在两个mmx个寄存器(mm0 - mm7

中制作(或加载)一个5的掩码和一个2的掩码

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

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

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

5)重复此操作直至完成。

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

如果使用MMX而不是XMM,则无需担心对齐。

编辑:如果您在使用说明的详细信息时遇到问题,那么英特尔®64和IA-32架构软件开发人员手册,指令集参考(卷2A和2B)应包含您想知道的所有内容。你可以找到它们here