汇编MIPS打印整数和字符串。

问题描述 投票:0回答:2

我想打印整数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"
assembly mips
2个回答
0
投票

可能跟这行有关系吧。

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 循环中的多个事物。

© www.soinside.com 2019 - 2024. All rights reserved.