2011-07-28 183 views
1

我嘗試將數字添加到數組,然後嘗試打印這些數字,但是當我添加地雷數字並嘗試打印時,然後得到不同的數字。這怎麼可能?打印整數mips

我的代碼是:

#----------------------------------- Array Vullen ----------------------------------------------------- 
.data 
    question1_msg: .asciiz "How much integer do you want to give?\n" 
    question2_msg: .asciiz "give a number?\n" 
.text 

question_numbers: 
    la $a0, question1_msg #load the question in $a0 
    li $v0, 4 
    syscall 

answer_numbers: 
    li $v0, 5 #read the answer of previous question 
    syscall 
    move $t0, $v0 
    move $t9, $t0 
    move $t8, $t0 

generate_array: 
    sll $t0, $t0, 2 #create array 
    move $a0, $t0 
    li $v0, 9 
    syscall 
    move $t3, $v0 #put the stack pointer in a temperay register 
    move $t4, $v0 

add_numbers_array: 
    bge $t1, $t9, Call_procedure # if $t1 >= $t0 then exit 

    #ask questions 
    la $a0, question2_msg #load the question in $a0 
    li $v0, 4 
    syscall 

    #read numbers 
    li $v0, 5 
    syscall 
    move $t2, $a0 

    #add number en go to the next array point 
    sw $t2, ($t3) 
    add $t3, $t3, 4 
    add $t1, $t1, 1 

    #get back to the begin of the loop 
    b add_numbers_array 

#-------------------------------------Array Printen------------------------------------------------ 


Call_procedure: 
    li $t1, 0 
    la $a1, ($t8) # load the couple of numbers 
    la $a2, ($t4) # load the starting adress of the array 
    jal Print 
    b exit 

Print: 
    bge $t1, $a1, return # if $t1 >= $t0 then exit 
    lw $t2, ($a2) #load integer and print 
    move $a0, $t2 
    li $v0, 1  # print the number in the array 
    syscall  


    addu $a2, $a2, 4 #increase the sp 
    addi $t1, $t1, 1 #increase the number printed 

    b Print 

return: 
    jr $ra 

exit: 
li $v0 , 10 # let the code end 
syscall 
+0

不幸的是,我幫不了你。只是想感謝你的漂亮,乾淨的代碼。保持。 – Sparafusile

回答

1

我看到2個錯誤:

1.

#read numbers 
    li $v0, 5 
    syscall 
    move $t2, $v0 

這應該是V0 $,而不是$ A0

2.

move $a1, $t8 
move $a2, $t4 

而不是

la $a1, ($t8) # load the couple of numbers 
la $a2, ($t4) # load the starting adress of the array 
+0

謝謝,這是我的代碼的錯誤。 – Bjorn