2013-06-29 34 views
1

我真的是MIPS新手,我有這些問題,我發現他們有很多不同的答案......如果有人能幫上忙,那就太好了。謝謝mips時鐘週期數和如何提高代碼

這段代碼需要多少個時鐘週期?

#Macro Instructions 
li $t0, 32   # 1 or 2 cycles ?  
        #    lui $at, Upper 16-bits of value 
        #    ori Rd, $at, Lower 16-bits of value 
        #    ----------------------------------- 
        #    ori Rt, $0, value 
        # 
        # Which set of instructions will be executed? 


div $t2, $t2, $t0 # 41 cycles?   
        #    bne Rt, $0, 
        #    break $0 
        #    ok: div Rs, Rt 
        #    mflo Rd 

#Integer Instruction 

lw $t2, 0($t13) # 1 cycles? 
sw $t2, 0($t3)  # 1 cycles? 

如何那些4行代碼可以顯著改善?通過避免使用宏或...?

回答

2
  • li $t0, 32

這一個,你可以很容易地拆卸您的可執行文件或目標文件進行檢查。使用MIPS工具鏈中的objdump,並使用-d-D選項。我猜想彙編程序足夠聰明,不會爲這麼小的值產生lui


  • div $t2, $t2, $t0

因爲你是你被兩個(32)動力分配,有這樣做的更快的方法:向右log2(divisor)位移位(即5比特):

srl $t2, $t2, 5 # if $t2 is unsigned 


sra $t2, $t2, 5 # if $t2 is signed