如何在内联汇编中访问delphi open数组参数

如何在内联汇编中访问delphi open数组参数,第1张

概述假设我有这样的delphi函数: procedure sortArray(arr: array of DWORD); register;asm //access array hereend; 如何在内联汇编中访问数组的特定元素?我已经知道arr实际上由2个参数组成:指向数组的指针及其High(),但我需要知道它是如何工作的.我假设指针将在eax和ebx中的高值,但我不太确定. proced 假设我有这样的delphi函数:

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

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

procedure sortArray(arr: array of DWORD); register;asm  mov DWORD PTR [eax+], //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.

因此,ArrPtr在EAX中传递,ArrHigh在EDX中传递.

总结

以上是内存溢出为你收集整理的如何在内联汇编中访问delphi open数组参数全部内容,希望文章能够帮你解决如何在内联汇编中访问delphi open数组参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存