我的mips代码不会打印出max和min

时间:2016-04-25 01:18:51

标签: assembly

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

.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 个答案:

答案 0 :(得分: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

是的,它有效,感谢Gerardo我相信他的名字是为了使用cont的想法。但最后我相信使用$ t4作为计数器是真正的解决方案。