Code
.data
max: .word 24
FPNum: .word 0x0, 0xff800000, 0x7f800000 # Float-point numbers 0, -Infty and Infty
temp: .word 1
num: .space 96
input1: .asciiz "Enter a number:\n"
output: .asciiz "The array contains the following: \n"
.text
.globl main
main:
la $t0, FPNum
lwc1 $f10, ($t0) # $f10=0.0
lw $t1, temp # loop counter
lw $t2, max # upper bound
la $t0, num # address of array
addi $t5, $zero, 0
addi $t6, $zero, 0
Loop:
# print input prompt
la $a0, input1
li $v0, 4
syscall
# get value from the user
li $v0, 6
syscall
c.eq.s $f0, $f10
bc1t prepareSort
addi $t5, $t5, 1
# move user provided value from $f0 to array
s.s $f0, 0($t0)
# move to the next position in the array, increment loop counter
addi $t0, $t0, 4
addi $t1, $t1, 1
ble $t1, $t2, Loop
prepareSort:
# restore loop counter, and array address for printing
lw $t1, temp
la $t0, num
Sort:
bgt $t4, $t5, prepare
addi $t4, $t4,1
l.s $f1, 0($t0)
l.s $f3, 4($t0)
#addi $t0, $t0, 4
c.lt.s 1,$f1, $f3
bc1f swap
#addi $t0, $t0, 4
ble $t4, $t5, Sort
swap:
la $a0, output
li $v0, 4
syscall
s.s $f1, 4($t0)
s.s $f3, 0($t0)
addi $t0, $t0, 4
#j prepareSort
prepare:
# restore loop counter, and array address for printing
lw $t1, temp
la $t0, num
# print output prompt
la $a0, output
li $v0, 4
syscall
j print_loop
print_loop:
# print number from the array
l.s $f12, 0($t0)
li $v0, 2
syscall
# print space
la $a0, 32
li $v0, 11
syscall
# increment loop counter and move to next value
addi $t1, $t1, 1
addi $t0, $t0, 4
ble $t1, $t5, print_loop
Ignore some comments, I added it to help me remember certain things.