在Delphi中将函数变量存储在ASM函数中

Dan*_*man 1 delphi assembly basm

如何正确存储n以下功能?因为n在我使用它之后由于某种原因改变了价值.

function Test(n: Integer): Byte;
asm
  mov eax, n
  add eax, eax
  add eax, n
  mov ecx, eax
  mov ebx, eax
  mov ecx, n
end;
Run Code Online (Sandbox Code Playgroud)

And*_*and 5

该函数的第一个参数n存储在eax,所以你的行

mov eax, n
Run Code Online (Sandbox Code Playgroud)

很奇怪(转移nn).此外,如果您更改eax,则更改n.

您可以保存参数以供将来使用(因为您可能需要更改eax):

var
  tempN: integer;
asm
  mov tempN, eax
Run Code Online (Sandbox Code Playgroud)

此外,IIRC,您不能更改ebx编写内联ASM时的值.因此,您需要用push ebx和包围代码pop ebx.