Ser*_*aas 13 delphi assembly cpu-registers basm
在汇编代码中编写Delphi过程或函数时,必须保存哪些寄存器并在过程结束时将其恢复为原始值?
从(内联)汇编代码调用另一个Delphi过程或函数时,我还能期望其他函数与寄存器有什么关系?哪些寄存器将恢复为原始值,哪些可能不会?
(显然,同样的答案适用于这两个问题)
我假设Delphi 的默认调用约定.我知道这EAX用于32位返回值.而看着SysUtils.pas的汇编代码,似乎EBX,ESI并EDI推而恢复,但有些则没有.但是,我找不到任何关于此的文档.
And*_*and 11
函数的前三个参数中给出EAX,EDX和ECX分别.其他参数被推入堆栈.对于对象的方法,Self指针始终是(不可见的)第一个参数.结果应该是EAX.对于返回长字符串的函数,函数的(不可见)最后一个参数是指向结果字符串的指针(它本身是指向字符串第一个字符的指针).
EBX不得改变(除非你的过程/函数结束之前恢复它),所以必须不ESP,EBP,ESI,或EDI无论是.(1)以下是对Delphi内联ASM的精彩介绍:http://www.delphi3000.com/articles/article_3766.asp
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |