命令セット・アセンブリ

現在の高性能なx86のCPUが、複雑な命令を内部でどのように実行しているかの説明として正しいものはどれか。

  1. Aすべての命令を、ソフトウェアのエミュレータで1命令ずつ実行する
  2. B命令を解読してRISCに似た単純なマイクロオペレーションに分け、それをパイプラインで実行する
  3. C複雑な命令は実行できないので、OSがエラーとして停止させる
答えと解説を見る

正解:B. 命令を解読してRISCに似た単純なマイクロオペレーションに分け、それをパイプラインで実行する

x86のCPUは、可変長で複雑な命令を前段のデコーダでマイクロオペレーション(μop)と呼ぶ単純な操作に分け、後段ではそれらをアウトオブオーダーで実行します。一度分けたμopを保存して解読をやり直さずに済ませるμopキャッシュを持つCPUもあります。こうして、昔のソフトウェアとの互換性を保ちながら、RISCと同じような高速な実行の技術を使っています。

  • A. ソフトウェアでエミュレートしているわけではありません。
  • B. 正しい。外はCISC、中はRISCに近い形です。
  • C. 複雑な命令も実行できます。
この分野を解く 分野ページへ

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

  1. RISC-VのM拡張が基本の整数命令セットに追加する命令はどれか。
  2. RISC-VのC拡張(圧縮命令)の主な目的はどれか。
  3. M拡張のないRV32IのCPU向けに、C言語の「a * b」(int同士の掛け算)をコンパイルすると、一般にどうなるか。
  4. 昔のMIPSなどにあった分岐遅延スロット(分岐命令の直後の1命令は、分岐するかどうかに関係なく実行される決まり)について正しいものはどれか。
  5. 64ビットのRV64Iでlw命令を実行すると、読み込んだ32ビットの値は64ビットのレジスタにどのように入るか。