Delphiプロシージャまたは関数をアセンブリコードで記述する場合、プロシージャの最後にどのレジスタを保存して元の値に復元する必要がありますか?
(インライン)アセンブリコードから別のDelphiプロシージャまたは関数を呼び出す場合、他の関数がレジスタを処理することを期待できますか?どのレジスタが元の値に復元され、どのレジスタが復元されない可能性がありますか?
(明らかに、同じ答えが両方の質問に当てはまります)
Delphiのデフォルトの呼び出し規約を想定しています。私はそれEAX
が32ビットの戻り値に使用されていることを知っています。また、SysUtils.pasのasmコードを見ると、、がプッシュおよび復元されているように見えますEBX
がESI
、EDI
他のコードはそうではありません。ただし、これに関するドキュメントは見つかりません。