SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
コンピュータシステム
の理論と実装②
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で実装する。

Mais conteúdo relacionado

Mais procurados

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdfcatupper
 
Deflate
DeflateDeflate
Deflate7shi
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろうYoichi Toyota
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
systeme de numeration et codes
systeme de numeration et codessysteme de numeration et codes
systeme de numeration et codesAmmar Zitouna
 
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方Tsuneo Yoshioka
 
CRC-32
CRC-32CRC-32
CRC-327shi
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミングNorishige Fukushima
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 

Mais procurados (20)

Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
Deflate
DeflateDeflate
Deflate
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろう
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
systeme de numeration et codes
systeme de numeration et codessysteme de numeration et codes
systeme de numeration et codes
 
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
 
CRC-32
CRC-32CRC-32
CRC-32
 
サンプリング定理
サンプリング定理サンプリング定理
サンプリング定理
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
 
Abc009
Abc009Abc009
Abc009
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 

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