x86_64 ASM:movq的替代方案?

时间:2015-12-29 12:01:27

标签: assembly mmx

是否有另一种方法可以将qword放入mmx寄存器?

例如,在此代码段中:

db random 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
run:
    movq mm2, [rel random]

我现在可以使用它作为qad 0xaaaaaaaaaaaaaaa并用它做pxor等。还有其他方法可以将数据放入寄存器吗?也许通过推/弹到它?

1 个答案:

答案 0 :(得分:3)

不知道为什么要这样做,但是如果你将寄存器归零然后使用某些操作引入值,则可以避免movq,例如:

pxor mm2, mm2
pxor mm2, [rel random]

或者,您可以使用pinsrw加载单词:

pinsrw mm2, [rel random], 0
pinsrw mm2, [rel random + 2], 1
pinsrw mm2, [rel random + 4], 2
pinsrw mm2, [rel random + 6], 3

这种方法也可以使用pextrw反向工作,但必须通过通用寄存器:

pextrw eax, mm2, 0
mov [rel random], ax
pextrw eax, mm2, 1
mov [rel random + 2], ax
pextrw eax, mm2, 2
mov [rel random + 4], ax
pextrw eax, mm2, 3
mov [rel random + 6], ax

如果只能避免movq但可以使用maskmovq,那么您可以这样做:

pcmpeqb mm1, mm1
lea rdi, [rel random]
maskmovq mm2, mm1