# 2017q1 Homework4(microarch)
contributed by<`yanang`>
###### tags: `yanang`
##

:::info
做了 1: Stuck at 0 left of cut 的修改,sw $s1, 0($s2) 能否運作?這樣的修改會使得哪些程式無法運作,請列出至少兩項組合語言列表
:::
* 當 WB(write back) signal 維持 0 時,registers 不會將結果寫入 destination register
* 無法使用的組合語言
* add, sub, and, or, slt
* lw, sw
:::info
做了 2 的修改後,以下程式能否運作?解釋並提出可運作的版本
add $s1, $s1, $s1
add $s1, $t0, $t1
:::
* Rs 的 forwarding 將會失效
* hazard conditions:
* EX/MEM.RegisterRd = ID/EX.registerRs
* EX/MEM.RegisterRd = ID/EX.registerRt
* MEM/WB.RegisterRd = ID/EX.registerRs
* MEM/WB.RegisterRd = ID/EX.registerRt
```
add $s1, $s1, $s1
add $s1, $t0, $t1
```
* 並不屬於以上四種情況,故是可運作的
:::info
做了 3 的修改後,以下程式能否運作?
addi $s2, $zero, 2
addi $s1, $zero, 2
beq $s2, $s1, exit
:::
## 參考資料
[計算機組織結構](https://hackmd.io/s/H1sZHv4R#pipeline)
[pipeline forwarding](https://web.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/forward.html)