汇编MIPS打印整数和字符串

时间:2016-02-04 22:35:48

标签: assembly mips

我试图打印整数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"

2 个答案:

答案 0 :(得分:0)

这可能与此行

有些关系
move $a0,$s0

它使用未知值填充$ a0

答案 1 :(得分: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进行多项操作。

相关问题