如何在内联汇编中访问delphi open数组参数
假设我有这样的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主题中.它指出:
所以,你的功能实际上与: procedure sortArray(ArrPtr: PDWORD; ArrHigh: Integer); 从那里,您只需要了解调用约定,再次记录在语言指南的Program Control主题中:
因此,ArrPtr在EAX中传递,ArrHigh在EDX中传递. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |