帮助简单组装mmx运动

nun*_*nos 0 assembly mmx

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

.data
v1 BYTE 1, 2, 3, 4, 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

谢谢.

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

Phi*_*hiS 6

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

1)制作(或加载)5个掩码和2个mmx寄存器中的2个寄存器(mm0- mm7)

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

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

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

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

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

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

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