finden Ich habe gesehen, dass diese Frage bereits gestellt wurde, aber ich versuche zu finden, warum diese Logik nicht funktioniert. Ich habe diesen Code ausprobiert, es in C++ übersetzt und es funktioniert gut. Aber hier wird das letzte Element des Arrays gedruckt. Hilfe?Min Element des Arrays in MIPS
.data
Array: .word 500 100 250 150
Len: .word 4
Sum: .word 0
Average: .word 0
NewLine: .asciiz "\n"
Min: .word 9999
Max: .word -9999
.text
la $t0, Array # Base address
li $t1, 0 # i = 0
lw $t2, Len # $t2 = Len
li $t3, 0 # Sum = 0
li $t5, 0 # Average = 0
la $t6, NewLine
lw $t7, Min # $t7 = min
lw $t8, Max # $t8 = max
while:
lw $t4, ($t0) # Array[i]
add $t3, $t3, $t4 # sum += Array[i]
blt $t4, $t7, else # If first element is < 9999, go to else
else: move $t7, $t4 # Min = Array[i]
add $t1, $t1, 1 # Increment index by 1
add $t0, $t0, 4 # Go to next array element
blt $t1, $t2, while # Do this cycle till i < $t2 (length)
sw $t3, Sum
div $t5, $t3, $t2 # Calculate avg.
sw $t5, Average
# Print sum
li $v0, 1
move $a0, $t3
syscall
# Print new line
li $v0, 4
move $a0, $t6
syscall
# Print average
li $v0, 1
move $a0, $t5
syscall
# Print new line
li $v0, 4
move $a0, $t6
syscall
# Print min element
li $v0, 1
move $a0, $t7
syscall
Sorry, ich verstehe nicht, was Sie mit dem Code erreichen (Ich bin Anfänger bei MIPS). Wenn ich blt $ t7, $ t4, sonst, was soll ich dann in "else" Label schreiben? Ich übersetze meinen Code wie folgt: Wenn 500 <9999 dann min ist 500, Wenn 100 <500 dann ist min 100, und wenn 250 <100 dann geht die Verzweigung nicht zu else und min bleibt 100. Ich nicht Sehen Sie das Problem hier in dieser Aussage? – illuminated
Denke nicht "anders" wie "sonst" in C (oder einer anderen) Sprache. Es ist nur ein Label, Sie können es "myelse" umbenennen und nichts wird geändert. Wenn Sie Ihren Code in C konvertieren, ist es wie folgt: if (t4
solohane
Ja, aber dies speichert nicht $ t4 (das kleinste Element) in $ t7. – illuminated