簡體   English   中英

無限陣列循環 MIPS

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM