Calling Convention

Calling Convention (呼出規約)

 プログラミングにおける呼出規約はサブルーチンを呼び出す際の標準的な手法を指している.サブルーチンにデータを渡し,戻るべきアドレス(リターンアドレス)を記録し,サブルーチンからデータを受け取るための規則.一つのプログラムでは,同一の呼出規約を守る必要がある.

cdecl

 インテル x86 ベースのシステム上の C, C++ では cdecl 呼出規約が用いられることが多い.cdecl では関数の引数は右から左の順でスタックに積まれる.関数の戻り値は EAX に格納される.呼び出された側の関数では EAX, ECX, EDX のレジスタの元の値を保存することなく使用してよい.呼び出し側の関数では必要ならば呼び出す前にそれらのレジスタをスタック上などに保存する.例えば,以下の C プログラムの関数呼び出しは,,,

 int function(int, int, int);
 int a, b, c, x;
 ...
 x = function(a, b, c);

以下のような機械語を生成する.

 push c
 push b
 push a
 call function
 add esp, 12 ;スタック上の引数を除去
 mov x, eax