2013-04-16 98 views
1

沒有任何字符串,該程序運行良好。但是當我添加代碼塊的地方說「如果我把這個塊拿出來運行」,我會在出現錯誤的地方說「這裏導致錯誤」。我得到的錯誤是「運行時異常在0x00400028:地址超出範圍0x00000002」MIPS - 打印字符串導致嘗試打印數組值的錯誤

我不知道爲什麼我得到這個錯誤。我沒有看到如何打印字符串會給我一個錯誤,試圖從堆棧打印一個int。

我一直試圖解決這個問題幾個小時,我沒有找到很多的幫助或資源MIPS,所以任何幫助將不勝感激,並標誌有用。

.data 
.align 2 
list: .space 40 #an array of 10 ints 
blank: .asciiz " " 
mess: .asciiz "The values in the array are "  


.globl main 
.text 

main: 
    jal read 

    li $v0, 4 
    la $a0, mess 
    syscall 

    jal print 
    jal total 
    jal average 
    lw $a0, 0($sp) #load avererage from stack 
    li $t0, 1 #print it 
    syscall  #causes ERROR here      ############ 
    b done  #end program 

#reads in 10 digits into array  
read: 
    li $v0, 5  #prompts for int 
    syscall 
    sw $v0, list($t0) #stores int in array 

    addi $t0, $t0, 4 #holds the number 4 
    blt $t0, 40, read #repeats until array is full 
    jr $ra   #return to caller 

#prints array 
print: 
    lw $a0, list($t1) #loads int from array 
    li $v0, 1  #print int 
    syscall 

    li $v0, 4  #if I take this block out it runs  ######## 
    la $a0, blank  # 
    syscall   # 

    addi, $t1, $t1, 4 #counter 
    blt $t1, 40, print #repeats until array it full 
    jr $ra   #return to caller 

#adds the total of all array elements 
total: 
    lw $t3, list($t2) #gets ints from array 
    add $s0, $s0, $t3 #adds number to running total 
    addi $t2, $t2, 4 #counter 
    blt $t2, 40, total #repeat until all ints are added 
    addi $sp, $sp, -4 #allocate space on array 
    sw $s0, 0($sp)  #store total on stack 
    jr $ra   #return to caller 

#divides the total by 10, for the average  
average: 
    lw $a0, 0($sp)  #gets the total from the stack 
    addi $t4, $t4, 10 #10 to divide by 
    div $a0, $t4 
    mflo $t5 
    sw $t5, 0($sp)  #store aveg in stack 
    jr $ra  

done: 

回答

1

你忘了把$v0 1。我猜你設置$t0,而不是$v0

+0

哇,我太傻了。非常感謝你。 –