コンピュータアーキテクチャ - ホーム · 10000 16 10 10001 17 11 10010 18 12 10011 19...
TRANSCRIPT
授業計画
1
第1週
(9/25)
授業概要・2進数表現・論理回路の復習
第2週
(10/2)
2進演算(数の表現)
第3週
(10/9)
演算アーキテクチャ(演算アルゴリズムと回路)
第4週
(10/16)
ノイマン型コンピュータ・命令とは・命令の使い方
第5週
(10/23)
休講
第6週
(10/30)
命令セットアーキテクチャ(命令の表現・命令の実行の仕組)
第7週
(11/6)
ハーバードアーキテクチャ・RISCとCISC・制御アーキテクチャ
第8週
(11/13)
中間試験
第9週
(11/20)
休講
第10週
(11/27)
メモリの仕組
第11週
(12/4)
キャッシュメモリと仮想メモリ
第12週
(12/11)
割込みアーキテクチャ
第13週
(12/18)
パイプライン
第14週
(1/8)
入出力アーキテクチャ・まとめ
1/22-2/8 期末試験
2013/10/02 コンピュータアーキテクチャ
2進数と10進数と16進数
2013/10/02 コンピュータアーキテクチャ3
2進数 10進数 16進数
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
2進数 10進数 16進数
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
10000 16 10
10001 17 11
10010 18 12
10011 19 13
2進数 10進数 16進数
10100 20 14
10101 21 15
10110 22 16
10111 23 17
11000 24 18
11001 25 19
11010 26 1A
11011 27 1B
11100 28 1C
11101 29 1D
n進数であることを明示する場合は(0000111)n のように()と右下に基数を記載する
2の補数
• 負の数を表現する場合は、2の補数と呼ばれる表現が使われる
• nビット表現のデータの場合、n+1ビット目が1となる値から負として表現したい数値を引くことで求められる
2013/10/02 コンピュータアーキテクチャ4
16ビット表現データの場合で (-11010)2 を表す:
10000000000000000-11010=1111111111000110
簡単なやり方:値を反転(逆)にして、その値に1を加える
2の補数表現を利用する理由
演算が容易になる。減算(引き算)が2の補数の加算(足し算)で行うことが可能。
数値の表現:固定小数点数
• コンピュータの内部では整数を2進数の固定小数点数として表現している
– 固定小数点数:データの中で小数点の位置が固定されている
• 16ビット(2バイト)や32ビット(4バイト)の大きさで表現される
• 先頭のビットは符号を表し、符号ビット(Sign Bit)と言う
2013/10/02 コンピュータアーキテクチャ5
0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0ビット番号:
符号ビット(正:0、負:1)
浮動小数点数• 実数を扱うときには固定小数点数ではなく浮動小数点数(小数点の位置
が動く)で表現される• 10進表現の199610.21は1.9961021x10^5
– 左部分を仮数、右部分を基数と指数
• 32ビットの場合– 先頭1ビット:仮数の符号– 8ビット:指数部– 23ビット:仮数部
2013/10/02 コンピュータアーキテクチャ6
0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0
31 30 29 28 27 26ビット番号:
0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 025 24 23 22 21 20 19 18 17 16
符号ビット(正:0、負:1)
指数部 仮数部
組合せ回路と順序回路
• 組合せ回路
– これまでやってきた回路のようなもの
• AND、OR、NOT、NAND、NOR、XOR
– 入力した値だけで出力結果が決まる回路
• 順序回路
– 出力結果が入力の値だけでは決まらず、回路の内部状態と合わせて結果が決まる
– 代表例
• フリップフロップ
– RSフリップフロップ
2013/10/02 コンピュータアーキテクチャ7
S R Q
0 0 Q
0 1 0
1 0 1
1 1 ×(禁止)
論理演算
• 論理演算
– ブール演算(Boolean Operation)とも。
– 「真(1)」と「偽(0)」の2つの結果を出す演算
– 3つの基本的な演算
• 論理和(OR)
• 論理積(AND)
• 否定(NOT)
• 論理和(OR) :0 or 0のみ0。あとは1になる。
• 論理積(AND):1 and 1のみ1。あとは0になる。
• 否定(NOT) :not 0は 1、not 1は0
• そのほかに否定論理和(NOR)、否定論理積(NAND)、排他的論理和(XOR)などがある
2013/10/02 コンピュータアーキテクチャ8
論理回路
2013/10/02 コンピュータアーキテクチャ9
論理回路とは
演算回路の組み合わせによりさまざまな論理演算を実現する回路
演算回路
論理演算を実現する回路:AND回路、OR回路、NOR回路など
代表例:加算器(半加算器、全加算器)複数の桁の2つのデータを入力し、その加算の結果を出力する回路
加算器
• 半加算器(Half Adder)
• 1つの桁の加算を行う回路。2つの入力の和を求める。
• 桁上がり(繰り上がり)が生じる可能性があるので出力は2つ
– 全加算器(Full Adder)
• 1つの桁の加算を行う回路。3つの入力の和を求める。
• 下位からの桁上がり(繰り上がり)に対応した加算器
– 加算器
• 半加算器と全加算器を組み合わせることで複数桁の加算を行う加算器を実現することができる。
2013/10/02 コンピュータアーキテクチャ10
半加算器
全加算器
nビット全加算器
本日の到達目標と概要
• 到達目標
– コンピュータにおける数の表現を理解する
• 概要
– 10進数の表現方法:2進化10進数、3増しコード、グレイコード
– 負の数の表現
– 実数の表現:浮動小数点数
12 2013/10/02 コンピュータアーキテクチャ
データ表現方法の必要性
2013/10/02 コンピュータアーキテクチャ13
2進化10進数(BCD)
3増しコード
グレイコード
人間:10進数
コンピュータ:2進表現
対応づけるルールが必要
単に2進数ではダメなのか
ルールの種類
2進数
• 人間がわかりやすい(扱いやすい)• ミスが出にくい• 補数が扱いやすい(自己補数化性)• ハミング距離が小さい
最上位ビット(MSB)と最下位ビット(LSB)
2013/10/02 コンピュータアーキテクチャ14
最上位ビット (MSB: Most Significant Bit)
最下位ビット (LSB: Least Significant Bit)
最上位ビット 最下位ビット
10進数の2進表現:2進化10進数(BCD)
2013/10/02 コンピュータアーキテクチャ15
10進数の1桁(0-9)を2進(0と1)で表現するためには少なくとも4ビットが必要
2進数4ビットでは16通りの表現が可能(0000-1111)
10通りのみを使用して10進数と対応づけた単純な手法:2進化10進数(BCD:Binary Coded Decimal)
10進数 BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
複数桁の10進数は?
各桁の数字をBCDで表現
12 0001 0010
10進数の2進表現:3増しコード
2013/10/02 コンピュータアーキテクチャ16
10進数 BCD
0 0011
1 0100
2 0101
3 0110
4 0111
5 1000
6 1001
7 1010
8 1011
9 1100
BCDに3を加算したコード
• 0000のデータ割り当てが無い
• 各ビットを反転する(NOTをとる)と、10進数の9の補数となる(自己補数化性)
0011(0) → 1100(9)
10進数の9の補数
足すと9になる数のペア
減算に都合が良い
• 四捨五入の判断がMSBを見るだけで可能
「データがない」ことを示すのに0000を利用可能
10進数の2進表現:グレイコード
2013/10/02 コンピュータアーキテクチャ17
10進数 グレイコード
0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
10進数のデータが1変わるときに、対応するコードのビットの変更が1か所だけで済む表現
たとえばBCDで(7)10から(8)10に増えるとき, 0111が1000になるので計4ビットのデータを変換しなければならないがグレイコードでは1ビットのデータ変換だけで良い
グレイコードの作り方
2013/10/02 コンピュータアーキテクチャ18
0
1
1ビットコード
2ビットコード
0
1
1
0
①そのまま
②反転
0
0
1
1
②0と1を付加
0 0
0 1
1 1
1 0
2ビットコード
3ビットコード
補数と擬補数
2013/10/02 コンピュータアーキテクチャ20
補数
擬補数
𝑅進数において桁数を𝑚とすると数値𝑛を𝑘の補数で表現すると次のようになる。
𝑅𝑚 − 𝑅 − 𝑘 − 𝑁
2進数の時の1の補数
10進数の時の9の補数
𝑅進数での𝑅 − 1の補数を擬補数と呼ぶ。
負の数の表現:符号と絶対値表現
2013/10/02 コンピュータアーキテクチャ21
10進数 2進表現
-7 1111
-6 1110
-5 1101
-4 1100
-3 1011
-2 1010
-1 1001
-0 1000
10進数 2進表現
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
MSBを符号ビットとし、残りのビットで数値を絶対値にしたデータを表す
負の数の表現:2の補数表現
2013/10/02 コンピュータアーキテクチャ22
10進数 2進表現
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
10進数 2進表現
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
負の数はその数の絶対値の2の補数で表す
演習:負の数の表現
2013/10/02 コンピュータアーキテクチャ23
負の数を「符号と絶対値表現」と「2の補数表現」の2種類で表す
-5
8ビットの表現でやってみよう
-79
符号と絶対値表現
2の補数表現
実数の表現:浮動小数点数
2013/10/02 コンピュータアーキテクチャ24
ビット番号:
符号ビット(正:0、負:1)
指数部 仮数部小数点
0 1 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31 30 29 28 27 26 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 025 24 23 22 21 20 19 18 17 16
実数を2進数で表現する
(5.625)10 (101.101)2
整数部を0以外の1桁(つまり2進数の場合1)に調整(正規化、normalize)する。
1.01101 × 22
指数部仮数部
32ビット(単精度)の場合
• MSB:仮数の符号• 8ビット:指数部• 23ビット:仮数部
バイアス表現:-127乗から128乗まで表すために、127を加算して2進表現する
けち表現(Economized Representation)2進数を正規化すると必ず1になるため、1を省略して1ビット省略する方法
浮動小数点数の精度
2013/10/02 コンピュータアーキテクチャ25
精度
• 単精度:4バイト(32ビット)長• 倍精度:8バイト(64ビット)長• 拡張倍精度:倍精度より大きいサイズを利用
数値の範囲とその限界
• 範囲のオーバー:Overflow• 絶対値が小さすぎ:Underflow• 丸め誤差
• 10進数の2進表現はだいたい循環小数