Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text
- j main # Jump to main-routine
- .data
- str1: .asciiz "Insert the array size \n"
- str2: .asciiz "Insert the array elements,one per line \n"
- str3: .asciiz "The sorted array is : \n"
- str5: .asciiz "\n"
- .text
- .globl main
- main:
- la $a0, str1 # Print of str1
- li $v0, 4 #
- syscall #
- li $v0, 5 # Get the array size(n) and
- syscall # and put it in $v0
- move $s2, $v0 # $s2=n
- sll $s0, $v0, 2 # $s0=n*4
- sub $sp, $sp, $s0 # This instruction creates a stack
- # frame large enough to contain
- # the array
- la $a0, str2 #
- li $v0, 4 # Print of str2
- syscall #
- move $s1, $zero # i=0
- for_get: bge $s1, $s2, exit_get # if i>=n go to exit_for_get
- sll $t0, $s1, 2 # $t0=i*4
- add $t1, $t0, $sp # $t1=$sp+i*4
- li $v0, 5 # Get one element of the array
- syscall #
- sw $v0, 0($t1) # The element is stored
- # at the address $t1
- la $a0, str5
- li $v0, 4
- syscall
- addi $s1, $s1, 1 # i=i+1
- j for_get
- exit_get: move $a0, $sp # $a0=base address af the array
- move $a1, $s2 # $a1=size of the array
- jal selectionSort # isort(a,n)
- # In this moment the array has been
- # sorted and is in the stack frame
- la $a0, str3 # Print of str3
- li $v0, 4
- syscall
- move $s1, $zero # i=0
- for_print: bge $s1, $s2, exit_print # if i>=n go to exit_print
- sll $t0, $s1, 2 # $t0=i*4
- add $t1, $sp, $t0 # $t1=address of a[i]
- lw $a0, 0($t1) #
- li $v0, 1 # print of the element a[i]
- syscall #
- la $a0, str5
- li $v0, 4
- syscall
- addi $s1, $s1, 1 # i=i+1
- j for_print
- exit_print: add $sp, $sp, $s0 # elimination of the stack frame
- li $v0, 10 # EXIT
- syscall
- swap:
- #a0 = v[]
- #a1 = i
- #a2 = j
- #s0 = i * 4
- #s0 = address v[i]
- #t0 = temp1
- #s2 = j* 4
- #s2 = v[j]
- #t1 = temp2
- addi $sp, $sp, -20 #make room on stack for 4
- sw $s0, 0($sp) #save on stack
- sw $s1, 4($sp)
- sw $s2, 8($sp)
- sw $s3, 12($sp)
- sw $ra, 16($sp)
- sll $s0, $a1,2 #a1 = i en 2 is *4
- add $s0,$s0,$a0 #s0 = address v[i]
- lw $t0,0($s0)
- sll $s2,$a2,2
- add $s2,$s2,$a0 #s2 = v[j]
- lw $t1,0($s2)
- move $s0, $t1 #$s0 = v[i]
- move $s1, $t0 #s0 = v[j]
- lw $s0,0($sp) #restore from stack
- lw $s1,4($sp)
- lw $s2,8($sp)
- lw $s3,12($sp)
- lw $ra, 16($sp)
- addi $sp, $sp, 20 # remove callframe from stack
- jr $ra
- endSwap:
- indexMinimum:
- #s0 = mini
- #s2 = min
- #s3 = i
- #s4 = v
- #s5 = first
- #s6 = last
- addi $sp, $sp, -28 #make room on stack for 6
- sw $s0, 0($sp) #save on stack
- sw $s2, 8($sp)
- sw $s3, 12($sp) #s1 VERGETEN
- sw $s4, 16($sp)
- sw $s5, 20($sp)
- sw $s6, 4($sp)
- sw $ra,24($sp)
- move $s0,$a1
- move $s5,$a1
- move $s6,$a2
- move $s4,$a0
- sll $s5,$s5,2 #first*4
- add $t0,$s4,$s5
- lw $s2,0($t0)
- for1:
- li $s3,0
- forCompare1:
- slt $t1,$s3,$s6
- beq $t1,1,forBody1
- beq $s3,$s3,forBody1
- j endFor1
- forBody1:
- sll $t1,$s3,2 #i * 4
- add $t1,$s4,$t1 #t1 = address v[i]
- lw $t2,0($t1) #t2 = value of v[i]
- blt $t2,$s2,forBody1_2
- j endFor1
- forBody1_2:
- move $s0,$s3
- move $s2,$t2
- endFor1:
- addi $s3,$s3,1
- move $v0,$s0
- lw $s0,0($sp) #restore from stack
- lw $s2, 8($sp)
- lw $s3, 12($sp) #s1 VERGETEN
- lw $s4, 16($sp)
- lw $s5, 20($sp)
- lw $s6, 4($sp)
- lw $ra,24($sp)
- addi $sp, $sp, 28 # remove callframe from stack
- jr $ra
- selectionSort:
- #s0 = a
- #s1 = length
- #s2 = i
- #s3 = mini
- addi $sp, $sp, -20 #make room on stack for 6
- sw $s0, 0($sp) #save on stack
- sw $s1, 4($sp)
- sw $s2, 8($sp)
- sw $s3, 12($sp)
- sw $ra,24($sp)
- move $s0,$a0
- move $s1,$a1
- for2:
- li $s2,0
- forCompare2:
- addi $t0,$s1,-1
- blt $s2,$t0,forBody2
- j endFor2
- forBody2:
- move $a0,$s0
- move $a1,$s2
- move $a2,$t0
- jal indexMinimum
- move $s3,$v0
- move $a2,$s3
- jal swap
- addi $s2,$s2,1 #i = i + 1
- j forCompare2
- endFor2:
- lw $s0, 0($sp)
- lw $s1, 4($sp)
- lw $s2, 8($sp)
- lw $s3, 12($sp)
- lw $ra,24($sp)
- addi $sp, $sp, 20
- jr $ra
- endselectionSort:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement