簡體   English   中英

匯編 MIPS 打印整數和字符串

[英]Assembly MIPS printing integers and strings

我正在嘗試打印整數 1-10 並在行之間插入一個空行(實際上是一個表示某些內容的字符串),但我的代碼無法正常工作。 我在正確的軌道上嗎?

    .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"

它可能與這條線有關

move $a0,$s0

它用未知值填充 $a0

請注意,當您向其他人描述問題時,僅僅說“工作不正常”並沒有特別的幫助。 這幾乎意味着任何事情。

您的代碼存在多個問題。 但是如果我們從無限循環開始,就不難看出為什么會發生這種情況:

退出循環的條件是$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用於不止一件事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM