我编写了一个函数max
,该函数采用列表的最大值并将其地址保存在$v0
中,并将值保存在$v1
中。
我还编写了一个函数swap
,以在两个地址之间交换值
另一个功能仅打印$a0
和$a1
中的值。
现在,我将列表中的值从最低到最大排序。
为此,我使用了sort
函数,该函数在$a0
中给出了起始地址,在$a1
中给出了结束地址。
我的想法是:
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