【问题标题】:Store function variable in ASM functions in Delphi在 Delphi 的 ASM 函数中存储函数变量
【发布时间】:2012-11-24 16:03:41
【问题描述】:

如何将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;

【问题讨论】:

    标签: delphi assembly basm


    【解决方案1】:

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

    mov eax, n
    

    非常奇怪(将n 移动到n)。此外,如果您更改eax,您将更改n

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

    var
      tempN: integer;
    asm
      mov tempN, eax
    

    另外,IIRC,您必须在编写内联 ASM 时更改 ebx 的值。因此,您需要用push ebxpop ebx 包围您的代码。

    【讨论】:

    • 但是我可以在哪里存储一些额外的值?除了堆栈
    • @DanilGholtsman:您可以随意使用寄存器,只要您恢复那些必须在“返回”之前恢复的寄存器。 (而且堆都是你的。)
    猜你喜欢
    • 2015-03-26
    • 2011-07-18
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多