引数が2つ以上あるときは、 どんな順番でスタックにつまれるのでしょう?
次のソースをコンパイルしたとき、 どのようなコードが生成されるか見てみましょう。
int foo(int, int, int) ;
int main(void) {
int x ;
x = foo(1, 2, 3) ;
return 0 ;
}
foo() の呼び出しは、次のようになりました。
b8 03 00 mov ax,3
50 push ax
b8 02 00 mov ax,2
50 push ax
b8 01 00 mov ax,1
50 push ax
9a 00 00 00 00 call FAR PTR _foo
83 c4 06 add sp,6
このコードからわかるように、 最後の引数からスタックにつまれます。
では、順を追ってスタックの変化を見ていきましょう。
このままでは、 スタックポインタの位置が foo()の呼びだし前後で変わってしまいます。 そこで、最後に add sp,6 をやって
foo() 側が、スタックをどう解釈するかについては、 プロトタイプ宣言の章で説明します。 お楽しみに!