私はこの時点でC呼び出し規約に慣れています(Nasm - C calling conventionで説明)。この同じソースには、パスカルスタイルの呼び出し規約も記載されています。Cの呼び出し規約に代わるものはありますか?良い資源?利点/欠点?
私はさまざまな関数呼び出し規約(説明または情報源)を理解しようとしていますか?また、あるものを使用することの利点や欠点は何ですか?
注:ほとんどの場合、x86プラットフォームに関心がありますが、他のものを記述することは大歓迎です。 C呼び出し規約に
私はこの時点でC呼び出し規約に慣れています(Nasm - C calling conventionで説明)。この同じソースには、パスカルスタイルの呼び出し規約も記載されています。Cの呼び出し規約に代わるものはありますか?良い資源?利点/欠点?
私はさまざまな関数呼び出し規約(説明または情報源)を理解しようとしていますか?また、あるものを使用することの利点や欠点は何ですか?
注:ほとんどの場合、x86プラットフォームに関心がありますが、他のものを記述することは大歓迎です。 C呼び出し規約に
大きな利点がある:可変引数の
レジスタベースの呼び出しも便利です。多くのCコンパイラが、整数/ポインタをスタックにプッシュするのではなく、最適化するためにこれを行うと思いますが、もちろんライブラリでは外部から見える関数ではありません。
慣例についての全体的なポイントは、それらが従来のであることです。大会に従うことは、大会に従う他の人々が何を期待するかを知っているので、大会に従うことは理にかなっています。だから、本当にそれを考えすぎないでください。これは、群衆の後に目に見えるメリットが生じる場合です。
呼び出し元スタックのクリーンアップ対呼び出し先スタックのクリーンアップの議論もあります。後者では、コードが短くなることがあります。 –
「ret」ではなく「ret 12」を実行してから「esp、12を追加」することができますか?はい、私は実際にオペコードを保存したかったのは覚えていません。あなたはできる? (真に興味がある - おそらく、人々がまだこれらのことを気にしている場合があります) –
引数は、呼び出し先のスタックをクリーンアップすると、関数を呼び出すときにクリーンアップコードを複製する必要はない。もちろん、これは大きな問題ではなく、 'cdecl'は別のアプローチになりますが、これは違いの1つです。組み込みシステムでは、これが考慮すべき要素になります。 –
興味のあるタグを追加してください。おそらくはパスカルかもしれません。 – Mahesh
@Mahesh:これは、呼び出し規約について言えば、言語を暗示するタグを追加しません。 – sbi
@Mahesh:わかりません。私の提案は、Cタグを削除し、アセンブリー/言語に依存しないものを追加することです。 –