本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

令和元年度 技術士第一次試験問題【専門科目】

Ⅲ-11

IntelやAMDの64ビットアーキテクチャであるx64では、バイナリの互換性を高めるために、関数の呼出し規約を含むアプリケーション・バイナリ・インタフェース (Application Binary Interface、以下、ABIという。) が定められている。ABIに関する次の記述のうち、最も適切なものはどれか。

① Microsoft x64呼出し規約では、C言語ライブラリの printf を呼び出す際に、実引数に含まれる浮動小数点引数の数を特定のレジスタにセットしなければならない。

② System V AMD64 ABIにおける関数呼出しで、複数の整数値を実引数として渡すとき、最初の4つはレジスタで渡し、残りはスタックに積んで渡す。

③ Microsoft x64呼出し規約に基づく関数呼出しで、複数の整数値を実引数として渡すとき、引数渡しに用いるレジスタ数に合わせて、退避領域を確保しなければならない。

④ System V AMD64 ABIに従って実引数をスタックに積む際は、C言語と同様に右から順に積む。

⑤ Microsoft x64呼出し規約に従って関数を呼び出す際、呼び出し側がレジスタを保存しなければならない。


正解


解説

① 浮動小数点引数は4つまでを特定のレジスタにセットしなければならない。

② System V AMD64 ABIでは、複数の整数値を実引数として渡すとき、最初の6つはレジスタで渡し、残りはスタックに積んで渡す。
Microsoft x64呼出し規約では、複数の整数値を実引数として渡すとき、最初の4つはレジスタで渡し、残りはスタックに積んで渡す。

③ 汎用レジスタ(RCX、 RDX、 R8、 R9) が利用される。

④ 正しい。

⑤ 呼び出し先がレジスタを保存しなければならない。

Ⅲ-10 目次 Ⅲ-12