命令セット・アセンブリ

RISC-Vの標準の呼び出し規約で、整数の引数と戻り値の受け渡しに使うレジスタとして正しいものはどれか。

  1. A引数はs0〜s7、戻り値はra
  2. B引数はa0〜a7、戻り値はa0(とa1)
  3. C引数はすべてスタック、戻り値はsp
答えと解説を見る

正解:B. 引数はa0〜a7、戻り値はa0(とa1)

RISC-Vの標準の呼び出し規約では、整数の引数を最大8個までa0〜a7(x10〜x17)に入れて渡し、戻り値はa0に、64ビットの値などはa0とa1の2つに入れて返します。メモリより速いレジスタで受け渡すので、関数呼び出しの手間が小さくなります。8個を超える引数はスタックに置きます。浮動小数点の引数はfa0〜fa7を使います。

  • A. s0〜は保存用のレジスタ、raは戻り先です。
  • B. 正しい。aはargumentの意味です。
  • C. 8個まではレジスタで渡します。spはスタックの位置です。
この分野を解く 分野ページへ

命令セット・アセンブリのほかの問題

  1. RISC-Vの標準の呼び出し規約で、整数の引数が10個ある関数を呼ぶとき、9個目と10個目の引数はどこで渡されるか。
  2. RISC-Vの呼び出し規約で、s0〜s11が「呼び出し先保存(callee-saved)」のレジスタとされている意味として正しいものはどれか。
  3. RISC-Vの呼び出し規約で、t0〜t6は「呼び出し元保存(caller-saved)」のレジスタである。ある関数がt0に入れた値を、別の関数を呼んだ後も使いたいとき、正しい対応はどれか。
  4. ほかの関数を呼ばない関数(葉関数、リーフ関数)では、raをスタックに保存しなくてよい場合が多い。その理由として正しいものはどれか。
  5. RISC-Vの関数の先頭で「addi sp, sp, -16」を実行する目的として正しいものはどれか。