---
tags: linyunwen, raygoah
---
# 2018q1 Homework (quiz5-3)
###### tags: `linyunwen` `raygoah`
contributed by <`LinYunWen`, `raygoah`>
- [2018q1 Homework3 (作業區)](https://hackmd.io/Ex6mTFOvS3K6NizRwX-HVQ)
- [第五周練習題 ( 下 )](https://hackmd.io/s/Sk30MXDqM)
- [Youtube](https://www.youtube.com/watch?v=zaA9jzWvMlg&list=PLFSyL7YoFilT_HugG5YUnSqslvFrwuIEp)
### 考慮某款 MIPS 實作,其 data path 如下:
![](https://i.imgur.com/Y80lxhP.png)
上圖紅色的 `1`, `2`, `3` 對 MIPS 做了對應的修改,請考慮以下狀況,分別解釋對應的程式碼是否能運作。
### 解題
#### 測驗 `1`
- Q11: 做了 `1: Stuck at 0 left of cut` 的修改,`sw $s1, 0($s2)` 能否運作?
- Q12: 承上,下方程式能否運作?
```
lw $s1, 0($s2)
add $s1,$2,$3
```
* 在 `1` 切斷的電路中,關係到寫入 reg 的指令能不能運作
![](https://i.imgur.com/rqRHAC3.png)
* 由上圖可以看到,第一列是 R-type 指令,第二列是 lw ,第三列是 sw ,第四列是 beq,所以切斷 `1` 後,會影響到 R-type 以及 lw ,而 sw 則不會受到影響,因為 sw 不用將值寫入reg,而是相反的將值從 reg 中寫入 memory
* 因此 Q11 是能運作的,但在 Q12 中,因為有使用到 lw,且 add 為 R-type 指令,所以不能正常運作
> ![](https://i.imgur.com/s9bYQ24.png)
> 根據上面的這張圖(參考連結在最下方),知道了這條線是控制 MemtoReg RegWr 這兩條訊號線,因此若沒有了這條線,Reg永遠不能被寫入, lw 、 add 等需要寫入 reg 的指令都會失效。
> 而sw不會失效,因為他不牽涉到寫回 reg 的動作。因此這題的答案是==可以運作==。
> [name=rex662624]
#### 測驗 `2`
- Q21: 做了 `2: Cut here` 的修改後,以下程式能否運作?
```
add $s1, $s1, $s1
add $s1, $t0, $t1
```
* 在 `2` 中切掉的電路,會影響到 RS 的 forwarding
* 但因為在第一行做完後,第二行中的 RS 及 RT 都沒有用到 $s1,只有在 RD 的地方使用到 $s1,因此此題不會有 Data Hazard 的情況發生,可以正常運作
#### 測驗 `3`
- Q31: 做了 `3: Cut here` 的修改後,以下程式能否運作? (`exit` 為某個副程式)
> 阻斷了 "shift left 2" 這個 unit,這會造成採取
> - Base or displacement addressing (如 lw,sw)
> - PC-relative addressing (如:beq ,bne)
>
> 等採取上述定址模式的指令無法正常運作。
> 而 j, jal , jr 等指令採取 Pseudodirect addressing ,其跳躍目的位址為指令的後 26 位元和 Program-counter 高位(前 4 bits)結合而成,不涉及需要 shift 2 的運作,仍可正常運作。
> [name=workat60474]
```
cmp:
xor $t1, $s2, $s1
slt $t2, $zero, $t1
sll $t2, 2
add $ra, $ra, $t2
jr $ra
entry:
addi $s2, $zero, 2
addi $s1, $zero, 2
jal cmp
j exit
```
- Q32: 承上,以下程式能否運作?
```
addi $s2, $zero, 2
addi $s1, $zero, 2
beq $s2, $s1, exit
```
* 在 `3` 中切斷的電路,會影響到 `PC + 4 + (imm*4) ` 的部份,也就是 I 型指令 beq,而對於 R 型指令:jr ,或是 J 型指令: j,都是沒有影響的
* 因此在 Q31 中,沒有使用到 beq,使用了 jr 以及 j,所以可以正常執行
* 而在 Q32 中,因為使用到了 beq 所以沒有辦法順利執行
:::info
延伸問題:
- 解釋並且找出 MIPS 的設計
- 充分解釋在共筆中,並且記錄你的學習歷程
:::