MIPS не может изменить значение в процедуре - PullRequest
0 голосов
/ 06 октября 2018

Привет, у меня есть эта программа, которая должна находить суммы, мин и макс из списка чисел, введенных пользователем.Он работает нормально, пока я не вызову функцию blt или bgt. В этот момент qtspim окрашивает группу регистров в красный цвет.После тестирования на ошибки я решил, что это потому, что я изменил значение регистра, поэтому я добавил пространство стека, но он все еще делает то же самое, и я пытался что-то вечно, и ничего не получалось.Извините, я новичок, вот мой код

.data
intro: .asciiz "Enter integer values, one perline, terminated by a negative value.\n"
total: .asciiz "\nSum: "
minn: .asciiz "\nMin: "
maxx: .asciiz "\nMax: "
mean: .asciiz "\nMean: "

.align 2
ARRAY: .space 400
.align 2


.text
.globl main

####################################
#$s1 = input counter
#$s2 = array address

#$t1 = min
#$t2 = max
#$s6 = sum
##########################################

main:
la  $s2, ARRAY  #array address
li  $s6, 0      #sum

lui $t1, 0x7fff #min
ori $s3, $s3, 0xffff
li  $t2, 0      #max

li  $v0, 4      #ask user for numbers
la  $a0, intro
syscall


LOOP:   
    li  $v0, 5      #collect user input
    syscall

move    $s0, $v0
blt     $s0, $zero, DONE

addiu   $s1, $s1, 1 #add to counter
sw  $s0, 0($s2) #store number in array
addiu   $s2, $s2, 4 #get next array space   

add $s6, $s6, $s0   #adding total sum
blt $s0, $t1, min
bgt $s0, $t2, max


j   LOOP

DONE:
li  $v0, 4      #show sum
la  $a0, total
syscall

li  $v0, 1
move    $a0, $s6
syscall

li  $v0, 4      #show min
la  $a0, minn
syscall

li  $v0, 1
move    $a0, $t1
syscall


jr $ra


min:    addi    $sp, $sp, -4
    sw  $t1, 0($sp)
    move    $t1, $s0
    lw  $t1, 0($sp)
    addi    $sp, $sp, 4
    jr $ra


max:    addi    $sp, $sp, -4
    sw  $t2, 0($sp)
    move $t2, $s0
    lw  $t2, 0($sp)
    addi    $sp, $sp, 4
    jr $ra
...