如何在Delphi ASM中返回var参数

时间:2017-12-11 07:59:17

标签: delphi delphi-7

我远未掌握ASM的知识,所以如果这是一个愚蠢的问题,请原谅我。

我有这个功能:

function SwapDWord(const AValue: DWORD): DWORD;
asm
  BSWAP EAX
end;

如何将其转换为ASM中的过程:

procedure SwapDWordVar(var AValue: DWORD);
asm
  // ???
end;

我不想尽可能使用AValue := SwapDWord(AValue);。我想在ASM中这样做。

我通过查看system.pas尝试了很多愚蠢的事情,并试图了解要使用哪个寄存器。但没有任何效果。它总是返回原来的AValue

2 个答案:

答案 0 :(得分:6)

可能的变体:

procedure SwapDWordVar(var AValue: DWORD);
asm
  mov edx, [eax]
  bswap edx
  mov [eax], edx
end;

您可能会发现有用的Guido Gybels articles

答案 1 :(得分:2)

试试

procedure SwapDWordVar(var AValue: DWORD);
asm
  mov edx, dword ptr [AValue]
  bswap edx
  mov dword ptr [AValue], edx
end;

请注意,此版本将编译并适用于Win32和Win64。

但请注意,它不会比AValue := SWapDWord(AValue)快,因为大部分时间都花在调用函数上,而不是访问内存。