汇编 MIPS:使用循环打印一个字符五次

Assembly MIPS: Printing a character five times using loops

我想编写一个使用循环打印星号字符“*”五次的程序,所以我这样写:

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

缺少什么?

您的代码有两个问题。首先,在数据声明中,星号应标记为 .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 *。希望这有所帮助。干杯!