我想用循环编写一个程序,打印星号字符'*'五次,所以我写了这个:
.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。
缺少什么?
答案 0 :(得分:2)
您的代码有两个问题。首先在数据声明中,星号应该被标记为 .asciiz 而不是 .word。 .word 数据类型通常用于整数,因为它有 32 位长。 其次,您使用了错误的系统调用来打印 aesterick。 li $v0, 1 用于打印整数。此处正确使用的是 li $v0, 4。
.data
ast: .asciiz "*"
.text
.globl main
main:
la $a0, ast
add $t0, $zero, $zero #counter
loop:
slti $t1, $t0, 5
beq $t1, $zero, exit
li $v0, 4
syscall
addiu $t0, $t0, 1
j loop
exit:
li $v0, 10
syscall
上面的代码打印了 5 *.希望这有帮助。干杯!