mips 程序集中的嵌套循环

Nested loop in mips assembly

我必须在 mips 程序集中编写以下 C 循环:

for (i=0;i<5;++i)
{
   for (k=0;k<4;++k)
   {
      printf ("*");
   }
 printf ("\n");
}

这是我的代码:

.data
i: .word 0 
k: .word 0 
limit: .word 4 
line: .word 5 
char: .byte '*'
newline: .byte '\n'

.text
.globl main
main:
lw $t0,i
lw $t1,k
lw $t2,limit
lw $t3,line
print:
beq $t0,$t3,exit    
lb $a0,char
li $v0,11
addi $t1,$t1,1
syscall
bne $t1,$t2,print
addi $t0,$t0,1
lb $a0,newline
li $v0,11
syscall
bne $t0,$t3,print
exit:
li $v0,10
syscall

这会按预期打印第一行,但在换行符之后程序进入无限循环并打印星星 constantly.I 我真的很困惑如何处理 assembly.I 中的嵌套循环试图转换C 在 if 条件下循环,它有点帮助,但仍然有问题。 感谢任何帮助。

bne $t0,$t3,print 之前,您必须放置 lw $t1, 0,这样 C 程序中的变量 k 将在循环再次开始之前被初始化为 0。

没有时间仔细检查,但我认为你可以去掉 beq $t0,$t3,exit