gpt4 book ai didi

c# - 通过 asm DLL 中的 ref 指针取消引用 C#

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:31 25 4
gpt4 key购买 nike

我有以下内容,效果很好:

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

我该怎么做?

最佳答案

我不认为你想要 lea 在这里,根据我的理解你应该只使用 mov 因为 ref byte * 被编码了与 byte** 相同。

应该是这样的:

mov rax,qword ptr [rcx]

作为引用,我搜索了 lea 的确切内容,虽然它是在引用数组中的内容时使用的,但它实际上并没有访问任何内容,只是计算地址。这个 stackoverflow 答案对我的理解很有用:What's the purpose of the LEA instruction?

关于c# - 通过 asm DLL 中的 ref 指针取消引用 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28406009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com