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