# 計組 L3
## 2nd期中考
### 加減法(減法就是將A+B的B去(負數)做2's complement再去加它)
基本直式加法即可,注意overflow
#### Overflow: 拿加法為例

#### 不常見特例: Saturating Operation: 當overflow發生時,取最大正值或最小負值。
---
### :heavy_plus_sign: :heavy_multiplication_x: 無號數乘法
#### :one: 傳統乘法Example


#### :two: Optimized乘法Example :
.被乘數register瘦身成32bits
.乘數存在Product右半部32bits
.
因為 
.所以當一次乘法(加Multiplicand)做完後, 乘數(Multiplier)LSB位就不需要了
.同理Product左邊32bits存放目前result暫時值的 LSB位因為不會再做到加法運算,也不需要了
.>>**因此我們就一起shift right!!**
.見下例


---
### :heavy_minus_sign: :heavy_multiplication_x: 有號數乘法: Booth's Algorithm
#### <font color="blue">Booth's Algorithm: (1)可對有號數做乘法(2)效率比傳統或Optimized乘法都快</font>
.
在optimized乘法的基礎下
**核心精神: 一次檢查乘數(Multiplier)的2個bit**
**分為beginning(10), middle(11), end(01) of a run of 1s**

.
演算法分為2 steps
`一樣在最後會Shift Product register right 1 bit!!!`
| bits | 要幹嘛 |
| -------- | -------- |
| 01 | 加被乘數到product左邊 |
| 10 | 減被乘數到product左邊 |

.
下面是例子:正數
1. 一開始先在最右邊補個0當作虛構的bit
2. 當Product做shift right時,MSB(最左位)做sign extention

.
**負數的例子!!!!**

---
#### MIPS Multiplication

---
### :heavy_division_sign: 除法
#### :one: 傳統除法

.
觀察式子可以發現除數(divisor)其實一直在shift right
而且ALU是在做Remainder(餘數)去減divisor(除數)
`如果得到結果<0,Shift left商數(Quotient),然後Q0(商的LSB)=0`
`如果得到結果>=0,Shift left商數(Quotient),然後Q0(商的LSB)=1`

.
下面是例子

#### :two: Optimized除法
.
**將餘數(Remainder)存在左邊32-bits,商數(Quotient)存在右邊32-bits**
**原本是移Quotient往左,現在變成移Remainder往左**

:::success
這裡我們可以發現,這可以跟乘法共用一個hardware(乘法是Product shift right),在實際設計電路時可以省下hardware的cost。
:::
.
下面是例子

---
#### MIPS Division

---
第二次期中考結束!!!!!
---
##### tags: `計組` `CO` `L3`
---
:::warning
#### <font color="black">問答區/Chatting Room
</font>
:::