.data
spaceChar: .asciiz " "
#array of 26 elements 1,0,0,0,0 elements = 5*5
array: .word 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9
size: .word 25
endl: .asciiz "\n"
.text
main:
lw $t3, size
la $t1, array # get array address
li $t2, 0 # set loop counter
print_loop:
beq $t2, $t3, print_loop_end # check for array end
li $t5,4 #at 4th element I want next line
beq $t5,$t2,newline #checking..
lw $a0, ($t1) # print value at the array pointer
li $v0, 1
syscall
la $a0, spaceChar # Display a space character between elements
li $v0, 4
syscall
addi $t2, $t2, 1 # advance loop counter
addi $t1, $t1, 4 # advance array pointer
j print_loop # repeat the loop
print_loop_end:
li $v0,10
syscall
newline:
la $a0,endl
li $v0,4
syscall
j print_loopI试图在MIPS中打印一个5*5矩阵这是mips中的一个由25个元素组成的一维数组,我正在遍历print_loop中的元素,当它到达我想要做的第四个元素时,但是当我运行这个(MARS 4.5)时,我不知道我在做什么--请帮帮忙
发布于 2014-11-07 23:28:42
简短回答:
你在换行线上无穷无尽地循环。
长答案:
问题是
beq $t5, $t2, newline #checking一旦您的计数器得到4,它就会一直转到新行。
newline:
la $a0, endl
li $v0, 4
syscall
j print_loop然后返回到print_loop
print_loop:
beq $t2, $t3, print_loop_end #check for array end
li $t5, 4 #at 4th element I want next line
beq $t5, $t2, newline #checking啊哦。我们又回到我们的地盘了!如果您使用逐步调试器(绿色箭头的绿色箭头旁边的绿色箭头运行),您将看到打印第一行,然后无限打印换行符。在我看来,你可以在那之后再加一个标签。
在未来,我建议对每一行进行注释,并将代码划分为完成目标的代码块。例如:
# print value at the array pointer
lw $a0, ($t1) # print array[index]
li $v0, 1 # syscall: print integer
syscall
# print space
la $a0, spaceChar # print character " "
li $v0, 4 # syscall: print string
syscall这很乏味,但当一切都是用伪代码编写时,它将帮助您发现but。(另外,如果有人对堆栈溢出问题提出MIPS问题,您希望在几年后回答,它会帮助您记住命令的作用!:P)
哦,你可以
beq $t2, 4, newline而不是
li $t5, 4
beq $t5, $t2MIPS可能很棘手。慢慢来,把一切都记录下来。祝好运!
https://stackoverflow.com/questions/26811394
复制相似问题