資格道場 › レッスン一覧 › コンピュータ構成要素
コンピュータ構成要素・1/9・16分

コンピュータの基本構成と命令の実行

ゴール

コンピュータの5大装置と、命令が「取り出し→解読→実行」される流れを説明できるようになる。あわせて、実効アドレス(データが実際にある番地)の計算、リトルエンディアンの並べ方、アドレスバスの本数を、過去問で自力で解けるようになる。

CPUの中で命令がどう処理されるかは、科目Aのコンピュータ構成要素の土台です。特にアドレス指定方式とベースレジスタの計算は、毎回のように形を変えて出ます。仕組みを1回理解すれば、用語問題も計算問題もほぼ同じ考え方で解けます。

このレッスンで稽古する(用語チェック・過去問)

コンピュータは5つの装置でできている

結論:命令は「記憶装置」から取り出され、「制御装置」が解釈します。 コンピュータは入力・記憶・演算・制御・出力の5つの装置(5大装置)でできています。このうち制御装置と演算装置をまとめたものがCPU(中央処理装置。プロセッサとも呼ぶ)です。

厨房にたとえると、記憶装置はレシピ本と食材の棚、制御装置はレシピを読んで指示を出す料理長、演算装置は実際に包丁を握る調理担当です。料理長(制御)はレシピ(命令)を棚(記憶)から取ってきて読みますが、自分では切りません。

装置 役割 例
入力装置 データやプログラムを外から取り込む キーボード、マウス
記憶装置 プログラム(命令)とデータを置いておく 主記憶(メモリ)
制御装置 命令を取り出して解釈し、ほかの装置に指示を出す CPU内の制御部
演算装置 計算や比較をする CPU内のALU
出力装置 結果を外に出す ディスプレイ、プリンタ

基本構成図の読み方:図ではデータの流れを実線、制御の流れを破線で描きます。全部の装置に破線を伸ばしているのが制御装置です。入力→記憶→出力と実線で並ぶ真ん中が記憶装置、記憶装置と実線で行き来するもう1つが演算装置です。

試験での問われ方:「命令を解釈するのは演算装置」「命令は入力装置から直接取り出す」という選択肢がひっかけです。取出し=記憶、解釈=制御の組み合わせで覚えてください。

制御装置命令を解釈・指示入力装置取り込む記憶装置命令とデータ出力装置外に出す演算装置計算・比較データの流れ制御の流れ=CPU
5大装置のつながり。実線はデータの流れ、破線は制御の流れで、全部の装置に破線を伸ばしているのが制御装置です。

プログラム内蔵方式(ノイマン型)

結論:プログラムを先に主記憶に入れておき、CPUがそれを順に読み出して実行する方式を「プログラム内蔵方式」と呼びます。 考えた人の名前からノイマン型とも呼ばれ、今のコンピュータはほぼ全部この方式です。試験ではプログラム格納方式、プログラム記憶方式という呼び方でも出ます(3つとも同じ意味です)。

ひっかけには、名前が似ている別の仕組みが選択肢に並びます。どれも「実行方式」ではないので、まとめて切れるようにしておきます。

選択肢に出る語 本当は何か 正解になる?
プログラム内蔵/格納/記憶方式 主記憶のプログラムをCPUが順に読んで実行する ○
DMA制御方式 CPUを通さずに、入出力装置と主記憶の間で直接データを転送する ×
仮想記憶方式 補助記憶を使って、主記憶を実際より大きく見せる ×
アドレス指定方式 命令の中で、データの番地をどう指定するかのルール ×
直接プログラム制御方式 入出力のやり方の1つ(CPUが入出力を直接管理する) ×

見分け方:問題文に「主記憶に記憶されたプログラム」「順に読み出して実行」とあれば、答えは名前にプログラムと格納・記憶・内蔵が入っている選択肢です。

命令はこう実行される(CPUの中のレジスタ)

結論:CPUは「命令の取り出し(フェッチ)→解読→実効アドレス計算→データ読出し→実行」を繰り返します。 レジスタは、CPUの中にある小さくて高速な記憶場所です。それぞれのレジスタには決まった係があります。

flowchart LR
  A["① 命令フェッチ<br>PCの番地から命令を取る"] --> B["② 命令解読<br>命令レジスタ→命令デコーダ"]
  B --> C["③ 実効アドレス計算"]
  C --> D["④ オペランド読出し"]
  D --> E["⑤ 実行(ALU)"]
  E --> A
  1. **プログラムカウンタ(PC)**が持っている「次の命令の番地」を使って、主記憶から命令を取り出す
  2. 取り出した命令を命令レジスタに入れ、命令デコーダが意味を解読する
  3. データが置かれている番地(実効アドレス)を計算する
  4. その番地からデータ(オペランド)を読み出し、ALUで計算する

