我想打印整数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
循环中的多个事物。