汇编 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 *。希望这有所帮助。干杯!
我想编写一个使用循环打印星号字符“*”五次的程序,所以我这样写:
.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 *。希望这有所帮助。干杯!