Try   HackMD

2017q1 Homework4 (microarch)

tags:zhanyangch sysprog2017 week4

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

分析

  1. 切斷 Regwrite 會使運算的結果無法寫回 register
  2. 切斷 reigster1 的 forwarding ,無法處理一部分的 data hazard
  3. 切斷用來計算 condition bench 跳躍時的 address

解題

  1. sw $ s1, 0($s2) 可以運作,因為是將 s1 的內容寫入記憶體 0( $s2) 的位置
    會使得哪些程式無法運作
    addi $s2, $zero, 2
    lw $ s0,0($s2)
  2. add $s1, $s1, $s1
    add $s1, $t0, $t1
    可以運作,在第二個 add 中 $s1 做為 rd 是被寫入而非被讀取
  3. 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?