contributed by <vtim9907
>
考慮以下 MIPS 實作,其 data path 如下:
上圖紅色的 1
, 2
, 3
對 MIPS 做了對應的修改,請考慮以下狀況,分別解釋對應的程式碼是否能運作:
1
: Stuck at 0 left of cut
的修改,sw $s1, 0($s2)
能否運作?這樣的修改會使得哪些程式無法運作,請列出至少兩項組合語言列表。回顧教材時,發現一張很熟悉的圖
之前上計組的時候看過也背過,沒想到忘這麼快Orz
圖中,第一列是 R-type 指令,第二列是 lw ,第三列是 sw ,第四列是 beq。
RegWrite
,也就是會影響把值寫回 Register 的指令。sw $s1, 0($s2)
能否運作?",我想答案是可以的,畢竟 sw 不受影響。2
的修改後,以下程式能否運作?解釋並提出可運作的版本。根據題目砍掉的那條,會影響到 Forwarding 的機制,很可能會發生 Data Hazard。
$s1
的結果還沒寫進去,如果下一條指令的 Src1 有用到 $s1
那就會拿到錯的值。$s1
,所以說這兩行 code 還是可以正常運作。假設有第三道指令?
$s1
,現在第一道指令的$s1
結果還是會 Forward 回去的。$s1
的值,所以第三道指令拿到的 $s1
依然有可能不是最新的值。
add $s1, $s0, $s1
,那麼這三行 code 依然可以運作,因為第三道指令的 $s1
放在 Src2,所以整個 Forward 機制依然正常。3
的修改後,以下程式能否運作?砍掉第三條,會影響到 condition branch 的機制
雖然作業沒寫到,但是小考時有提到該如何做修改,所以我來嘗試看看修改程可以運作的版本。
Shift Left 2
的 unit ,不過用 sll 也可以模擬。code 如下:
計組、計結很重要,實在應該好好理解,背頌的成果很差,很容易忘記… 當然如能實際應用更能加深印象@@
黃婷婷教授的 Computer Architecture 開放式課程很讚! 當然,算盤書也是。