# 2017q1 Homework4(microarch) contributed by<`yanang`> ###### tags: `yanang` ## ![](https://i.imgur.com/Y80lxhP.png) :::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)