如何在 Delphi ASM 中 return var 参数
How to return var parameter in Delphi ASM
我对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 尝试了许多愚蠢的事情,并试图了解要使用哪个寄存器。但没有任何效果。它总是 return 返回原来的 AValue
。
试试
procedure SwapDWordVar(var AValue: DWORD);
asm
mov edx, dword ptr [AValue]
bswap edx
mov dword ptr [AValue], edx
end;
请注意,此版本将编译并适用于 Win32 和 Win64。
但请注意,它不会比 AValue := SWapDWord(AValue)
快,因为大部分时间都花在调用函数上,而不是访问内存上。
可能的变体:
procedure SwapDWordVar(var AValue: DWORD);
asm
mov edx, [eax]
bswap edx
mov [eax], edx
end;
您可能会发现有用的 Guido Gybels articles
我对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 尝试了许多愚蠢的事情,并试图了解要使用哪个寄存器。但没有任何效果。它总是 return 返回原来的 AValue
。
试试
procedure SwapDWordVar(var AValue: DWORD);
asm
mov edx, dword ptr [AValue]
bswap edx
mov dword ptr [AValue], edx
end;
请注意,此版本将编译并适用于 Win32 和 Win64。
但请注意,它不会比 AValue := SWapDWord(AValue)
快,因为大部分时间都花在调用函数上,而不是访问内存上。
可能的变体:
procedure SwapDWordVar(var AValue: DWORD);
asm
mov edx, [eax]
bswap edx
mov [eax], edx
end;
您可能会发现有用的 Guido Gybels articles