2017q1 Homework4 (microarch)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
上圖紅色的 1, 2, 3 對 MIPS 做了對應的修改,請考慮以下狀況,分別解釋對應的程式碼是否能運作:
- 做了 1: Stuck at 0 left of cut 的修改,sw $ s1, 0($s2) 能否運作?這樣的修改會使得哪些程式無法運作,請列出至少兩項組合語言列表
- 做了 2 的修改後,以下程式能否運作?解釋並提出可運作的版本
add $s1, $s1, $s1
add $s1, $t0, $t1
- 做了 3 的修改後,以下程式能否運作?
addi $s2, $zero, 2
addi $s1, $zero, 2
beq $s2, $s1, exit
分析
- 切斷 Regwrite 會使運算的結果無法寫回 register
- 切斷 reigster1 的 forwarding ,無法處理一部分的 data hazard
- 切斷用來計算 condition bench 跳躍時的 address
解題
- sw $ s1, 0($s2) 可以運作,因為是將 s1 的內容寫入記憶體 0( $s2) 的位置
會使得哪些程式無法運作
addi $s2, $zero, 2
lw $ s0,0($s2)
- add $s1, $s1, $s1
add $s1, $t0, $t1
可以運作,在第二個 add 中 $s1 做為 rd 是被寫入而非被讀取
- beq $s2, $s1, exit 無法運作
不確定可否用 pseudoinstruction,就使用最原始的寫法
addi $s2, $zero, 2
addi $s1, $zero, 2
jal condj
j exit
condj:
slt $s3, $s1, $s2
slt $s4, $s1, $s2
nor $s3, $s4, $s3 #這三行可以等同於 seq $s3,$s1,$s2
sll $s3, $s3, 2 #s3=s3*4
add $v0, $ra, $s3 #v0=addr+(4 or 0)
jr $v0
參考資料
工科系計組講義
How to load memory address without using pseudo-instructions?
how to get current PC register value on MIPS arch?