我试图打印整数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"
答案 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
进行多项操作。