命令セット・アセンブリ

RISC-VのC拡張(圧縮命令)の主な目的はどれか。

  1. Aデータを圧縮して、メモリの使用量を減らす命令を加える
  2. BC言語のプログラムを直接実行できるようにする
  3. Cよく使う命令を16ビットで表し、プログラムの大きさを小さくする
答えと解説を見る

正解:C. よく使う命令を16ビットで表し、プログラムの大きさを小さくする

C拡張は、よく使う命令を短い形に限った16ビットの命令で表します。例えば「addi sp, sp, -16」や小さなオフセットのlw・swです。32ビットの命令と混ぜて使え、コードの大きさがおおむね25〜30%小さくなります。プログラムが小さいと、限られたフラッシュメモリに収まりやすく、命令キャッシュにも多く入るので、組込み機器でも高性能なCPUでも役立ちます。

  • A. データの圧縮命令ではありません。
  • B. CはCompressedの意味で、C言語とは関係ありません。
  • C. 正しい。コードの大きさをおよそ25〜30%減らせます。
この分野を解く 分野ページへ

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

  1. M拡張のないRV32IのCPU向けに、C言語の「a * b」(int同士の掛け算)をコンパイルすると、一般にどうなるか。
  2. 昔のMIPSなどにあった分岐遅延スロット(分岐命令の直後の1命令は、分岐するかどうかに関係なく実行される決まり)について正しいものはどれか。
  3. 64ビットのRV64Iでlw命令を実行すると、読み込んだ32ビットの値は64ビットのレジスタにどのように入るか。
  4. ABI(アプリケーションバイナリインターフェース)の説明として正しいものはどれか。
  5. C言語の関数ポインタを使った呼び出し「(*fp)(x)」は、RISC-Vでは一般にどの命令で行われるか。