Я написал функцию max
, которая принимает максимальное значение списка и сохраняет его адрес в $v0
, а значение в $v1
.
Я также написал функцию swap
для обмена значениями между двумя адресами
и другая функция, которая просто печатает значения в $a0
и $a1
.
Теперь я отсортирую значения в списке от минимального до максимального значения.
Для этого я использую функцию sort
, которую я дал начальный адрес в $a0
и конечный адрес в $a1
.
Моя идея:
- Я использую
max
- Я положил адрес max в
$a0
- Я меняю значения между
$a0
и $a1
- Я вставил
$a0
начальный адрес list1
снова
Здесь моя проблема. Я пробовал так много разных вещей, но я не понимаю, и я действительно не понимаю, в чем проблема.
Я хочу заменить адрес внутри $a1, 4
затем снова сортировать меньший список
пока адреса в $a0 == $a1
Перейти к отсортированному.
.data
list: .word 9, 8, 7, 3, 6, -4, 3, -1
list1: .word 2, 5, 33, 4, 77, 22, 345, 88, 7, 99
list2: .word 3, 5, 444, -4, 357, 23452, 1, -4588, 45, 38
list3: .word 3, 345, 33, -43, -37, -34522, 1, -88, 5, 8
n: .asciiz "\n"
.text
main:
la $a0 list
la $a1 list+28
jal print
jal swap
jal print
#######--------------------------------Start searching biggest Value in list1 list2 list3-----------------#########################
la $a0 list1
la $a1 list1+120
jal max
add $a0 $v1 $zero
li $v0 1
syscall
la $a0 n
li $v0 4
syscall
###-----sort---####
la $a0 list1
la $a1 list1+36
j sort
sorted:
li $v0 10
syscall
swap:
lw $t0 ($a0)
lw $t1 ($a1)
sw $t0 ($a1)
sw $t1 ($a0)
jr $ra
max:
lw $t0 ($a0)
la $v0 ($a0)
lw $v1 ($a0)
do:
lw $t4 ($a0)
slt $t1 $t0 $t4
bgtz $t1 change
la $a0 4($a0)
beq $a0 $a1 finish
j do
change:
lw $t0 ($a0)
la $v0 ($a0)
lw $v1 ($a0)
la $a0 4($a0)
j do
finish:
jr $ra
print:
la $t0 ($a0)
lw $a0 ($a0)
li $v0 1
syscall
la $a0 n
li $v0 4
syscall
lw $a0 ($a1)
li $v0 1
syscall
la $a0 n
li $v0 4
syscall
la $a0 ($t0)
jr $ra
sort:
jal max
move $a0 $v0
jal swap
jal print
la $a0 list1
sub $a1 4
beq $a0 $a1 sorted
j sort