コンピュータの基本構成と命令の実行
コンピュータの5大装置と、命令が「取り出し→解読→実行」される流れを説明できるようになる。あわせて、実効アドレス(データが実際にある番地)の計算、リトルエンディアンの並べ方、アドレスバスの本数を、過去問で自力で解けるようになる。
CPUの中で命令がどう処理されるかは、科目Aのコンピュータ構成要素の土台です。特にアドレス指定方式とベースレジスタの計算は、毎回のように形を変えて出ます。仕組みを1回理解すれば、用語問題も計算問題もほぼ同じ考え方で解けます。
このレッスンで稽古する(用語チェック・過去問)コンピュータは5つの装置でできている
結論:命令は「記憶装置」から取り出され、「制御装置」が解釈します。 コンピュータは入力・記憶・演算・制御・出力の5つの装置(5大装置)でできています。このうち制御装置と演算装置をまとめたものがCPU(中央処理装置。プロセッサとも呼ぶ)です。
厨房にたとえると、記憶装置はレシピ本と食材の棚、制御装置はレシピを読んで指示を出す料理長、演算装置は実際に包丁を握る調理担当です。料理長(制御)はレシピ(命令)を棚(記憶)から取ってきて読みますが、自分では切りません。
| 装置 | 役割 | 例 |
|---|---|---|
| 入力装置 | データやプログラムを外から取り込む | キーボード、マウス |
| 記憶装置 | プログラム(命令)とデータを置いておく | 主記憶(メモリ) |
| 制御装置 | 命令を取り出して解釈し、ほかの装置に指示を出す | CPU内の制御部 |
| 演算装置 | 計算や比較をする | CPU内のALU |
| 出力装置 | 結果を外に出す | ディスプレイ、プリンタ |
基本構成図の読み方:図ではデータの流れを実線、制御の流れを破線で描きます。全部の装置に破線を伸ばしているのが制御装置です。入力→記憶→出力と実線で並ぶ真ん中が記憶装置、記憶装置と実線で行き来するもう1つが演算装置です。
試験での問われ方:「命令を解釈するのは演算装置」「命令は入力装置から直接取り出す」という選択肢がひっかけです。取出し=記憶、解釈=制御の組み合わせで覚えてください。
プログラム内蔵方式(ノイマン型)
結論:プログラムを先に主記憶に入れておき、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
- **プログラムカウンタ(PC)**が持っている「次の命令の番地」を使って、主記憶から命令を取り出す
- 取り出した命令を命令レジスタに入れ、命令デコーダが意味を解読する
- データが置かれている番地(実効アドレス)を計算する
- その番地からデータ(オペランド)を読み出し、ALUで計算する
解読(②)とオペランド読出し(④)の間にあるのは実効アドレス計算です。この順番はそのまま問題になります。
| レジスタ・部品 | 持っているもの・役割 | 分類 |
|---|---|---|
| プログラムカウンタ(プログラムレジスタ・命令アドレスレジスタ) | 次に実行する命令の番地 | 制御 |
| 命令レジスタ | 主記憶から取り出した命令そのもの | 制御 |
| 命令デコーダ | 命令レジスタの命令を解読する回路 | 制御 |
| ALU | 計算や比較をする回路 | 演算 |
| アキュムレータ | 計算の途中結果や計算結果 | 演算 |
| フラグレジスタ | 計算結果の状態(0か、マイナスか など)。条件分岐で使う | 演算 |
| メモリアドレスレジスタ | 主記憶にアクセスする番地 | 記憶側 |
試験での問われ方:PCの役割を聞く問題では、命令レジスタ(命令を保持)、フラグレジスタ(演算結果の状態)、データ用レジスタ(データを保持)の説明が選択肢に並びます。PCが持つのは命令ではなく番地です。また、図で「主記憶→a→命令デコーダ」と並んでいれば、aは命令レジスタです。
命令語の形:命令部とアドレス部
結論:1つの命令は「何をするか(命令部)」と「何に対してするか(アドレス部=オペランド)」の組み合わせです。 オペランドとは、命令の対象になるデータや、その番地のことです。
押さえるのは次の2点だけです。
- オペランドがない命令もある(例:停止命令)
- 命令語の長さ(命令語長)は、1台のコンピュータの中でも命令によって違うことがある
ひっかけは「オペランドの個数=主記憶の番地の個数」「命令語長はすべて等しい」のように言い切っている選択肢です。オペランドにはレジスタを指定することもあるので、番地の数と一致するとは限りません。
アドレス指定方式(最頻出)
結論:命令のアドレス部の値に何を足すか、何回たどるかで、データがある番地(実効アドレス)が決まります。 アドレス指定方式は、その決め方のルールです。この分野でいちばん多く出題されています。
| 方式 | 実効アドレスの求め方 | 覚え方 |
|---|---|---|
| 即値 | アドレス部の値がデータそのもの | 番地を見に行かない |
| 直接アドレス指定 | アドレス部の値=実効アドレス | 1回で着く |
| 間接アドレス指定 | アドレス部が指す番地の中身が実効アドレス | 2回たどる |
| 指標(インデックス修飾) | アドレス部+指標(インデックス)レジスタ | 配列の何番目かをずらす |
| 基底(ベースレジスタ) | アドレス部+ベースレジスタ | プログラムの先頭位置を足す |
| 相対アドレス指定 | アドレス部+プログラムカウンタ(命令アドレスレジスタ) | 今いる場所からの距離 |
間接アドレス指定を住所でたとえると、「20番地に行け」と書いたメモがあり、20番地に着くと「25番地に行け」と書いてある、という二段の道案内です。データにたどり着くのは25番地です。
見分け方は足す相手で決まります:インデックスレジスタなら指標、ベースレジスタなら基底、プログラムカウンタ(命令のある場所)なら相対です。
試験での問われ方
- 図の矢印が主記憶の中で2回跳んでいたら間接アドレス指定。1回で終わる直接アドレス指定と迷わせる
- インデックス修飾の計算問題に命令が格納されているアドレスがわざと書いてある。これは相対アドレス指定で使う値なので、足さない
- 「オペランド+命令アドレスレジスタ」の説明に、指標アドレス指定を並べて迷わせる
ベースレジスタ方式の計算
結論:実効アドレス=AD(アドレス部)+ベースレジスタの中身。読み込まれるのは、その番地に入っている値です。 番地そのものを答えにしないことが一番大事です。
解き方は毎回同じです。
- ADとベースレジスタの中身を足して、実効アドレスを出す
- 主記憶の表で、その番地の中身を読む
- それが答え(もう一度たどらない)
試験での問われ方:選択肢には「足し忘れ(ADの番地の中身)」「足した番地の中身を、さらにもう一度たどった値」「ずれた番地の中身」が並びます。足すのは1回、たどるのも1回です。下の例題で手順を確認してください。
エンディアン:バイトを並べる順番
結論:リトルエンディアンは、下位のバイトを小さい番地から置きます。 複数バイトのデータをメモリに並べるときの順番をエンディアンと呼びます。
| 方式 | 小さい番地(オフセット0)に置くもの | ABCD1234 の並び(0,+1,+2,+3) |
|---|---|---|
| ビッグエンディアン | 上位バイト(書いた順のまま) | AB, CD, 12, 34 |
| リトルエンディアン | 下位バイト(バイト単位で逆順) | 34, 12, CD, AB |
試験での問われ方:逆にするのはバイト(16進数2桁)単位です。1文字ずつ逆にした「43, 21, DC, BA」は誤りです。書いた順のままの並びはビッグエンディアンです。
アドレスバスの本数
結論:信号線が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本)が描かれていますが、本数の計算には関係ありません。答えを決めるのは番地の数だけです。
図から間接アドレス指定を見抜く
ア 間接アドレス指定
イ 指標アドレス指定
ウ 相対アドレス指定
エ 直接アドレス指定
解き方と答えを見る
- 命令のアドレス部の値は20。まず主記憶の20番地を見に行く(1回目)
- 20番地の中身は25。これはデータではなく、次に見に行く番地
- 25番地を見に行く(2回目)と、そこにデータがある
- アドレス部→番地の中身→その番地のデータ、と2回たどっている。この形が間接アドレス指定
- 1回で着く直接指定ではない。レジスタを足していないので、指標指定・相対指定でもない
答え:ア:間接アドレス指定
インデックス修飾で実効アドレスを計算する
| インデックスレジスタの値 | 10 |
|---|---|
| 命令語のアドレス部の値 | 100 |
| 命令が格納されているアドレス | 1000 |
ア 110
イ 1010
ウ 1100
エ 1110
出典:基本情報技術者試験 科目A免除 修了試験 20130728 実施分 問9
解き方と答えを見る
- インデックス修飾の式は、実効アドレス=アドレス部の値+インデックスレジスタの値
- 表から、アドレス部=100、インデックスレジスタ=10
- 100+10=110
- 命令が格納されているアドレス(1000)は相対アドレス指定で使う値。今回は足さない(足すと1010や1110になり、ひっかけの選択肢に当たる)
答え:ア:110
LOAD GR,1,200 でロードされる値
ア 1201
イ 1300
ウ 2200
エ 2300
出典:平成23年度 特別試験 基本情報技術者試験 午前 問10
解き方と答えを見る
- 命令の意味:有効アドレス=AD+ベースレジスタBの中身。その番地の中身をGRに入れる
- AD=200。ベースレジスタ1の中身=100
- 有効アドレス=200+100=300
- 主記憶の表で300番地を見ると、中身は1300
- 1300をGRにロードする。300(番地そのもの)や、1300番地の中身の2300(もう一度たどった値)は誤り
答え:イ:1300
ABCD1234 をリトルエンディアンで並べる
ア [図] オフセット 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
解き方と答えを見る
- 16進数を2桁ずつ(1バイトずつ)区切る:AB|CD|12|34
- 上位のバイトから順に、AB→CD→12→34。いちばん下位は34
- リトルエンディアンは下位のバイトをオフセット0に置く:0=34、+1=12、+2=CD、+3=AB
- バイトの中の2桁は逆にしない(43や21にはしない)
答え:イ:34, 12, CD, AB
1Mバイトに必要なアドレスバスの本数
ア 18
イ 19
ウ 20
エ 21
解き方と答えを見る
- バイト単位でアクセスするので、区別する番地の数=バイト数
- 1Mバイト=1,024Kバイト=1,024×1,024バイト
- 1,024=2の10乗なので、2の10乗×2の10乗=2の20乗バイト
- n本で2のn乗個の番地を区別できる。2のn乗=2の20乗なので n=20
- データバスの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つの装置。
⚠ CPUは制御装置と演算装置をまとめた呼び名で、記憶装置は含まない。
記憶装置から命令を取り出して解釈し、ほかの装置に指示を出す装置。
⚠ 演算装置は計算をするだけで、命令の解釈はしない。
計算や比較をする装置で、中心になる回路はALU。
⚠ 命令を解釈するのは制御装置。
プログラムを主記憶に入れておき、CPUが順に読み出して実行する方式。格納方式・記憶方式とも呼ぶ。
⚠ 仮想記憶方式(主記憶を大きく見せる)、DMA(CPUを通さないデータ転送)とは別物。
次に実行する命令が入っている番地を保持するレジスタ。
⚠ 命令そのものを保持するのは命令レジスタ。PCが持つのは番地。
主記憶から取り出した命令を、解読のあいだ保持しておくレジスタ。
⚠ プログラムカウンタは次の命令の番地を持つ。
命令レジスタにある命令を解読する、制御装置の回路。
⚠ ALUは演算側の回路で、制御機構ではない。
足し算や論理演算などを実際に行う、演算装置の中心の回路。
⚠ 制御機構の部品(命令デコーダなど)と分類を取り違えない。
計算の途中結果や計算結果を一時的に置くレジスタ。
⚠ 命令を置くのは命令レジスタ、番地を置くのはプログラムカウンタ。
計算結果がゼロか、マイナスかといった状態を保持し、条件分岐で使うレジスタ。
⚠ 次の命令の番地を持つのはプログラムカウンタ。
命令の対象になるデータや、その番地・レジスタを指定する部分。
⚠ オペランドが無い命令もあり、個数は主記憶の番地の数と一致するとは限らない。
アドレス指定方式に従って計算した、データが実際にある主記憶の番地。
⚠ 問われるのが番地なのか、その番地の中身(データ)なのかを必ず確認する。
アドレス部の値をそのまま実効アドレスとする方式。
⚠ 間接アドレス指定は、その番地の中身をもう一度番地として使う。
アドレス部が指す番地の中身を実効アドレスとして、もう一度たどる方式。
⚠ 直接アドレス指定は1回で着く。図の矢印が2回跳ぶのが間接。
アドレス部の値に指標(インデックス)レジスタの値を足して実効アドレスとする方式。
⚠ プログラムカウンタを足すのは相対、ベースレジスタを足すのは基底。
アドレス部の値にプログラムカウンタ(命令アドレスレジスタ)の値を足して実効アドレスとする方式。
⚠ 指標アドレス指定はインデックスレジスタを足す。
アドレス部の値にベースレジスタの値を足して実効アドレスとする方式。
⚠ 足した番地の中身が答え。番地そのものや、さらにたどった値と取り違えない。
複数バイトのデータを、下位のバイトから小さい番地に並べる方式。
⚠ ビッグエンディアンは上位のバイトから並べる(書いた順のまま)。逆にするのはバイト単位で、桁単位ではない。
CPUが主記憶の番地を指定するための信号線の束。n本で2のn乗個の番地を区別できる。
⚠ データバスはデータを運ぶ線。データバスの本数は、アドレスバスの本数の計算に使わない。
このレッスンの過去問
- コンピュータの5大装置と命令の流れ基本情報技術者試験 科目A免除 修了試験 20220123 実施分 問12
- プログラム内蔵方式(ノイマン型)の定義平成26年度 春期 基本情報技術者試験 午前 問9
- プログラムカウンタの役割平成23年度 秋期 基本情報技術者試験 午前 問10
- 命令フェッチ後に命令を保持するレジスタ(命令レジスタ)平成30年度 春期 基本情報技術者試験 午前 問9
- 命令語の構成(オペランド有無・命令語長)基本情報技術者試験 科目A免除 修了試験 201101 実施分 問12
- アドレス指定方式の分類(直接・間接・指標・相対)平成28年度 秋期 基本情報技術者試験 午前 問9
- ベースレジスタ方式の実効アドレス計算平成23年度 特別試験 基本情報技術者試験 午前 問10
- リトルエンディアンのバイト配置基本情報技術者試験 科目A免除 修了試験 20221211 実施分 問20
- アドレスバス信号線本数の計算(容量のlog2)平成28年度 秋期 基本情報技術者試験 午前 問11