解読(②)とオペランド読出し(④)の間にあるのは実効アドレス計算です。この順番はそのまま問題になります。

レジスタ・部品 持っているもの・役割 分類
プログラムカウンタ(プログラムレジスタ・命令アドレスレジスタ) 次に実行する命令の番地 制御
命令レジスタ 主記憶から取り出した命令そのもの 制御
命令デコーダ 命令レジスタの命令を解読する回路 制御
ALU 計算や比較をする回路 演算
アキュムレータ 計算の途中結果や計算結果 演算
フラグレジスタ 計算結果の状態(0か、マイナスか など)。条件分岐で使う 演算
メモリアドレスレジスタ 主記憶にアクセスする番地 記憶側

試験での問われ方:PCの役割を聞く問題では、命令レジスタ(命令を保持)、フラグレジスタ(演算結果の状態)、データ用レジスタ(データを保持)の説明が選択肢に並びます。PCが持つのは命令ではなく番地です。また、図で「主記憶→a→命令デコーダ」と並んでいれば、aは命令レジスタです。

主記憶命令…データCPUプログラムカウンタ次の命令の番地命令レジスタ取り出した命令そのもの② 命令デコーダで解読命令の意味を読む③ 実効アドレス計算データの番地を決める⑤ ALUで実行計算・比較する①④
PCの番地で主記憶から命令を取り出し(①)、命令レジスタの命令を命令デコーダで解読し(②)、実効アドレスを計算して(③)、その番地のデータを読み出し(④)、ALUで実行します(⑤)。

命令語の形:命令部とアドレス部

結論:1つの命令は「何をするか(命令部)」と「何に対してするか(アドレス部=オペランド)」の組み合わせです。 オペランドとは、命令の対象になるデータや、その番地のことです。

押さえるのは次の2点だけです。

  • オペランドがない命令もある(例:停止命令)
  • 命令語の長さ(命令語長)は、1台のコンピュータの中でも命令によって違うことがある

ひっかけは「オペランドの個数=主記憶の番地の個数」「命令語長はすべて等しい」のように言い切っている選択肢です。オペランドにはレジスタを指定することもあるので、番地の数と一致するとは限りません。

アドレス指定方式(最頻出)

結論:命令のアドレス部の値に何を足すか、何回たどるかで、データがある番地(実効アドレス)が決まります。 アドレス指定方式は、その決め方のルールです。この分野でいちばん多く出題されています。

方式 実効アドレスの求め方 覚え方
即値 アドレス部の値がデータそのもの 番地を見に行かない
直接アドレス指定 アドレス部の値=実効アドレス 1回で着く
間接アドレス指定 アドレス部が指す番地の中身が実効アドレス 2回たどる
指標(インデックス修飾) アドレス部+指標(インデックス)レジスタ 配列の何番目かをずらす
基底(ベースレジスタ) アドレス部+ベースレジスタ プログラムの先頭位置を足す
相対アドレス指定 アドレス部+プログラムカウンタ(命令アドレスレジスタ) 今いる場所からの距離

間接アドレス指定を住所でたとえると、「20番地に行け」と書いたメモがあり、20番地に着くと「25番地に行け」と書いてある、という二段の道案内です。データにたどり着くのは25番地です。

見分け方は足す相手で決まります:インデックスレジスタなら指標、ベースレジスタなら基底、プログラムカウンタ(命令のある場所)なら相対です。

試験での問われ方

  • 図の矢印が主記憶の中で2回跳んでいたら間接アドレス指定。1回で終わる直接アドレス指定と迷わせる
  • インデックス修飾の計算問題に命令が格納されているアドレスがわざと書いてある。これは相対アドレス指定で使う値なので、足さない
  • 「オペランド+命令アドレスレジスタ」の説明に、指標アドレス指定を並べて迷わせる
直接アドレス指定:1回で着く命令命令部20アドレス部20番地データ間接アドレス指定:2回たどる命令命令部20アドレス部20番地251回目2回目25番地データデータがあるのは25番地(20番地ではない)
命令は命令部とアドレス部(20)でできています。直接アドレス指定は20番地に1回で着き、間接アドレス指定は20番地の中身「25」をもう一度たどって25番地のデータに着きます。

ベースレジスタ方式の計算

結論:実効アドレス=AD(アドレス部)+ベースレジスタの中身。読み込まれるのは、その番地に入っている値です。 番地そのものを答えにしないことが一番大事です。

