第4回 コンパイラ実装会で出た質問です。
※ 例は32bit Windows限定のコードです。
【追記】Python版は以下を参照してください。
絶対アドレス
レジスタ経由で呼び出せば、相対アドレス計算が不要になります。
引数渡し
関数を呼び出す部分で毎回書き換えをするのは面倒です。関数のアドレスを引数で渡すと書き換えずに済みます。
call命令が実行されるとき、スタックの状態は以下のようになっています。
[esp+0] | 65 |
[esp+4] | 戻り先のアドレス |
[esp+8] | 引数 |