コンピュータにおける算術論理計算
琉球大学 情報工学科 和田 知久
(4.1)はじめに
- MIPSコンピュータの語は32ビットで構成される、以下のような数はどのようにこの語で表現されるのか?
- 負の数
- コンピュータ1語で表すことのできる最大の数
- 表せる最大値より演算結果が大きくなってしまった時
- 実数および小数
- この章では、数の表現方法、演算アルゴリズム、アルゴリズムを実現するハードウエアを検討する
(4.2)符号付数と符号なしの数
- 2進数 1011(2) 10進数で表すと...
- Least significant bit (LSB)
- Most significant bit (MSB)
- オーバーフロー:2進数を演算した結果が、ハードウエアに用意されているビット幅に収まらない場合、オーバーフローが発生したという。
(負の数の表し方)
- 今日のコンピュータでは符号付の数値を表すのにすべて2の補数表現が使用されている。
- 最上位ビット(MSB)を見るだけで、その数が正か負かわかる。
(例題195)
(ハードウエアとソフトウエアのインターフェース)
- Cのようなプログラミング言語では負の数を扱う場合と、そうでない場合が区別されている
|
C言語 |
コンピュータH/W |
0以上の数 |
unsigned integer |
符号なし数 |
正負のある数値 |
integer |
2の補数 |
(例題197)
(例題198 符号拡張)
(例題199 16進数)
(4.3)加算と減算
- 加算はコンピュータで行う自然な演算で、その方法は人が手計算する場合と同じであり、数値の各ビットを右から左へ順に加えて行き、桁上がりがあれば左隣へ加える。
- 減算は引く数を正負反転してから加算する。
(例題 P201)
オーバーフローはいつ起こる?
- 正の数と負の数を加えるとオーバーフローはおきない。
- 減算の場合は2つの数の正負が同じならオーバーフローはおきない。
- 2つの正の数を加算した時に和が負になるとオーバーフローしている。
- 同様に、2つの負の数を加算した時に和が正になるとオーバーフローしている。
操作 |
オペランドA |
オペランドB |
結果 |
A+B |
≧0 |
≧0 |
<0 |
A+B |
<0 |
<0 |
≧0 |
A-B |
≧0 |
<0 |
<0 |
A-B |
<0 |
≧0 |
≧0 |
(4.4)論理演算
- シフト命令: 語中のすべてのビットを左または右にずらして、空いた部分に’0’を埋める。
- sll $t2 $s0 8 #レジスタ $t2 =
レジスタ $s0 << 8 ビット
- 論理和(AND)命令: 2つの語のおなじ位置のビットごとにANDをとる。
- 従来はマスク(mask)と呼んでいた、それは特定のビットを「隠す」から
- ANDに対して、強制的に1に設定する演算を論理和(OR)という。
(4.5)算術論理演算ユニット(ALU)の作成
- 本節では図4.8に示す4つの基本ゲートでALUを構築する。
- MIPSは32ビットが語長であり、ALUも32ビット幅必要であるが、1ビットのALUを32個つないでこれを実現しよう。
- 図4.9 ANDおよびOR用の1ビットの論理演算ユニット
- 図4.10 1ビット加算器
- 図4.14 ANDとORと加算を行う1ビットALU
- 図4.15 32個つなげて作成した32ビットALU
- 順次桁上げ加算器(ripple carry adder)
減算は引く数の正負を反転すれば、加算器を使って減算できる
- 2の補数では、正負を反転するのは「各ビットを反転して、1を加える」
- 最下位ビットのキャリーインを加算時には’0’、減算時には’1’とするればよい。
このように2の補数でやるとハードウエアが単純になる理由で、2の補数が標準となっている。
クイズ4 : 学籍番号 名前 日付 を書いて 提出すること!
1)演習問題4.1、4.3、4.5、4.7
2)演習問題4.14のc以外
宿題4 : 学籍番号 名前 日付 を書いて 提出すること!
1)演習問題4.2,4.4,4.6,4.8,4.9
2)演習問題4.15のc以外
3)演習問題4.43
以上