[英]Infinite array loop MIPS
所以我是 MIPS 的新手,我正在尝试在 Assembly MIPS 中构建一个程序,它可以找到数组中的最大值:
.data
A: .word 11 100 3 5 8 13 1 16 #array of integers
N: .word 8 # array length
output_max: .asciiz "The max value is: "
.text
.globl main
main:
la $a0 N
la $a1 A
jal max
move $s0 $v0
li $v0 4
la $a0 output_max
syscall
li $v0 1
move $a0 $s0
syscall
j exit
exit:
li $v0 10
syscall
max:
move $t0 $a0
move $t1 $a1
lw $v0 0($t1)
li $t2 0
j maxLoop
maxLoop:
addi $t2 $t2 1
beq $t2 $t0 maxEnd
addi $t1 $t1 4
lw $t3 0($t1)
slt $t4 $v0 $t3
beq $t4 1 changeMax
j maxLoop
changeMax:
move $v0 $t3
j maxLoop
maxEnd:
jr $ra
最大值 function 应返回输入数组中的最大值。 所以编译后就进入了无限循环。 完全看不出问题出在哪里。。
问题是您正在使用N
的地址而不是N
的值运行循环。 main
的第一行将N
的地址加载到$a0
中,这在您的max
function 中变为$t0
。 但是,然后您使用该地址,就好像它在您的循环中的N
值(即 8)与beq $t2 $t0 maxEnd
。
要么在开头直接将值加载到$a0
中:
main:
li $a0 8 # Length of A
或者首先取消引用max
中的参数:
max:
lw $t0 0($a0) # Get value of N from pointer to N
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.