解き方は毎回同じです。

  1. ADとベースレジスタの中身を足して、実効アドレスを出す
  2. 主記憶の表で、その番地の中身を読む
  3. それが答え(もう一度たどらない)

試験での問われ方:選択肢には「足し忘れ(ADの番地の中身)」「足した番地の中身を、さらにもう一度たどった値」「ずれた番地の中身」が並びます。足すのは1回、たどるのも1回です。下の例題で手順を確認してください。

エンディアン:バイトを並べる順番

結論:リトルエンディアンは、下位のバイトを小さい番地から置きます。 複数バイトのデータをメモリに並べるときの順番をエンディアンと呼びます。

方式 小さい番地(オフセット0)に置くもの ABCD1234 の並び(0,+1,+2,+3)
ビッグエンディアン 上位バイト(書いた順のまま) AB, CD, 12, 34
リトルエンディアン 下位バイト(バイト単位で逆順) 34, 12, CD, AB

試験での問われ方:逆にするのはバイト(16進数2桁)単位です。1文字ずつ逆にした「43, 21, DC, BA」は誤りです。書いた順のままの並びはビッグエンディアンです。

ABCD1234 を1バイト(16進2桁)ずつ分けるABCD1234上位下位3412CDAB0+1+2+3リトルエンディアン:下位バイトが番地0へ×43, 21, DC, BA(1文字ずつ逆は誤り)
リトルエンディアンでは、ABCD1234をバイト単位に分け、下位の34を番地0(オフセット0)に置くので、バイトの並びが逆順になります。

アドレスバスの本数

結論:信号線がn本あれば、2のn乗個の番地を区別できます。必要な本数は、2のn乗が番地の数以上になる最小のnです。 1本の信号線は0か1の2通りを表せるので、n本なら2のn乗通りになります。

容量(バイト単位でアクセス) 2の何乗か 必要な本数
1Kバイト 2の10乗 10本
1Mバイト 2の20乗 20本
1Gバイト 2の30乗 30本

試験での問われ方:図にデータバス(D0〜D7の8本)が描かれていますが、本数の計算には関係ありません。答えを決めるのは番地の数だけです。

例題 1

図から間接アドレス指定を見抜く

主記憶のデータを図のように参照するアドレス指定方式はどれか。
左に「命令部」「アドレス部」の枠(アドレス部の値は 20)。右に主記憶(アドレス列)。アドレス部の 20 から矢印で主記憶のアドレス 20 の番地を指す。アドレス 20 の番地の内容は 25 で,そこから矢印でアドレス 25 の番地を指す。アドレス 25 の番地の内容が「データ」。

ア 間接アドレス指定
イ 指標アドレス指定
ウ 相対アドレス指定
エ 直接アドレス指定

出典:平成28年度 秋期 基本情報技術者試験 午前 問9

解き方と答えを見る
  1. 命令のアドレス部の値は20。まず主記憶の20番地を見に行く(1回目)
  2. 20番地の中身は25。これはデータではなく、次に見に行く番地
  3. 25番地を見に行く(2回目)と、そこにデータがある
  4. アドレス部→番地の中身→その番地のデータ、と2回たどっている。この形が間接アドレス指定
  5. 1回で着く直接指定ではない。レジスタを足していないので、指標指定・相対指定でもない

答え:ア:間接アドレス指定

例題 2

インデックス修飾で実効アドレスを計算する

インデックス修飾によってオペランドを指定する場合,表に示す値のときの実効アドレスはどれか。
インデックスレジスタの値10
命令語のアドレス部の値100
命令が格納されているアドレス1000

ア 110
イ 1010
ウ 1100
エ 1110

出典:基本情報技術者試験 科目A免除 修了試験 20130728 実施分 問9

解き方と答えを見る
  1. インデックス修飾の式は、実効アドレス=アドレス部の値+インデックスレジスタの値
  2. 表から、アドレス部=100、インデックスレジスタ=10
  3. 100+10=110
  4. 命令が格納されているアドレス(1000)は相対アドレス指定で使う値。今回は足さない(足すと1010や1110になり、ひっかけの選択肢に当たる)

答え:ア:110

例題 3

LOAD GR,1,200 でロードされる値

