--- 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 的設計 - 充分解釋在共筆中,並且記錄你的學習歷程 :::