コンピュータアーキテクチャ
第
2
週2
進演算(数の表現)2013年10月2日 金岡 晃
授業計画
第
1
週(9/25)
授業概要・2進数表現・論理回 路の復習
第
2
週(10/2)
2進演算(数の表現)
第
3
週(10/9)
演算アーキテクチャ(演算アル ゴリズムと回路)
第
4
週(10/16)
ノイマン型コンピュータ・命令 とは・命令の使い方
第
5
週(10/23)
休講 第
6
週(10/30)
命令セットアーキテクチャ(命 令の表現・命令の実行の仕組)
第
7
週 ハーバードアーキテクチャ・第
8
週(11/13)
中間試験 第
9
週(11/20)
休講 第
10
週(11/27)
メモリの仕組 第
11
週(12/4)
キャッシュメモリと仮想メ モリ
第
12
週(12/11)
割込みアーキテクチャ 第
13
週(12/18)
パイプライン
第
14
週 入出力アーキテクチャ・ま【復習】第 1 週
2進数表現・論理回路の復習
コンピュータアーキテクチャ
2 進数と 10 進数と 16 進数
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
2 の補数
•
負の数を表現する場合は、2
の補数と呼ばれる表現が使われる• n
ビット表現のデータの場合、n+1
ビット目が1
となる値から負とし て表現したい数値を引くことで求められる16ビット表現データの場合で (-11010)2 を表す:
10000000000000000-11010=1111111111000110
簡単なやり方:値を反転(逆)にして、その値に1を加える
2
の補数表現を利用する理由演算が容易になる。
減算(引き算)が2の補数の加算(足し算)で行うことが可能。
数値の表現:固定小数点数
•
コンピュータの内部では整数を2
進数の固定小数点数として表現して いる–
固定小数点数:データの中で小数点の位置が固定されている• 16
ビット(2
バイト)や32
ビット(4
バイト)の大きさで表現される•
先頭のビットは符号を表し、符号ビット(Sign Bit
)と言う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
ビット:仮数部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 0 25 24 23 22 21 20 19 18 17 16
符号ビット(正:0、負:1)
指数部 仮数部
組合せ回路と順序回路
•
組合せ回路–
これまでやってきた回路のようなもの• AND
、OR
、NOT
、NAND
、NOR
、XOR –
入力した値だけで出力結果が決まる回路•
順序回路–
出力結果が入力の値だけでは決まらず、回路の内部状態と合わ せて結果が決まる–
代表例•
フリップフロップ– RS
フリップフロップ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
)などがある論理回路
論理回路とは
演算回路の組み合わせによりさまざまな論理演算を実現する回路 演算回路
論理演算を実現する回路:
AND
回路、OR
回路、NOR
回路など代表例:加算器(半加算器、全加算器)
複数の桁の2つのデータを入力し、その加算の結果を出力する回路
加算器
• 半加算器(Half Adder)
• 1つの桁の加算を行う回路。
2つの入力の和を求める。
• 桁上がり(繰り上がり)が生じる 可能性があるので出力は2つ
– 全加算器(Full Adder)
• 1つの桁の加算を行う回路。
3つの入力の和を求める。
• 下位からの桁上がり(繰り上がり)に 対応した加算器
– 加算器
• 半加算器と全加算器を 組み合わせることで
複数桁の加算を行う加算器を 実現することができる。
半加算器
全加算器
nビット全加算器
第 2 週 2進演算(数の表現)
コンピュータアーキテクチャ
本日の到達目標と概要
•
到達目標–
コンピュータにおける数の表現を理解する•
概要– 10
進数の表現方法:2
進化10
進数、3
増しコード、グレイコード–
負の数の表現–
実数の表現:浮動小数点数データ表現方法の必要性
2
進化10
進数(BCD
)3
増しコード 人間:10
進数コンピュータ:
2
進表現 対応づけるルールが必要単に
2
進数では ダメなのか ルールの種類2
進数•
人間がわかりやすい(扱いやすい)•
ミスが出にくい•
補数が扱いやすい(自己補数化性)最上位ビット( MSB )と最下位ビット( LSB )
最上位ビット (MSB: Most Significant Bit)
最下位ビット (LSB: Least Significant Bit)
最上位ビット 最下位ビット
10 進数の 2 進表現: 2 進化 10 進数( BCD )
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
複数桁の10進数は?
各桁の数字を
BCD
で表現10 進数の 2 進表現: 3 増しコード
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 進表現:グレイコード
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ビットのデータ変換だけで良い
グレイコードの作り方
0 1
1ビットコード
2ビット
コード
0
1 1 0
①そのまま
②反転
0
0 1 1
②0と1を付加
0 0 0 1 1 1 1 0
2ビットコード
3ビット コード
演習: 2 進表現
10
進数の数をそれぞれの2
進表現方法で表す2
進化10
進数(
BCD
)3
増しコード グレイコード10
134
補数と擬補数
補数
擬補数
𝑅
進数において桁数を𝑚
とすると数値
𝑛
を𝑘
の補数で表現すると次のようになる。𝑅
𝑚− 𝑅 − 𝑘 − 𝑁
2
進数の時の1
の補数10
進数の時の9
の補数𝑅
進数での𝑅 − 1
の補数を擬補数と呼ぶ。負の数の表現:符号と絶対値表現
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 の補数表現
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の補数で 表す
演習:負の数の表現
負の数を「符号と絶対値表現」と
「
2
の補数表現」の2
種類で表す-5
8
ビットの表現で やってみよう符号と
絶対値表現
2
の補数表現実数の表現:浮動小数点数
ビット番号:
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 2625 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
実数を
2
進数で表現する(5.625)10 (101.101)2
整数部を0以外の1桁(つまり2進数の場合 1)に調整(正規化、normalize)する。
1.01101 × 2
2 仮数部 指数部32
ビット(単精度)の場合
•
MSB:仮数の符号•
8ビット:指数部•
23ビット:仮数部バイアス表現:
-127乗から128乗まで表すため に、127を加算して2進表現する けち表現(Economized Representation)
2進数を正規化すると必ず1になるため、1を省略して1ビット省略する方法
浮動小数点数の精度
精度
•
単精度:4バイト(32ビット)長•
倍精度:8バイト(64ビット)長•
拡張倍精度:倍精度より大きいサイズを利用数値の範囲とその限界
•
範囲のオーバー:Overflow•
絶対値が小さすぎ:Underflow•
丸め誤差•
10進数の2進表現はだいたい循環小数演習:浮動小数点数
浮動総数点数で表す
32
ビット:構成はスライド