2016-02-04 95 views
0

我試圖打印整數1-10和行之間插入一個空行(實際上是一個字符串說東西),但我的代碼無法正常工作。我在正確的軌道上嗎?大會MIPS打印整數和字符串

.text 
    .align 2 




main: 

lw $s0, 1 
j loop 

Exit: 
    li $v0, 10 
    syscall 
    jr $ra 


loop: 
    beq $v0, 11, Exit 

    li $v0, 1 #call for printing integer is 1 
    syscall 
    addi $a0, $a0, 1 #increment by 1 

    move $s0,$a0 

    li $v0, 4 
    la $a0, out_string 
    syscall 
    move $a0,$s0 


    j loop 




    .data 

out_string:  .asciiz "\n new line\n" 

回答

0

它可能有somethimg做這一行

move $a0,$s0 

它填充$ A0具有未知值

0

注意,當你描述一個問題給他人,只是說一些「工作不正常「不是特別有用。這可能意味着任何事情。

您的代碼存在多個問題。但是,如果我們用無限循環開始,就不難明白爲什麼這會發生:

你有退出循環的條件是$v0 == 11,但$v0值當您執行檢查將永遠是要麼4或者當你的程序開始時有什麼價值:

loop: 
    beq $v0, 11, Exit <-- On the first iteration $v0 will have some "random" value. 
          On subsequent iterations it will have the value 4 because 
          of the li $v0,4 below. 
    ... 
    li $v0, 4 
    ... 
    j loop 

有不止一種方法來解決這個問題。您可以爲循環計數器使用不同的寄存器,也可以將$v0的值保存在堆棧中並稍後恢復。

雖然這不是您的代碼唯一的問題。例如,您也可以在循環中使用$a0以上的內容。