SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
コンピュータシステム
の理論と実装②
2章 ブール算術
PCで用いられる演算 → 論理演算 + 算術演算
1章ブール論理 2章ブール算術
(加算と減算)
論理演算と算術演算を処理するハードウェア装置
→ ALU(Arithmetic and Logic Unit)
2進数と10進数の関係
(𝑥 𝑛 𝑥 𝑛−1・・・𝑥0) 𝑡𝑤𝑜= σ𝑖=0
𝑛
2𝑖 × 𝑥𝑖
2進数から10進数
(ex) (11010) 𝑡𝑤𝑜= 20 × 0 + 21 × 1 + 22 × 0 + 23 × 1 + 24 × 1
= 26
10進数から2進数
連除法 ・・・ 2で割り続けて、余りを並べる
(ex) 26 → (11010) 𝑡𝑤𝑜
各桁の重み 各桁の数
262
132 0
62 1
32 0
1 1
下
か
ら
並
べ
る
2進数加算
2進数の加算 → 10進数と同様。
各桁で足し合わせ、1を超えたら桁上げ(キャリー)
(ex) 1001 + 0101
1001
+ 0101
1110
0001 キャリー
算術オーバーフロー
コンピュータでは、扱える桁数(ビット数)の上限が決まっている!
上限を超えてしまった状態 = オーバーフロー
特に
数値の計算によるオーバーフロー = 算術オーバーフロー
ex) 上限が4ビットの場合
1001
+ 0101
1110
オーバーフロー
なし
結果が4ビット
に収まってる!
1011
+ 0111
10010
オーバーフロー
あり
結果が5ビット
に突入!
算術オーバーフロー
算術オーバーフローが起こった場合の処理
→ ・ エラーを出力し、プログラムを停止
・ オーバーフローを示す特殊な値を出力
・ オーバーフローで溢れたビットを無視
・ etc.
恐らく、今回はこれ
符号付き2進数
数 → 正の数と負の数
0と1を用いて、符号付きの数をどう表現するか?
→ 2の補数表現が主流!
符号がなくてもOK
+2 or 2 −2
符号が必要
2の補数
ある𝑛 桁2進数𝑥の2の補数 ҧ𝑥は次のように定義される。
ҧ𝑥 𝑡𝑒𝑛 = ቊ
2 𝑛
− 𝑥 𝑡𝑒𝑛 (𝑥 ≠ 0)
0 (𝑥 = 0)
ex) 4桁2進数 (0010) 𝑡𝑤𝑜を2の補数表現すると
24
− 2 = 14 = (1110) 𝑡𝑤𝑜
2の補数
2の補数を簡単に求めるテクニック
1. 各ビットの数を反転させる
2. 最下位ビットに1を加える
ex) (0010) 𝑡𝑤𝑜の2の補数を求める
1. ビットの反転 → (1101) 𝑡𝑤𝑜
2. 1を加える → (1110) 𝑡𝑤𝑜
ҧ𝑥 𝑡𝑒𝑛 = ቊ
2 𝑛 − 𝑥 𝑡𝑒𝑛 (𝑥 ≠ 0)
0 (𝑥 = 0)
で求めるのは面倒。。。
2の補数
2の補数は、元の数と絶対値は同じで逆符号をもつ数となる!
ex) (0010) 𝑡𝑤𝑜 の 2の補数は(1110) 𝑡𝑤𝑜
(0010) 𝑡𝑤𝑜 ↔ (1110) 𝑡𝑤𝑜
(0010) 𝑡𝑤𝑜 + (1110) 𝑡𝑤𝑜 = (0000) 𝑡𝑤𝑜
本当に対か?
算術オーバーフローで5桁目は無視される!
符号付き2進数の注意点
(0010) 𝑡𝑤𝑜の2の補数は(1110) 𝑡𝑤𝑜 ⇒ (1110) 𝑡𝑤𝑜= −2
ただ、 (1110) 𝑡𝑤𝑜= 14では?
→ 符号付き2進数では、最上位ビットが1の場合は、負の数として扱う!
符号を考慮するなら (1110) 𝑡𝑤𝑜≠ 14
符号付き2進数の注意点
なぜ最上位ビットが1で負の数?
→ 限られたビット数で正数、負数の両方を表現するため!
ex) 数字を4ビットで扱う場合
24
= 16 通りの数を表せる → 正の数、負の数を8つずつに
分ける
→ 最上位ビットが0 : 正の数
最上位ビットが1 : 負の数
符号付き2進数の注意点
最上位ビットが0 : 正の数
最上位ビットが1 : 負の数
正の数 負の数
0 0000
1 0001 −1 1111
2 0010 −2 1110
3 0011 −3 1101
4 0100 −4 1100
5 0101 −5 1011
6 0110 −6 1010
7 0111 −7 1001
−8 1000
2進数減算
2の補数表現を用いると、減算は加算として扱える!
ex) 6 −3 = 3 を2の補数表現を用いて計算
6 −3 = 6 + (−3) = (0110) 𝑡𝑤𝑜+(1101) 𝑡𝑤𝑜
= (0011) 𝑡𝑤𝑜
= 3
加算として扱う
加算器
加算器の種類
・半加算器 ・・・ 2つの1ビットの和を求める
・全加算器 ・・・ 3つの1ビットの和を求める
・(多ビット半)加算器 ・・・ 2つの多ビットの和を求める
・インクリメンタ ・・・ 1を加える
ALU (Arithmetic and Logic Unit)
ALU ・・・ 論理演算と算術演算を処理する装置
制御ビットによって、演算の内容が操作される
今回のALUは、6つの制御ビットを用いる
→ 26 = 64通りの演算内容が存在するが、以降で重要と
なってくるのは18種類
作業
1. 4種加算器とALU回路を実装する
2. シミュレーション
半加算器
sum ・・・ 最下位ビット sum = Xor(a,b)
carry ・・・ 最上位ビット carry = And(a,b)
a b carry sum
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
Half
Adder
a
b
sum
carry
半加算器
sum ・・・ 最下位ビット sum = Xor(a,b)
carry ・・・ 最上位ビット carry = And(a,b)
Xor
a
b
sum
carryAnd
a b carry sum
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
全加算器
sum ・・・ 最下位ビット
carry ・・・ 最上位ビット
Full
Adder
a
b
sum
carry
a b c carry sum
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
c
全加算器
a + b (a + b) + c
a=b=c=1の場合の例
a sum
carry
b
Half
Adder
Half
Adder
c Or
s
c
s
c
c1
s1
s1
c2
1
1
+ 1
1 0
a
b
c1 0
1 0
+ 1
1 1
c1 s1
c
c2
sumcarry
全加算器
a + b (a + b) + c
a=b=c=1の場合の例
a sum
carry
b
Half
Adder
Half
Adder
c Or
s
c
s
c
c1
s1
s1
c2
1
1
+ 1
1 0
a
b
c1 0
1 0
+ 1
1 1
c1 s1
c
c2
sumcarry
半加算器 半加算器Orゲート
多ビット加算器
16ビット2進数の加算
・・・ ・・・ 1 1
0 1 ・・・ 1 1
+ 1 1 ・・・ 1 1
・・・ ・・・ ・・・ 1 0
オペランド1
オペランド2
キャリービット(桁上げ)
Add16
a[16]
b[16]
out[16]
多ビット加算器
16ビット2進数の加算
・・・ ・・・ 1 1
0 1 ・・・ 1 1
+ 1 1 ・・・ 1 1
・・・ ・・・ ・・・ 1 0
オペランド1
オペランド2
キャリービット(桁上げ)
2ビットの足し算なので半加算器
多ビット加算器
多ビット加算器 → 最下位ビットの加算は半加算器
その他ビットの加算は全加算器
Half
Adder
s
c
a[0]
b[0]
out[0]
a[1]
b[1]
Full
Adder
s
c
out[1]
Full
Adder
s
c
out[2]
インクリメンタ
インターフェイス
実装
HDLで記述する際、0はfalse、1はtrueとする。
→ 00・・・01 = false false ・・・ false true
Inc16in[16] out[16]
Add16
in[16]
out[16]
00・・・01
1入力から2入力
→具体的な値なら増やせる?
ALU
入力 → データビット : x[16]、y[16]
制御ビット : zx、nx、zy、ny、f、no
出力 → out[16]、zr、ng
x[16]
y[16]
out[16]
nx zy ny f nozx
zr ng
ALU
ALU
各制御ビットの役割 (p.36の図を参照)
・ zx → x[16]を00・・・0にする ・ f → f=1ならx[16]+y[16]
・ nx → x[16]を否定(反転) f=0ならAnd(x[16],y[16])
・ ny → y[16]を00・・・0にする ・ no → zx~fを経た結果を否定(反転)
・ ny → y[16]を否定(反転)
ALU
具体例
zx nx zy ny f no out
if zx=1
then x=0
if nx=1
then x = !x
if zy=1
then y=0
if ny=1
then y = !y
if f=1
then out=x+y
else
out=x&y
if no=1
then out = !out
0 0 1 1 1 0 x-1
zx=0 → x[16]はそのまま f=1 → out = x[16]+y[16]
nx=0 → x[16]はそのまま = x[16]+11・・・1
zy=1 → y[16]は00・・・0になる = x – 1 (10進数)
ny=1 → y[16]は11・・・1になる
zx nx zy ny f no out
if zx=1
then x=0
if nx=1
then x = !x
if zy=1
then y=0
if ny=1
then y = !y
if f=1
then out=x+y
else
out=x&y
if no=1
then out = !out
0 0 1 1 1 0 x-1
ALU
Mux16
x
false
Mux16 And16
Mux16
y
false
Mux16 Add16
Mux16
Mux16
Or8Way
Or8Way
Or
And16true
out
zr
Andtrue ng
zx nx
f
zy ny
ALU
今回作成したALUができる算術演算は、加算と減算のみである。
→ 乗算や除算、浮動小数点演算はOSで実装する。

