微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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

原文地址:https://www.jb51.cc/delphi/102741.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