gpt4 book ai didi

delphi - 如何在内联汇编中访问delphi开放数组参数

转载 作者:行者123 更新时间:2023-12-03 15:23:23 26 4
gpt4 key购买 nike

假设我有一个像这样的delphi函数:

procedure sortArray(arr: array of DWORD); register;
asm
//access array here
end;

如何在内联汇编中访问数组的特定元素?我已经知道 arr 实际上由 2 个参数组成:指向数组的指针及其 High(),但我需要确切地知道它是如何工作的。我假设指针将位于 eax 中,高值将位于 ebx 中,但我不太确定。

procedure sortArray(arr: array of DWORD); register;
asm
mov DWORD PTR [eax+$4], $09 //set the second element of arr to 9 ???
end;
顺便说一句。如果有人想知道:我在汇编中这样做是因为

a) 我想提高我的 asm 技能

b)我必须为学校做这个,并且想让它不那么无聊

最佳答案

要做的第一件事是停止按值传递数组。对于大型数组来说,这将是低效的。不要按值传递,而是将参数声明为 const。

但是,由于您的函数名为 sortArray,并且您的代码尝试修改数组,因此您更有可能需要 var 参数来获取所需的语义。

procedure sortArray(var arr: array of DWORD);

开放数组的 ABI 记录在 Program Control 中语言指南的主题。它指出:

An open-array parameter is passed as two 32-bit values. The first value is a pointer to the array data, and the second value is one less than the number of elements in the array.

因此,您的函数实际上与:

procedure sortArray(ArrPtr: PDWORD; ArrHigh: Integer);

从那里,您只需要了解调用约定,再次记录在 Program Control 中。语言指南的主题:

The first three parameters that qualify are passed in the EAX, EDX, and ECX registers, in that order.

因此,ArrPtrEAX 中传递,ArrHighEDX 中传递。

关于delphi - 如何在内联汇编中访问delphi开放数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26218034/

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