“LOAD GR,B,AD”は,AD が示す番地にベースレジスタ B の内容を加えた値を有効アドレスとして,その有効アドレスが示す主記憶に格納されているデータを汎用レジスタ GR にロードする命令である。 図の状態で,次の命令を実行したとき,汎用レジスタ GR にロードされるデータはどれか。 LOAD GR, 1, 200
ベースレジスタ1: 100 主記憶(番地: 内容) 100: 1100 101: 1101 ⋮ 200: 1200 201: 1201 ⋮ 300: 1300 301: 1301 ⋮ 1200: 2200 1201: 2201 ⋮ 1300: 2300 1301: 2301

ア 1201
イ 1300
ウ 2200
エ 2300

出典:平成23年度 特別試験 基本情報技術者試験 午前 問10

解き方と答えを見る
  1. 命令の意味:有効アドレス=AD+ベースレジスタBの中身。その番地の中身をGRに入れる
  2. AD=200。ベースレジスタ1の中身=100
  3. 有効アドレス=200+100=300
  4. 主記憶の表で300番地を見ると、中身は1300
  5. 1300をGRにロードする。300(番地そのもの)や、1300番地の中身の2300(もう一度たどった値)は誤り

答え:イ:1300

例題 4

ABCD1234 をリトルエンディアンで並べる

16 進数 ABCD1234 をリトルエンディアンで 4 バイトのメモリに配置したものはどれか。ここで,0~+3 はバイトアドレスのオフセット値である。
各選択肢は 4 バイトのメモリ配置図(オフセット 0,+1,+2,+3 の順に並ぶ 4 マス)。

ア [図] オフセット 0, +1, +2, +3 = 12, 34, AB, CD
イ [図] オフセット 0, +1, +2, +3 = 34, 12, CD, AB
ウ [図] オフセット 0, +1, +2, +3 = 43, 21, DC, BA
エ [図] オフセット 0, +1, +2, +3 = AB, CD, 12, 34

出典:基本情報技術者試験 科目A免除 修了試験 20221211 実施分 問20

解き方と答えを見る
  1. 16進数を2桁ずつ(1バイトずつ)区切る:AB|CD|12|34
  2. 上位のバイトから順に、AB→CD→12→34。いちばん下位は34
  3. リトルエンディアンは下位のバイトをオフセット0に置く:0=34、+1=12、+2=CD、+3=AB
  4. バイトの中の2桁は逆にしない(43や21にはしない)

答え:イ:34, 12, CD, AB

例題 5

1Mバイトに必要なアドレスバスの本数

1M バイトのメモリを図のように MPU に接続するとき,最低限必要なアドレスバスの信号線の本数 n はどれか。ここで,メモリにはバイト単位でアクセスするものとし,1M バイトは 1,024k バイト,1k バイトは 1,024 バイトとする。
左に MPU,右にメモリのブロック。MPU 側にアドレスバス(複数の信号線)とデータバス(太線)。メモリ側のアドレス端子は上から An-1,An-2,An-3,…(省略記号)…,A2,A1,A0,データ端子は D0~D7。アドレスバスの各信号線が An-1~A0 に接続される。

ア 18
イ 19
ウ 20
エ 21

出典:平成28年度 秋期 基本情報技術者試験 午前 問11

解き方と答えを見る
  1. バイト単位でアクセスするので、区別する番地の数=バイト数
  2. 1Mバイト=1,024Kバイト=1,024×1,024バイト
  3. 1,024=2の10乗なので、2の10乗×2の10乗=2の20乗バイト
  4. n本で2のn乗個の番地を区別できる。2のn乗=2の20乗なので n=20
  5. データバスの8本(D0〜D7)は計算に使わない

答え:ウ:20

要点(試験直前に読む)

  • 命令は記憶装置から取り出し、制御装置が解釈する。CPU=制御装置+演算装置
  • プログラム内蔵(格納・記憶)方式=主記憶のプログラムをCPUが順に読んで実行する。DMAと仮想記憶は別物
  • PC=次の命令の番地。命令レジスタ=取り出した命令。命令デコーダ=解読(どちらも制御側)
  • 命令の流れは、フェッチ→解読→実効アドレス計算→オペランド読出し→実行
  • 足す相手で方式が決まる:インデックス=指標、ベース=基底、PC=相対。2回たどるのは間接
  • アドレスバスはn本で2のn乗個の番地。1M=2の20乗なので20本。リトルエンディアンは下位バイトが先頭

ひっかけ

  • 命令を解釈するのは演算装置、という選択肢 → 解釈するのは制御装置
  • PCの役割として、命令を保持する/演算結果の状態を保持する、という説明が並ぶ → PCが持つのは次の命令の番地
  • インデックス修飾の問題に、命令が格納されているアドレスがわざと書いてある → それは相対アドレス指定用の値なので足さない
  • ベースレジスタの問題で、実効アドレス(番地)そのものや、もう一度たどった値を選ばせる → 足すのは1回、その番地の中身を1回読むだけ
  • エンディアンで、1文字ずつ逆にした並びを置いている → 逆にするのは2桁(1バイト)単位

