我用MIPS写了一个循环,但出于某种原因,它一直无限地运行?
我正在为类编写这段代码,但出于某种原因,即使在我达到循环的极限后,代码仍在无限期地运行,希望有人能看到它为什么这样做。msg2只是一个输入整数的提示,数字是一个数组,$s0是数组中的元素数(例如,如果是6,则在终止之前要求用户输入6个)。(这只是代码片段,所有内容都在主类中)我用MIPS写了一个循环,但出于某种原因,它一直无限地运行?,mips,Mips,我正在为类编写这段代码,但出于某种原因,即使在我达到循环的极限后,代码仍在无限期地运行,希望有人能看到它为什么这样做。msg2只是一个输入整数的提示,数字是一个数组,$s0是数组中的元素数(例如,如果是6,则在终止之前要求用户输入6个)。(这只是代码片段,所有内容都在主类中) 您只显示了代码的一部分,因此,例如,我们无法验证$s0中的内容,或者,print\u loop中的内容。好的,我添加了获取$s0的位置的背景信息,因为现在print\u loop是空的,它只会导致程序退出(li$v0,10
您只显示了代码的一部分,因此,例如,我们无法验证
$s0
中的内容,或者,print\u loop
中的内容。好的,我添加了获取$s0的位置的背景信息,因为现在print\u loop是空的,它只会导致程序退出(li$v0,10)是我现在拥有的内容,而不考虑其他内容,当每次迭代只将$t2
增加1时,不能使用sw$v0,数字($t2)
,因为sw
要求有效地址与字对齐。
numbers: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
la $a0, msg1
li $v0, 4
syscall
li $v0, 5
syscall
move $s0, $v0
slt $t1, $s0, 12
beq $t1, 1, fill_loop
fill_loop:
li $t2, 0
la $a0, msg2 # $a0 = address of msg1
li $v0, 4 # $v0 = 4 --- this is to call print_string()
syscall
li $v0, 5
syscall
sw $v0, numbers($t2)
addi $t2, $t2, 1
beq $t2, $s0, print_loop
j fill_loop