Más contenido relacionado

La actualidad más candente

C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようFujio Kojima
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Inc.
 
Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Sana Aroussi
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Inc.
 
Verilog-HDL Tutorial (11)
Verilog-HDL Tutorial (11)Verilog-HDL Tutorial (11)
Verilog-HDL Tutorial (11)Hiroki Nakahara
 
Chapter 2 instructions language of the computer
Chapter 2 instructions language of the computerChapter 2 instructions language of the computer
Chapter 2 instructions language of the computerBATMUNHMUNHZAYA
 
コンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラコンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラYoko Yama
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介MITSUNARI Shigeo
 
Aritmetica binaria complemento
Aritmetica binaria complementoAritmetica binaria complemento
Aritmetica binaria complementoPaulo Henrique
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionInes Ouaz
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』Proktmr
 
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescppC++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescppcocodrips
 
SIMDで整数除算
SIMDで整数除算SIMDで整数除算
SIMDで整数除算shobomaru
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
Exposé Le Microprocesseur
Exposé   Le MicroprocesseurExposé   Le Microprocesseur
Exposé Le MicroprocesseurTheCrazyMan
 

La actualidad más candente (20)

C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説
 
Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole Chapitre i rappel sur l'algèbre de boole
Chapitre i rappel sur l'algèbre de boole
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説
 
Verilog-HDL Tutorial (11)
Verilog-HDL Tutorial (11)Verilog-HDL Tutorial (11)
Verilog-HDL Tutorial (11)
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
Chapter 2 instructions language of the computer
Chapter 2 instructions language of the computerChapter 2 instructions language of the computer
Chapter 2 instructions language of the computer
 
コンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラコンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラ
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
 
Aritmetica binaria complemento
Aritmetica binaria complementoAritmetica binaria complemento
Aritmetica binaria complemento
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
Adders
AddersAdders
Adders
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correction
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
 
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescppC++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
 
SIMDで整数除算
SIMDで整数除算SIMDで整数除算
SIMDで整数除算
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
Pci express modi
Pci express modiPci express modi
Pci express modi
 
Exposé Le Microprocesseur
Exposé   Le MicroprocesseurExposé   Le Microprocesseur
Exposé Le Microprocesseur
 

コンピュータシステムの理論と実装2