2015-10-21 51 views
1

此代碼是一個更大的程序的一部分,工作得很好。然後,我意識到這項任務將在-bare模式下進行測試。只要我嘗試在-bare模式下運行它,我的print_string系統調用從正常工作到不打印任何內容,我不知道爲什麼。Mips - print_string系統調用在-bare模式下不起作用

運行這給了我沒有錯誤,它只是不(在末尾也有2個或$ 0 $ 0 $ 0需要?)打印任何

.globl main 

.data 
v: .space 2 
w: .space 2 
x: .space 2 
y: .space 2 
z: .space 2 
inputPrompt: .asciiz "Input mathmatical expression: " 

.text 
main: #main block used to read in all the necessary data 

    lui $a0, 0x1001 

    #prompt for expression 
    addi $v0, $0, 4 
    addi $a0, $a0, 10 
    syscall 
    or $0,$0,$0 
    jr $ra 
    or $0,$0,$0 

回答

2

這就是問題所在:

lui $a0, 0x1001 

如果你看一下在SPIM的數據/ STACK瀏覽器中的地址,你會看到,當你在裸模式是DATA節開始在0x10000000,而不是0x10010000。所以你應該將lui更改爲lui $a0, 0x1000


是2 or $0,$0,$0必要

裸模式意味着分支延遲時隙模擬。因此,您應該填寫任何分支延遲插槽,並在其中安全執行指令。如果您設法重新組織代碼,那可能是NOP或更有意義的說明。例如,如果您有:

ori $a0,$0,1 
jal foo 

你可能已經改變了這一切爲:

jal foo 
ori $a0,$0,1 # will be executed in the delay slot 

注意syscall沒有任何延遲槽。從MIPS32™架構程序員 第二卷:將MIPS32™指令集

格式:SYSCALL

說明:
系統調用異常發生時,立即無條件轉移控制異常處理程序

+0

真棒,簡單的錯誤,並容易修復我的程序。謝謝 –