プログラムはなぜ動くのか

Preview:

DESCRIPTION

プログラムはなぜ動くのか. ①プログラマにとってCPUとはなにか. プログラムって何?. コンピュータに実行させる処理の順番を示すもの。 運動会やコンサートのプログラムのように、「何かを行う順番を示すもの」という意味。. プログラムの中には、何が含まれている?. プログラムは、 命令とデータ の集合体になっています。 例えば、C言語のpri n tf( ” こんにちは ” );というプログラムは、pri n tfが命令であり、 ” こんにちは ” がデータです。. マシン語って何?. CPUが直接解釈できる言語。 - PowerPoint PPT Presentation

Citation preview

プログラムはなぜ動くのか

①プログラマにとってCPUとはなにか

プログラムって何?

• コンピュータに実行させる処理の順番を示すもの。

• 運動会やコンサートのプログラムのように、「何かを行う順番を示すもの」という意味。

プログラムの中には、何が含まれている?

• プログラムは、命令とデータの集合体になっています。

• 例えば、C言語のpri ntf(”こんにちは”);というプログラムは、pri ntfが命令であり、”こんにちは”がデータです。

マシン語って何?

• CPUが直接解釈できる言語。• C言語やJAVAなどで記述されたプログラムは,最終的にマシン語に変換されます。

実行時のプログラムはどこにある?

• メモリー(メインメモリー)にコピーされてから実行されます。

メモリーのアドレスとは、何ですか?

• メモリー上で命令やデータが格納されている場所を示す値。

• 番地とも呼びます。

0100

0101

0102

0103

0104

アドレス

0105

0106

メモリーの内容命令:0105番地の値をアキュムレータに格納せよ

命令:0106番地の値を汎用レジスタに格納せよ

命令:アキュムレータの値に汎用レジスタの値を加算せよ。

命令:アキュムレータの値をディスプレイに表示せよ

命令:プログラムを終了せよ。(OSに戻れ)

データ:123

データ:456

コンピュータの構成要素の中で、プログラムを解釈・実行する装置は何

ですか。• CPU。(CENTRAL PROCESSING UNIT)

• 中央処理装置のこと。• プログラムの命令にしたがって、データの演算やコンピュータ全体の制御を行う装置をCPUと呼びます。

• 多くのトランジスタから構成されたICという電子部品からなる。

プログラム実行のイメージ

#include<stdio.h>int main() {      int data[100];

01100100011100101100100110010110001100101100

CPUを構成する4つの機能要素

制御装置

演算装置

クロック

レジスタ1

レジスタ2

レジスタn

・・・

• 制御装置  

全商 3級

コンピュータの5大装置

入力・記憶・演算・出力の各装置が効率よく動作するようにコントロールする装置。

• 演算装置  記憶したデータをもとに命令に従って四則演算や比較判断を行う装置。

レジスタってなに?

• 処理対象となる命令やデータを格納する領域で一種のメモリーのようなもの。

• 1つのCPUの内部には種類によって異なるが20~100個ほどのレジスタがある。

• プログラムはレジスタを対象として記述される。

• 16ビットPCや 32ビットPCという時の「○○ビット」とは、レジスタの桁数のことを表す。

主なレジスタの種類とその役割レジスタの種類 役割

アキュムレータ 演算を行うデータ及び演算後のデータを格納する。

フラグ・レジスタ 演算処理後のCPUの状態を格納する。

プログラム・カウンタ

次に実行する命令が格納されたメモリーのアドレスを格納する。

ベースレジスタ データ用のメモリー領域の先頭アドレスを格納する。

インデックスレジスタ

ベースレジスタからの相対アドレスをかくのうする。

汎用レジスタ 任意のデータを格納する。

命令レジスタ 命令そのものを格納する。CPUが内部的に利用する。

スタック・レジスタ

スタック領域の先頭アドレスを格納する。

プログラムの流れを決めるプログラムカウンタ

0100

0101

0102

0103

0104

プログラムカウンタ

プログラムの流

れ0100

0101

0102

0103

0104

アドレス

0105

0106

メモリーの内容命令:0105番地の値をアキュムレータに格納せよ

命令:0106番地の値を汎用レジスタに格納せよ

命令:アキュムレータの値に汎用レジスタの値を加算せよ。

命令:アキュムレータの値をディスプレイに表示せよ

命令:プログラムを終了せよ。(OSに戻れ)

データ:123

データ:456

*実際には、1つの命令やデータが複数のアドレスにまたがって格納されている。

基本制御構造処理の流れは、順次、選択、繰り返しの3つの構造で表現できる。

順次構造

処理1

処理2

処理3

選択構造

条件

処理1 処理2真

繰り返し構造

繰り返し条件

処理真

選択、繰り返しのしくみは?

•プログラムの中に条件分岐や繰り返しがある場合は、それらのマシン語命令が、プログラムカウンタの値を任意のアドレスに(+1でない値に)設定することになる。

CPUにできることは、いたって単純

種類 機能データ転送命令 レジスタとメモリー、メモ

リーとメモリー、レジスタと周辺装置の間でデータを読み書きする。

演算命令 アキュムレータで算術演算、論理演算、比較演算、シフト演算を行う。

ジャンプ命令 条件分岐、繰り返し、無条件のジャンプを行う。

コール/リターン命令

関数を呼び出す/呼び出し元に戻る

②データを2進数でイメージしよう

32ビットは、何バイトですか?

• 8ビット=1バイトなので、32ビットは 32 ÷8=4バイトになります。

01011100という2進数は、10進数でいくつになりますか• 2進数の各桁に重みに掛けた結果を足すことで10進数に変換できる。

  20

21

22

23

24

25

26

2701011100(01011100)2=

4+8+16+64

=92

00001111という2進数を、2桁左シフトすると、元の数を何倍したことになりますか。• 2進数を1桁左シフトすると、元の値が2倍されます。2桁左シフトすると、4倍されます。

(00011110)2=3010

(00001111)2=1510

(00111100)2=6010

2倍

4倍

なぜコンピュータが情報を2進数で扱うのか?

32ビットは、何バイトですか?

• 8ビット=1バイトなので、32ビットは 32 ÷8=4バイトになります。

Recommended