プログラムはなぜ動くのか
①プログラマにとってCPUとはなにか
プログラムって何? コンピュータに実行させる処理の順番を示すもの。 運動会やコンサートのプログラムのように、「何かを行う順番を示すもの」という意味。
プログラムの中には、何が含まれている? プログラムは、命令とデータの集合体になっています。 例えば、C言語のprintf(”こんにちは”);というプログラムは、printfが命令であり、”こんにちは”がデータです。
マシン語って何? CPUが直接解釈できる言語。 C言語やJAVAなどで記述されたプログラムは,最終的にマシン語に変換されます。
実行時のプログラムはどこにある? メモリー(メインメモリー)にコピーされてから実行されます。
メモリーのアドレスとは、何ですか? メモリー上で命令やデータが格納されている場所を示す値。 番地とも呼びます。 アドレス メモリーの内容 0100 0101 0102 0103 0104 アドレス 0105 0106 メモリーの内容 命令:0105番地の値をアキュムレータに格納せよ 命令:0106番地の値を汎用レジスタに格納せよ 命令:アキュムレータの値に汎用レジスタの値を加算せよ。 命令:アキュムレータの値をディスプレイに表示せよ 命令:プログラムを終了せよ。(OSに戻れ) データ:123 データ:456
コンピュータの構成要素の中で、プログラムを解釈・実行する装置は何ですか。 CPU。(CENTRAL PROCESSING UNIT) 中央処理装置のこと。 プログラムの命令にしたがって、データの演算やコンピュータ全体の制御を行う装置をCPUと呼びます。 多くのトランジスタから構成されたICという電子部品からなる。
プログラム実行のイメージ プログラムをコンパイルしてマシン語のEXEファイルに変換する。 CPUが、プログラムの内容を解釈、実行する。 プログラマが、C言語などの高水準言語でプログラムを記述 プログラムをコンパイルしてマシン語のEXEファイルに変換する。 プログラムの起動時に、EXEファイルのコピーがメモリー上に作成される。 CPUが、プログラムの内容を解釈、実行する。 #include<stdio.h> int main() { int data[100]; 0110010001110010110010 0110010110001100101100
CPUを構成する4つの機能要素 制御装置 演算装置 クロック レジスタ1 レジスタ2 レジスタn ・
コンピュータの5大装置 制御装置 演算装置 入力・記憶・演算・出力の各装置が効率よく動作するようにコントロールする装置。 制御装置 入力・記憶・演算・出力の各装置が効率よく動作するようにコントロールする装置。 演算装置 記憶したデータをもとに命令に従って四則演算や比較判断を行う装置。 全商 3級
レジスタってなに? 処理対象となる命令やデータを格納する領域で一種のメモリーのようなもの。 1つのCPUの内部には種類によって異なるが20~100個ほどのレジスタがある。 プログラムはレジスタを対象として記述される。 16ビットPCや32ビットPCという時の「○○ビット」とは、レジスタの桁数のことを表す。
主なレジスタの種類とその役割 レジスタの種類 役割 アキュムレータ 演算を行うデータ及び演算後のデータを格納する。 フラグ・レジスタ 演算処理後のCPUの状態を格納する。 プログラム・カウンタ 次に実行する命令が格納されたメモリーのアドレスを格納する。 ベースレジスタ データ用のメモリー領域の先頭アドレスを格納する。 インデックスレジスタ ベースレジスタからの相対アドレスをかくのうする。 汎用レジスタ 任意のデータを格納する。 命令レジスタ 命令そのものを格納する。CPUが内部的に利用する。 スタック・レジスタ スタック領域の先頭アドレスを格納する。
プログラムの流れを決める プログラムカウンタ アドレス メモリーの内容 0100 0100 命令:0105番地の値をアキュムレータに格納せよ プログラムの流れ 0101 0101 命令:0106番地の値を汎用レジスタに格納せよ 0102 0102 命令:アキュムレータの値に汎用レジスタの値を加算せよ。 0103 0103 命令:アキュムレータの値をディスプレイに表示せよ 0104 0104 命令:プログラムを終了せよ。(OSに戻れ) 0105 データ:123 0106 データ:456 *実際には、1つの命令やデータが複数のアドレスにまたがって格納されている。
基本制御構造 順次構造 選択構造 繰り返し構造 順番に実行される処理を表現する構造 処理の流れは、順次、選択、繰り返しの3つの構造で表現できる。 順番に実行される処理を表現する構造 順次構造 状態によって処理を選択する構造 選択構造 何を、どのような条件の間繰り返すかを表現する構造 繰り返し構造
順次構造 処理1 処理2 処理3
選択構造 条件 偽 処理2 真 処理1
繰り返し構造 繰り返し条件 処理 偽 真
選択、繰り返しのしくみは? プログラムの中に条件分岐や繰り返しがある場合は、それらのマシン語命令が、プログラムカウンタの値を任意のアドレスに(+1でない値に)設定することになる。
CPUにできることは、いたって単純 種類 機能 データ転送命令 レジスタとメモリー、メモリーとメモリー、レジスタと周辺装置の間でデータを読み書きする。 演算命令 アキュムレータで算術演算、論理演算、比較演算、シフト演算を行う。 ジャンプ命令 条件分岐、繰り返し、無条件のジャンプを行う。 コール/リターン命令 関数を呼び出す/呼び出し元に戻る
②データを2進数でイメージしよう
32ビットは、何バイトですか? 8ビット=1バイトなので、32ビットは 32÷8=4バイトになります。
01011100 (01011100)2=4+8+16+64 =92 01011100という2進数は、10進数でいくつになりますか 2 2進数の各桁に重みに掛けた結果を足すことで10進数に変換できる。 01011100 2 0 1 3 4 5 6 7 (01011100)2=4+8+16+64 =92
00001111という2進数を、2桁左シフトすると、元の数を何倍したことになりますか。 2進数を1桁左シフトすると、元の値が2倍されます。2桁左シフトすると、4倍されます。 (00001111)2=1510 2倍 4倍 (00011110)2=3010 (00111100)2=6010
なぜコンピュータが情報を2進数で扱うのか? コンピュータ内部がICで構成されている。 ICには数本から数百本のピンがある。 ピンは直流電圧0Vか+5Vのどちらかの状態になっている。 つまり、ICのピン1本では、2つの状態しか表せない。
32ビットは、何バイトですか? 8ビット=1バイトなので、32ビットは 32÷8=4バイトになります。