给定长度倍数为8的字节向量,我怎样才能使用mmx指令将所有2的转换为5,例如?
.data
v1 BYTE 1, 2, 3, 4, 1, 2, 3, 4
感谢。
编辑:2和5只是一个例子。它们实际上是程序的参数。
答案 0 :(得分:6)
我确信有几种方法可以做到这一点。例如,以下内容应该有效:
1)在两个mmx
个寄存器(mm0
- mm7
2)将数据加载到另一个mmx寄存器中,例如使用MOVQ
3)将要测试的寄存器保持数据与2的掩码进行比较,例如使用PCMPEQB
,根据寄存器中的元素是否为2,这将导致FFh
和00h
的掩码
4)使用MASKMOVQ
,5的寄存器和比较产生的掩码有选择地将5'写入以前持有2的位置。 MASKMOVQ
将存储保留FFh
值的掩码位置的数据。
5)重复此操作直至完成。
6)最后,发出EMMS
以退出MMX状态。还会在例程结束时发出SFENCE
或MFENCE
指令(因为MASKMOVQ
会生成非时态提示)。
如果使用MMX而不是XMM,则无需担心对齐。
编辑:如果您在使用说明的详细信息时遇到问题,那么英特尔®64和IA-32架构软件开发人员手册,指令集参考(卷2A和2B)应包含您想知道的所有内容。你可以找到它们here。