コンピュータアーキテクチャ - ホーム · 10000 16 10 10001 17 11 10010 18 12 10011 19...

28
コンピュータアーキテクチャ 22進演算(数の表現) 2013年10月2日 金岡 晃

Upload: vanphuc

Post on 30-Aug-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

コンピュータアーキテクチャ第2週 2進演算(数の表現)

2013年10月2日

金岡 晃

授業計画

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 コンピュータアーキテクチャ

【復習】第1週2進数表現・論理回路の復習

コンピュータアーキテクチャ

2 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ビット全加算器

第2週 2進演算(数の表現)コンピュータアーキテクチャ

11 2013/10/02 コンピュータアーキテクチャ

本日の到達目標と概要

• 到達目標

– コンピュータにおける数の表現を理解する

• 概要

– 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ビットコード

演習:2進表現

2013/10/02 コンピュータアーキテクチャ19

10進数の数をそれぞれの2進表現方法で表す

2進化10進数(BCD)

3増しコード グレイコード

10

134

297

補数と擬補数

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進表現はだいたい循環小数

演習:浮動小数点数

2013/10/02 コンピュータアーキテクチャ26

浮動総数点数で表す

32ビット:構成はスライド23と同じ

バイアスは127 けち表現

128

0.00001625

本日の到達目標と概要

• 到達目標

– コンピュータにおける数の表現を理解する

• 概要

– 10進数の表現方法:2進化10進数、3増しコード、グレイコード

– 負の数の表現

– 実数の表現:浮動小数点数

27 2013/10/02 コンピュータアーキテクチャ