mips程序集中的嵌套循环

时间:2017-11-02 16:10:16

标签: c assembly mips

我必须在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

这按照预期打印第一行但是在换行符之后程序进入无限循环并不断打印星星。我真的很困惑如何在程序集中处理嵌套循环。我尝试在条件和时转换C循环它有所帮助,但仍有问题。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

bne $t0,$t3,print之前,你必须将lw $t1, 0这样的变量k从C程序中初始化为0,然后再循环开始。

没时间仔细检查它,但我认为你可以摆脱beq $t0,$t3,exit