装配MIPS:使用循环打印字符五次

时间:2016-10-31 10:14:02

标签: assembly mips

我想用循环编写一个程序,打印星号字符'*'五次,所以我写了这个:

.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。

缺少什么?

1 个答案:

答案 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 *.希望这有帮助。干杯!