2
我有以下,其完美地工作一C#通过参考指针:解除引用在asm DLL
procedure ShuffleAry16(var Ary16: TByteAry; MaskLow, MaskHigh: Int64); cdecl; assembler;
asm
movdqu xmm0, [rcx] // unaligned load Ary16
movq xmm1, rdx
pinsrq xmm1, r8, 1
pshufb xmm0, xmm1
movdqu qword ptr [rcx], xmm0 // unaligned save Ary16
end;
C#:
public static unsafe extern void ShuffleAry16(byte* ary, ulong maskLow, ulong maskHigh);
我其中我需要通过字节指针另一种情况下引用。让我们继续当前的方法为例:
public static unsafe extern void ShuffleAry16(ref byte* ary, ulong maskLow, ulong maskHigh);
我无法弄清楚如何在这种情况下正确获取ary(RCX)的地址。我尝试过lea,但它不起作用:
lea rax, [rcx]
movdqu qword ptr [rax], xmm0
我该怎么做?
我知道这可能是不可能的。 – IamIC 2015-02-09 09:09:20
我不认为你想'lea'在这里,从我的理解你应该只使用'mov',因为'ref byte *'与'byte **'是相同的。应该像'mov rax,qword ptr [rcx]'(在工作时没有任何东西需要测试) – 2015-02-09 09:21:28
工作,谢谢。请作为答复发布。 – IamIC 2015-02-09 09:29:05