我的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.请帮助,谢谢。
答案 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作为计数器是真正的解决方案。