26
ププププププププププププ

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

  • Upload
    tanek

  • View
    44

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

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

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

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

プログラムって何?

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

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

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

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

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

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

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

マシン語って何?

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

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

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

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

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

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

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

• 番地とも呼びます。

0100

0101

0102

0103

0104

アドレス

0105

0106

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

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

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

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

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

データ:123

データ:456

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

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

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

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

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

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

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

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

01100100011100101100100110010110001100101100

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

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

制御装置

演算装置

クロック

レジスタ1

レジスタ2

レジスタn

・・・

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

• 制御装置  

全商 3級

コンピュータの5大装置

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

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

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

レジスタってなに?

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

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

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

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

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

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

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

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

プログラム・カウンタ

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

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

インデックスレジスタ

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

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

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

スタック・レジスタ

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

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

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

0100

0101

0102

0103

0104

プログラムカウンタ

プログラムの流

れ0100

0101

0102

0103

0104

アドレス

0105

0106

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

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

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

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

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

データ:123

データ:456

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

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

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

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

順次構造

処理1

処理2

処理3

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

選択構造

条件

処理1 処理2真

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

繰り返し構造

繰り返し条件

処理真

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

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

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

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

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

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

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

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

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

コール/リターン命令

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

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

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

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

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

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

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

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

  20

21

22

23

24

25

26

2701011100(01011100)2=

4+8+16+64

=92

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

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

(00011110)2=3010

(00001111)2=1510

(00111100)2=6010

2倍

4倍

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

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

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

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

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