[英]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.