.data
提示2:.asciiz“请一一输入元素:”
提示3:.asciiz“数组的排序如下:”
提示4:.asciiz“-程序运行完毕-”
str1:.asciiz“,”
newLine:.asciiz“ \ n”
.text 主要: #分配动态内存
sll $ a0 $ v0 2#sll执行$ a0 = $ v0 x 2 ^ 2
li $ v0 9#9是工作所在的服务(sbrk)的系统代码 #保存用于打印 交换: #move $ t5,$ zero#它是C语言中的temp变量
move $ t4,$ a1#t4现在是堆的基地址
sll $ t6,$ a3,2#s1是给定的k
添加$ t6,$ t4,$ t6#堆地址+ k * 4
lw $ t3,0($ t6)#kone堆
lw $ t5,4($ t6)#kone k + 1堆
sw $ t5,0($ t6)
sw $ t3,4($ t6)
jr $ ra 排序: #移动$ s0,$ zero#i = t0
移动$ s4,$ a1#堆的基地址
addi $ t5,$ a2,-1#meghdare i 我真的不知道哪里出了问题,请帮助我... addi $sp,$sp,-24
sw $ra,0($sp)
sw $s4,4($sp)
sw $a2,8($sp)
sw $s3,12($sp)
sw $s0,16($sp)
sw $s2,20($sp)
# read n from console
li $v0 5
syscall
move $a2 $v0 #tagghiir t0 be a2 (n)
syscall#分配动态内存move $a1 $v0 #t2 saved address of heap #taghiir t2 to a1
li $v0, 4 # $system call code for print_str
la $a0, prompt2 # $address of string to print
syscall
move $t1 $zero
move $t4,$a1
inputLoop:
bge $t1 $a2 exit1
# read in and store int
li $v0 5
syscall
sw $v0 0($t4)
addi $t1 $t1 1
addi $t4 $t4 4
li $v0, 4 # $system call code for print_str
la $a0, newLine # $address of string to print
syscall
j inputLoop
exit1:
jal sort
li $v0, 4 # $system call code for print_str
la $a0, prompt3 # $address of string to print
syscall
move $t3,$zero
move $t4 ,$a1
outputLoop:
bge $t3 $a2 exit2
#inaro azoon yki copy krdm
lw $t6, 0($t4)
li $v0, 1
move $a0, $t6
syscall
# read in and store int
addi $t3 $t3 1
addi $t4 $t4 4
blt $t4,$a1 ,comma
# bne $t5,$zero,comma
comma:
li $v0, 4 # $system call code for print_str
la $a0, str1 # $address of string to print
syscall
j outputLoop
exit2:
li $v0, 10
syscall #for finishing the program
move $a3,$a3
move $a1,$s4
move $s2,$zero #its the flag
while:
addi $s2,$s2,1
move $a3,$zero #j #taghiir s1 be a3 (haman j va k
forLoop:
bge $a3,$t5,outOfLoop
sll $t6,$a3,2 #j
add $t1,$t6,$a1 #v+j
lw $t7,0($t1) #t7=heap[j]
lw $t8,4($t1) #t8=heap[j+1]
blt $t7,$t8,outOfIf
move $s4,$a1
move $s3,$a3
jal swap
addi $s2,$s2,-1
outOfIf:
addi $a3,$a3,1 #j++
outOfLoop:
addi $t5,$t5-1 #i--
bgt $s2,$zero,exit_outter #if a>=b break
ble $t5,$zero,exit_outter #if b=< c break
j while
exit_outter:
lw $ra,0($sp)
lw $s4,4($sp)
lw $a2,8($sp)
lw $s3,12($sp)
lw $s0,16($sp)
lw $s2,20($sp)
addi $sp,$sp,24
jr $ra
0 个答案:
没有答案