情報技術 今回の目標

2015/5/28
情報技術
~ソフトウェアの動作~
2015年5月28日
笠井俊信
今回の目標
ハードウェアを動かすために必要なソフトウェ
アについて,その役割,種類,動作などを学び,
コンピュータの仕組みと性質を理解する.
1
2015/5/28
コンピュータの基本構成
中央処理装置
制御装置
演算装置
レジスタ群
入力装置
主記憶装置
出力装置
補助記憶装置
コンピュータの構成
CPU
CPU内部データバス
演算レジスタ
(アキュムレータ)
命令レジスタ
A
命令デコーダ
データ
バス制御
アドレス
バス制御
主記憶装置 入出力装置
レジスタ群
制御ロジック
ALU
内部制御
信号
システム
制御信号
2
2015/5/28
コンピュータの命令の実行
中央処理装置(CPU)
プログラムカウンタ(PC)
(1)命令アドレス
の指定
アドレス
(2)命令フェッチ
命令レジスタ(IR)
主記憶
0
命令
1
命令
2
命令
3
命令
4
(3)命令のデコード
デコーダ
(4)データアドレス
の指定
(6)実行
演算レジスタ(AX)
(5)データフェッチ
N
データ
N+1
データ
(7)演算結果を格納
命令とプログラム言語
• プログラム言語
– 命令を記述するための言語
• プログラム言語の分類
– 機械語
– アセンブリ言語
– 高級言語
3
2015/5/28
機械語
• コンピュータのハードウェアが解釈できる命令:
2進数で表現された命令
• 機械語の命令は,命令の種類を識別する命令
コードと,命令の実行に必要なデータやアドレ
スの指定などをするオペランドの部分からなる
• CPUの種類によって回路の構成が異なるため,
それに対する命令の種類とコードが異なる
命令の種類
命令区分
転送命令
内容
CPUから主記憶へのデータ転送
主記憶からCPUへのデータ転送
レジスタからレジスタへのデータ転送
四則演算命令
2つのデータ項目の加算・減算・乗算・除算など
論理演算命令
2つのデータ項目の比較,データの論理積・論理
和・論理否定・排他的論理和など
分岐命令
入出力命令
無条件分岐,条件分岐など
入力装置からCPUへのデータの転送
出力装置へのデータの転送など
4
2015/5/28
機械語プログラムの例(問題と設定)
2数の和を求める機械語プログラム
演算レジスタが1つしかない簡単な構成の
仮想CPUを考える.
(500)16番地の内容と(501)16番地の内容の和を求め,
(502)16番地に結果を書く.
16ビットの命令のうち,4ビットで16種類の命令コードを
指定し,ロード命令は0001,ストア命令は0010,加算
命令は0100,などとする.そして12ビットをオペランド
としてデータの記憶場所(アドレス)を直接指定すること
にする.
機械語プログラムの例
0001010100000000
0100010100000001
0010010100000010
命令コード
演算レジスタに500番地の内容をロード
演算レジスタに501番地の内容を加算
演算レジスタの内容を502番地にストア
オペランド
5
2015/5/28
アセンブリ言語
• 機械語の命令を意味のある英字記号にほ
ぼ一対一に置き換えた言語
• アセンブリ言語は機械語に変換されて実
行される
• アセンブラ:アセンブリ言語を機械語に変
換するプログラム
アセンブリ言語の例
2数の和を求めるアセンブリ言語のプログラム
(500)16番地の内容と(501)16番地の内容の和を求め,
(502)16番地に結果を書く.
ロード命令はLD,ストア命令はST,加算命令はADD
と指定し,データの記憶場所(アドレス)を直接指定する.
LD AX,500 演算レジスタAXに500番地の内容をロード
ADD AX,501 演算レジスタAXに501番地の内容を加算
ST AX,502
演算レジスタAXの内容を502番地にストア
6
2015/5/28
高級言語
• なるべく人間の言葉(自然言語)に近く,あ
る程度まとまった処理をハードウェアをあ
まり意識せずに記述可能.
• ハードウェアの設計に依存せず共通に作
られており,言語ごとに文法や語彙が決め
られている.
• よく使われる処理はあらかじめ部分プログ
ラムとして用意されている.
高級言語の種類
•
•
•
•
•
•
•
•
FORTRAN(1957~):科学技術計算向き
COBOL(1959~):事務処理用
Pascal(1970~):教育用言語
C(1972~):システム記述向き
BASIC(1964~):教育用簡易言語
LISP(1962~):記号処理,リスト処理言語
Prolog(1972~):知識処理言語
C++(1980~):システム記述向きのオブジェクト指
向言語
• Java(1995~):環境に独立なオブジェクト指向言語
7
2015/5/28
高級言語の例1(Pascal)
2数の和を求めるPascal言語のプログラム
wa := x + y;
データは主記憶のアドレスではなく,名前(変数名)
をつけて指定.アドレスと名前の対応の意識は不必要.
高級言語の例2(Pascal)
2つの整数をキーボードから読みこんで,2整数と
和を表示するプログラム
Program reidai(input, output);
var x, y, wa: integer;
begin
write(‘2つの整数を入力して下さい =>’);
read(x, y);
wa :=x+y;
writeln(x,y, ‘の和は:’, wa)
end.
8
2015/5/28
高級言語について
• 高級言語は言語処理プログラムによって機械語
に変換される
• 言語処理プログラムはコンパイラとインタプリタに
分類できる
• コンパイラ:プログラム全体を機械語に変換しオ
ブジェクトプログラムを出力
– FORTRAN,COBOL,C,Pascalコンパイラ等
– いくつかのオブジェクトプログラムをつなぎ(リンク),
実行プログラムを生成
• インタプリタ:プログラムの各行を逐次解釈・実行
– BASIC,LISP,Prologインタプリタ等
アルゴリズムとは?
問題を解くための手順を定めたもの
通常,計算機に問題を解かせる手順を指す
この手順には曖昧な点があってはダメ
操作のそれぞれが計算機で容易に実現でき
る程度の基本的な操作であること
• どんな場合でも必ず正しい解が得られること
•
•
•
•
9
2015/5/28
命令の種類
命令区分
転送命令
内容
CPUから主記憶へのデータ転送
主記憶からCPUへのデータ転送
レジスタからレジスタへのデータ転送
四則演算命令
2つのデータ項目の加算・減算・乗算・除算など
論理演算命令
2つのデータ項目の比較,データの論理積・論理
和・論理否定・排他的論理和など
分岐命令
入出力命令
無条件分岐,条件分岐など
入力装置からCPUへのデータの転送
出力装置へのデータの転送など
10