[勝手に基本情報解説 その1]レジスタとは??
ハロー皆さま。
ご無沙汰しております。
唐突に始まりました新シリーズ「勝手に基本情報解説」。
これは、現在基本情報技術者試験を勉強しているわたくしが、どうしても理解できない、頭に入らない部分を、アウトプット目的で勝手につらつら解説していくシリーズだ。
※このシリーズはQiitaに移行しました。その1とその2はnoteに残しておきますが、その3以降はQiitaに投稿します。(そもそも見る人がいるのか分からないが)
Qiita→https://qiita.com/CreepyCrab
記念すべき第1回目は「レジスタ」について解説していきたい。
レジスタとは?
レジスタとは一言で言ってしまえば、「CPUの中の記憶しておくところ」である。さらに言うなら「CPUの中の命令を記憶しておくところ」だ。
いや、ざっくりしすぎて我ながら何を言っているのか全く分からないが。
まずCPUとは何なのかを確認していきたい。
CPUは「コンピューターの中の命令を出す装置」だ。CPUは「メモリ」というものと結びつき、そこへ命令を出してプログラムを実行している。
いまこうしてブラウザを開いて記事を書いているのも、全てはCPUが命令を出しているからだ(たぶん)。
しかしながら、コンピューター上で出される命令というのは複雑なもので、たとえば単にパソコンに保存されている写真を見るだけでも「エクスプローラ開いて。その中のピクチャ開いて。その中のエロ画像フォルダ開いて。その中の(以下自粛)」というように、いくつもの命令がまとめてできている。
じゃあ、その命令はどこから出てくるのか?また命令はどこで記憶しておくのか?それを覚えておいたり、取り出したりするのがレジスタというわけだ。
※ただし、細かく言えば命令以外にも記憶しているものがあるようなので、レジスタ=命令を記憶するところではなく、レジスタ=CPUの記憶装置と覚える方がよいと思う。
さて、レジスタの役割がCPUの命令に関係するというところまで分かったところで一つ疑問が湧いてくる。
レジスタはどんな手順で、どのように命令を取り出しているのか。また、どんな種類があるのか。
これこそ、基本情報の問題でよく問われるところだ。
はじめに、CPUの構成を確認しておく。
作るのめっちゃ時間かかった割に結構雑な図になった・・・
とりあえず、こんな感じになってるんだなーぐらいで書いた。ホントはもっといろいろあります。
まず、命令がどのような手順で動いているのかを確認しておく。
①命令を取り出す(フェッチ)
②命令を解読する
③(命令の)対象データを読み出す
④命令を実行する
なんかイメージ画像を貼り付けていたらだんだん違う方向に行った気がするが、流れとしてはこうだ。
ちなみに、この順番を問う問題は過去何度も出題されているらしい。
さて、おおまかな流れを確認したところで、それぞれの手順を詳しく見ていきたい。
本当は図を使いたいが、面倒なので字で説明する。図で学びたい人は参考書なりgoogle先生に聞くなりしてくれ。
①命令の取り出し(フェッチ)
命令の取り出しは「プログラムカウンタ」と「命令レジスタ」を使う。
プログラムカウンタ=実際に取り出す命令を知っているやつ。中に番号が書いてあり、その番号のメモリを取り出す。
命令レジスタ=取り出した命令を格納するやつ。次の手順でも登場。
ちなみに、「フェッチ」というキーワードは問題中よく出てくるので、命令の取り出し=フェッチというのは覚えておくと良いかもしれない。
手順は以下の通り。
1)、プログラムカウンタに書いてある命令を取り出します。
2)、命令レジスタに格納します。
3)、次の命令に備え、プログラムカウンタの値を+1する。
おわり。
意外と単純だった。
②命令の解読
この手順では「命令デコーダ」とさっき使った「命令レジスタ」を使う。
先ほどは軽く流したが、命令レジスタはこんなつくりになっている
命令部・・・「この命令は加算の命令ですよ」「これはファイル参照の命令ですよ」など、命令の種類がかいてあるところ。ここを命令デコーダ(後述)に見せ、処理を行う。
オペランド部・・・処理の対象となるデータがある場所が書いてある。オペランドとは「オペレート(操作)する対象」という意味らしい。
では、さっきから出ている「命令デコーダ」とは何なのか。
命令デコーダは、命令部で受け取った命令の種類を解読し、必要な装置に出番を知らせる者と考えればよいだろう。
ここで、命令の解読の手順を改めて確認しておく。
1)、命令部の中身がデコーダへ送られる。
2)、命令デコーダが命令部を解読する
3)、命令デコーダが命令実行に必要な装置によびかける。
手順だけ書くとかなりあっけない。
③(命令の)対象データを呼び出す
先ほど、命令レジスタで命令部が命令デコーダに送られるのはわかった。
が、オペランド部は放置されっぱなしだ。
ここでは、この「オペランド部が対象データを読み出し、記憶させる」という手順になる。
じゃあ具体的にどう読みだして記憶するか。。。の方法は様々種類があり、どの参考書でも別項に分けられている。命令の対象データの読み出しは、命令レジスタの役割や仕組みと一旦別で考えた方がよいだろう。
ここでは例として、汎用レジスタに格納する手順を挙げておく。
※汎用レジスタ→その名のとおり、決まった機能がないレジスタ。
1)、オペランド部に記述されたメモリの対象データを指定する。
2)、指定されたメモリの中のデータを汎用レジスタに格納する。
④命令実行
あとは実行するだけである。
ただし、ここも命令によって違うため、一概にこの方法!とは言えない。
ここでは例として、③の続きで、汎用レジスタの中身を演算するやり方を書いておく。
1)、汎用レジスタに格納されたデータをALU(演算装置の計算機)で演算する。
2)、その結果を書き戻す(上書きするわけではない?)。
以上だ。
④が終わると、①に戻って再び次の命令が開始される。
以上が、レジスタについてだ。
ほぼ参考書の書き写しというか、殴り書きという感じだったので、分かりにくさ満点だったと思う。
が、なんとなく自分の中では整理できたし見る側も少しわかりやすくなるように一応意識はしたつもりだ。
試験まで1カ月もないという行き詰まった状況の中、まだまだ意味不明なところばっかなので、このシリーズは続いていくと思われる。
この記事が気に入ったらサポートをしてみませんか?