:http://en.wikipedia.org/wiki/X86_calling_conventions我々は明示的に呼び出された関数は、スタックポインタを復元するため、スタックからパラメータをpopedているはずなので、スタックをクリアするには、ESPに12を追加する必要がないのはなぜ呼び出し元がcdecl呼び出し規則でスタックをクリアする必要があるのはなぜですか?
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax
...?
もう一つの問題:
理論的には、(あなたがレジスタにスタック上の引数の数を渡した場合、インスタンス用)クリーンアップ、右の世話をして呼び出し先の変数パラメータの機能を実装することが可能だろうか?
正確に。 C関数を使うと、呼び出し元は関数を呼び出す前に好きなだけ多くの引数をスタックにプッシュできます。呼び出される関数は、どれくらい多く整理すべきか分かりません。 –
呼び出されたパラメータの数は、呼び出し先にどのようにして安全にアクセスできるかをどのように知っていますか? printf()の場合は、書式文字列を解析できますが、それ以外はどのようにしますか? – anon
http://an.wikipedia.org/wiki/Stdarg.h –