2016-04-25 92 views
0

我的mips代码编译并运行,但问题是它不会输出我想要的代码。该代码应该可以找到8个整数数组的最大值和最小值。有人可以看看谢谢。我的mips代码不会输出最大和最小

.data 
    X: .word 1, 2, 3, 4, 5, 6, 7, 8 
    Max: .asciiz "Max: " 
    Min: .asciiz "Min: " 
    Space: .asciiz " " 
.text 
.globl main 
main: 
    la $t0, X 
    lw $s0, 0($t0) #Sets Max to first value in array 
    lw $s1, 0($t0) #Sets Min to first value in array 
    addi $t4, $0, 0 #Sets the counter to 0 
li $t1, 0 #Index for the array 
    lw $t2, X($t1) 
lw $t3, X($t1) 

loop: 
    bge $t0, 8, EndLoop 
    bgt $t2, $s0, SetMax 
    blt $t3, $s1, SetMin 
    addi $t1, $t1, 4 
    addi $t0, $t0, 1 
    j loop 


SetMax: 
    move $s0, $t2 
    j loop 
SetMin: 
    move $s1, $t3 
    j loop 
EndLoop: 
    li $v0 4 
    la $a0 Max 
    syscall 

    li $v0 1 
    la $a0 ($s0) 
    syscall 

    li $v0 4 
    la $a0 Space 
    syscall 

    li $v0 4 
    la $a0 Min 
    syscall 

    li $v0 1 
    la $a0 ($s1) 
    syscall 

    li $v0 10 
    syscall 

该代码打印出1的最大值和最小值1.请帮助,谢谢。

回答

1

我想通了。我意识到我没有使用正确的寄存器作为计数器。这是更新的代码。

.data 
    X: .word 1, 2, 3, 4, 5, 6, 7, 8 
    Max: .asciiz "Max: " 
    Min: .asciiz "Min: " 
    Space: .asciiz " " 
.text 
.globl main 
main: 
    la $t0, X 
    lw $s0, 0($t0) #Sets Max to first value in array 
    lw $s1, 0($t0) #Sets Min to first value in array 
    addi $t4, $0, 0  #Sets the counter to 0 
    li $t1, 0 #Index for the array 


loop: 
    bge $t4, 8, EndLoop 
    lw $t2, X($t1) 
    bgt $t2, $s0, SetMax 
    blt $t2, $s1, SetMin 
cont: 
    addi $t1, $t1, 4 
    addi $t4, $t4, 1 
    j loop 


SetMax: 
    move $s0, $t2 
    j cont 
SetMin: 
    move $s1, $t2 
    j cont 
EndLoop: 
    li $v0 4 
    la $a0 Max 
    syscall 

    li $v0 1 
    la $a0 ($s0) 
    syscall 

    li $v0 4 
    la $a0 Space 
    syscall 

    li $v0 4 
    la $a0 Min 
    syscall 

    li $v0 1 
    la $a0 ($s1) 
    syscall 

    li $v0 10 
    syscall 

是的,谢谢杰拉尔多我相信他的名字是为了使用cont。但最终我认为使用$ t4作为柜台是真正的解决方案。