用語(19)

5大装置 ごだいそうち
コンピュータを構成する入力・記憶・演算・制御・出力の5つの装置。
⚠ CPUは制御装置と演算装置をまとめた呼び名で、記憶装置は含まない。
制御装置 せいぎょそうち
記憶装置から命令を取り出して解釈し、ほかの装置に指示を出す装置。
⚠ 演算装置は計算をするだけで、命令の解釈はしない。
演算装置 えんざんそうち
計算や比較をする装置で、中心になる回路はALU。
⚠ 命令を解釈するのは制御装置。
プログラム内蔵方式 ぷろぐらむないぞうほうしき(ノイマン型)
プログラムを主記憶に入れておき、CPUが順に読み出して実行する方式。格納方式・記憶方式とも呼ぶ。
⚠ 仮想記憶方式(主記憶を大きく見せる)、DMA(CPUを通さないデータ転送)とは別物。
プログラムカウンタ Program Counter(PC)・プログラムレジスタ・命令アドレスレジスタ
次に実行する命令が入っている番地を保持するレジスタ。
⚠ 命令そのものを保持するのは命令レジスタ。PCが持つのは番地。
命令レジスタ めいれいレジスタ(Instruction Register)
主記憶から取り出した命令を、解読のあいだ保持しておくレジスタ。
⚠ プログラムカウンタは次の命令の番地を持つ。
命令デコーダ めいれいデコーダ
命令レジスタにある命令を解読する、制御装置の回路。
⚠ ALUは演算側の回路で、制御機構ではない。
ALU Arithmetic Logic Unit(算術論理演算装置)
足し算や論理演算などを実際に行う、演算装置の中心の回路。
⚠ 制御機構の部品(命令デコーダなど)と分類を取り違えない。
アキュムレータ accumulator(累算器)
計算の途中結果や計算結果を一時的に置くレジスタ。
⚠ 命令を置くのは命令レジスタ、番地を置くのはプログラムカウンタ。
フラグレジスタ ふらぐレジスタ
計算結果がゼロか、マイナスかといった状態を保持し、条件分岐で使うレジスタ。
⚠ 次の命令の番地を持つのはプログラムカウンタ。
オペランド operand
命令の対象になるデータや、その番地・レジスタを指定する部分。
⚠ オペランドが無い命令もあり、個数は主記憶の番地の数と一致するとは限らない。
実効アドレス じっこうアドレス(有効アドレス)
アドレス指定方式に従って計算した、データが実際にある主記憶の番地。
⚠ 問われるのが番地なのか、その番地の中身(データ)なのかを必ず確認する。
直接アドレス指定 ちょくせつアドレスしてい
アドレス部の値をそのまま実効アドレスとする方式。
⚠ 間接アドレス指定は、その番地の中身をもう一度番地として使う。
間接アドレス指定 かんせつアドレスしてい
アドレス部が指す番地の中身を実効アドレスとして、もう一度たどる方式。
⚠ 直接アドレス指定は1回で着く。図の矢印が2回跳ぶのが間接。
指標アドレス指定 しひょうアドレスしてい(インデックス修飾)
アドレス部の値に指標(インデックス)レジスタの値を足して実効アドレスとする方式。
⚠ プログラムカウンタを足すのは相対、ベースレジスタを足すのは基底。
相対アドレス指定 そうたいアドレスしてい
アドレス部の値にプログラムカウンタ(命令アドレスレジスタ)の値を足して実効アドレスとする方式。
⚠ 指標アドレス指定はインデックスレジスタを足す。
基底アドレス指定 きていアドレスしてい(ベースレジスタ方式)
アドレス部の値にベースレジスタの値を足して実効アドレスとする方式。
⚠ 足した番地の中身が答え。番地そのものや、さらにたどった値と取り違えない。
リトルエンディアン little endian
複数バイトのデータを、下位のバイトから小さい番地に並べる方式。
⚠ ビッグエンディアンは上位のバイトから並べる(書いた順のまま)。逆にするのはバイト単位で、桁単位ではない。
アドレスバス address bus
CPUが主記憶の番地を指定するための信号線の束。n本で2のn乗個の番地を区別できる。
⚠ データバスはデータを運ぶ線。データバスの本数は、アドレスバスの本数の計算に使わない。

このレッスンの過去問

このレッスンで稽古する