给出一个长度为8的倍数的字节向量,例如,我如何使用mmx指令将所有2转换为5?
.data
v1 BYTE 1, 2, 3, 4, 1, 2, 3, 4谢谢。
编辑:2和5只是一个例子。它们实际上是过程的参数。
发布于 2010-01-25 02:52:26
我相信有几种方法可以做到这一点。例如,下面的代码应该可以工作:
1)在两个mmx寄存器(mm0-mm7)中制作(或加载)5和2之一的掩码
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。
https://stackoverflow.com/questions/2127944
复制相似问题