XMM 的汇编 "dec" 指令
Assembly "dec" instruction for XMM
我目前正在使用以下方法将一个外部参数从 C 传递到 ASM:
myFunction proc myVar:qword
public myFunction
movdqu xmm3,oword ptr myVar
myFunction endp
最终,我想要类似于下面的东西,但首先需要确定如何将 myVar 减 1,然后才能解压和交错变量,以便它在传递后可以正确使用。我想不出 decrease/subtract XMM 来完成这项工作的正确方法。
dec myVar
movd xmm3, myVar
punpcklbw xmm3, xmm3
punpcklwd xmm3, xmm3
punpckldq xmm3, xmm3
punpcklqdq xmm3, xmm3
如有任何帮助,我们将不胜感激!
您可以在上面的代码中随时使用简单的一次减法,即
.data
ddqONE dd 01010101h,01010101h,01010101h,01010101h
.code
...
movd xmm3, myVar
punpcklbw xmm3, xmm3
punpcklwd xmm3, xmm3
punpckldq xmm3, xmm3
punpcklqdq xmm3, xmm3
psubb xmm3, oword ptr [ddqONE] ; the DEC operation on byte values
我在您的代码中注意到的另一个可能的问题:
myFunction proc myVar:qword ; passing 64 bit var on the stack
public myFunction
movdqu xmm3,oword ptr myVar ; referencing it as 128 bit var!!!
myFunction endp
由于您仅将 'myVar' 用于字节值,因此像这样传递它会更清晰(或将其作为双字传递,具体取决于 32 位或 64 位目标平台):
myFunction proc myVar:qword ; 64 bit
public myFunction
movq xmm3, qword ptr myVar ; 64 bit
myFunction endp
movd xmm3, myVar
pcmpeqb xmm4, xmm4 ; xmm4 = -1
pxor xmm5, xmm5 ; xmm5 = 0
pshufb xmm3, xmm5
paddb xmm3, xmm4
我目前正在使用以下方法将一个外部参数从 C 传递到 ASM:
myFunction proc myVar:qword
public myFunction
movdqu xmm3,oword ptr myVar
myFunction endp
最终,我想要类似于下面的东西,但首先需要确定如何将 myVar 减 1,然后才能解压和交错变量,以便它在传递后可以正确使用。我想不出 decrease/subtract XMM 来完成这项工作的正确方法。
dec myVar
movd xmm3, myVar
punpcklbw xmm3, xmm3
punpcklwd xmm3, xmm3
punpckldq xmm3, xmm3
punpcklqdq xmm3, xmm3
如有任何帮助,我们将不胜感激!
您可以在上面的代码中随时使用简单的一次减法,即
.data
ddqONE dd 01010101h,01010101h,01010101h,01010101h
.code
...
movd xmm3, myVar
punpcklbw xmm3, xmm3
punpcklwd xmm3, xmm3
punpckldq xmm3, xmm3
punpcklqdq xmm3, xmm3
psubb xmm3, oword ptr [ddqONE] ; the DEC operation on byte values
我在您的代码中注意到的另一个可能的问题:
myFunction proc myVar:qword ; passing 64 bit var on the stack
public myFunction
movdqu xmm3,oword ptr myVar ; referencing it as 128 bit var!!!
myFunction endp
由于您仅将 'myVar' 用于字节值,因此像这样传递它会更清晰(或将其作为双字传递,具体取决于 32 位或 64 位目标平台):
myFunction proc myVar:qword ; 64 bit
public myFunction
movq xmm3, qword ptr myVar ; 64 bit
myFunction endp
movd xmm3, myVar
pcmpeqb xmm4, xmm4 ; xmm4 = -1
pxor xmm5, xmm5 ; xmm5 = 0
pshufb xmm3, xmm5
paddb xmm3, xmm4