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