【发布时间】:2016-10-31 10:14:02
【问题描述】:
我想编写一个使用循环打印星号字符'*'五次的程序,所以我写了这个:
.data
ast: .word '*'
.text
.globl main
main:
la $a0, ast
add $t0, $zero, $zero #counter
loop:
slti $t1, $t0, 5
beq $t1, $zero, exit
li $v0, 1
syscall
addiu $t0, $t0, 1
j loop
exit:
li $v0, 10
syscall
但不是打印五个星号,而是给我这个巨大的数字: 268500992268500992268500992268500992268500992
通过逐步运行,我看到我用于计数器的 $t0 对每个循环都有正确的值(1 到 2 到 3 到 4 到 5)。 使用 slti 和 beq 线,我尝试控制循环,直到计数器达到数字 5。
缺少什么?
【问题讨论】:
-
可能是
syscall。 “巨大的数字”实际上是268500992打印了5次。抱歉,我不知道系统调用。 -
当您应该使用系统调用 #11(打印字符)时,您正在使用系统调用 #1(打印整数)。见:courses.missouristate.edu/KenVollmar/MARS/Help/SyscallHelp.html
-
十六进制数字是
10010000,所以我会试一试,猜你打印的是标签地址,而不是那里的星号字符。 -
@PaulR 我把它改成了 11 但它什么也没打印
-
@WeatherVane 我如何打印星号?