在Delphi中,asm程序结束时要恢复什么CPU寄存器

在汇编代码中编写Delphi程序或函数时,在程序结束时必须保存哪些寄存器并恢复为原始值?

当从(inline)汇编代码调用一个Delphi程序或函数时,我可以期待其他功能与寄存器有关?哪些寄存器将被恢复到原来的值,哪些不可以?

(显然,同样的答案将适用于这两个问题)

我假设德尔福的default calling convention.我知道EAX用于32位返回值.看看SysUtils.pas中的asm代码,似乎EBX,ESI和EDI被推送和恢复,但其他的则不是.但是,我找不到任何文档.

解决方法

功能的三个第一个参数分别在EAX,EDX和ECX中给出.额外的参数被推送到堆栈.对于一个对象的方法,自我指针始终是(不可见)的第一个参数.结果应该在EAX中.对于返回长字符串的函数,函数的(不可见)最后一个参数是指向结果字符串的指针(它本身是指向字符串第一个字符的指针).

EBX不能更改(除非在程序/功能结束之前还原),所以不能ESP,EBP,ESI或EDI ..(1)以前在这里找到的Delphi在线ASM的一个很好的介绍:http://www.delphi3000.com/articles/article_3766.asp

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...