命令セット・アセンブリ

条件分岐のしくみについて、RISC-Vとx86の違いとして正しいものはどれか。

  1. ARISC-Vはフラグを見て分岐し、x86は分岐命令が2つのレジスタを直接比べる
  2. Bどちらも条件分岐の命令を持たず、表引きでジャンプ先を決める
  3. CRISC-Vは分岐命令が2つのレジスタを直接比べ、x86は比較命令が設定したフラグを見て分岐する
答えと解説を見る

正解:C. RISC-Vは分岐命令が2つのレジスタを直接比べ、x86は比較命令が設定したフラグを見て分岐する

x86では「cmp eax, ebx」で比較してゼロや桁上がりなどのフラグ(条件コード)を設定し、次の「je」や「jl」がフラグを見て分岐します。RISC-Vはフラグを持たず、「beq a0, a1, L」「blt a0, a1, L」のように分岐命令自身が2つのレジスタを比べます。フラグのような暗黙の状態がないので、命令の並べ替えや同時実行のときに依存関係を追いやすくなります。

  • A. 逆です。
  • B. どちらも条件分岐命令を持っています。
  • C. 正しい。RISC-Vは比較と分岐が1命令です。
この分野を解く 分野ページへ

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

  1. RISC-Vの命令「slt t0, a0, a1」の動作として正しいものはどれか。
  2. 上のRISC-Vのコードを実行し終えたとき、t0の値はいくらか。
  3. RISC-Vの条件分岐命令(B形式)は、分岐先までの距離を13ビットの符号付きのバイト数で表し、その最下位ビットは常に0として命令に入れない。分岐命令が直接届く範囲としておよそ正しいものはどれか。
  4. RISC-Vの命令「jal ra, func」の動作として正しいものはどれか。
  5. RISC-Vの疑似命令「ret」は、実際にはどの命令として実行されるか。