Advertisement
Guest User

Untitled

a guest
Nov 11th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. swap:
  2.         lw      $t0, $a0            # load args into t0, t1
  3.         lw      $t1, $a1
  4.         sw      $t0, $a1            # store t0, t1 in a1, a0
  5.         sw      $t1, $a0
  6.  
  7. comp_largest:
  8.         add     $v0, $zero, $a2     # res=a2
  9.         slt     $t5, $a0, $a1
  10.         beq     $t5, $zero, exit_comp
  11.  
  12.         sll     $t3, $a0, 2         # t3 = a0*4
  13.         add     $t3, $t3, $a3       # t3 = loc of a0*4 in arr
  14.         lw      $t3, 0($t3)         # t3 = item in arr + a0*4
  15.  
  16.         sll     $t4, $a2, 2         # t4 = a2*4
  17.         add     $t4, $t4, $a3
  18.         lw      $t4, 0($t4)         # t4 = item in arr + a2*4
  19.  
  20.         slt     $t5, $t4, $t3
  21.         beq     $t5, $zero, exit_comp
  22.         add     $v0, $zero, $a0     # if t4 < t3, res = a0
  23. exit_comp: j    $ra
  24.  
  25. heapify:
  26.         addi    $sp, $sp, -16       # room for 4 vars
  27.         sw      $ra, 12($sp)        # store saved vars
  28.         sw      $s2, 8($sp)
  29.         sw      $s1, 4($sp)
  30.         sw      $s0, 0($sp)
  31.  
  32.         add     $s0, $zero, $a0     # store args in saved vars
  33.         add     $s1, $zero, $a1
  34.         add     $s2, $zero, $a2
  35.  
  36.         add     $t0, $zero, $s2     # t0 = largest = i
  37.  
  38.         add     $t1, $zero, $s2
  39.         sll     $t1, $t1, 1
  40.         addi    $t1, $t1, 1         # t1 = i*2 + 1
  41.  
  42.         add     $t2, $zero, $s2
  43.         sll     $t2, $t2, 1
  44.         addi    $t2, $t2, 2         # t2 = i * 2 + 2
  45.  
  46.         add     $a0, $zero, $t1     # a0 = t1
  47.         add     $a1, $zero, $s1     # a1 = s1
  48.         add     $a2, $zero, $t0     # a2 = t0 = largest
  49.         add     $a3, $zero, $s0     # a3 = s0 = array
  50.  
  51.         j comp_largest
  52.  
  53.         add     $a0, $zero, $t2     # a0 = t2
  54.         add     $a2, $zero, $v0     # a2 = v0 = largest = t0 or t1
  55.  
  56.         j comp_largest              # largest in $v0
  57.  
  58.         beq     $s2, $v0, exit      # if largest didn't change, exit
  59.  
  60.        sll     $a0, $s2, 2         # a0 = s2 * 4
  61.        add     $a0, $a0, $s0       # a0 = location of s2*4 in arr
  62.  
  63.        sll     $a1, $v0, 2         # a1 = v0 * 4
  64.        add     $a1, $a1, $s0       # a1 = location of v0*4 in arr
  65.  
  66.        j swap
  67.  
  68.        add     $a0, $zero, $s0     # set up args for recursive call
  69.        add     $a1, $zero, $s1
  70.        add     $a2, $zero, $v0
  71.  
  72.        j       heapify
  73.  
  74. exit:   lw      $s0, 0($sp)         # get variables from stack
  75.        lw      $s1, 4($sp)
  76.        lw      $s2, 8($sp)
  77.        lw      $ra, 12($sp)
  78.        addi    $sp, $sp, 16        # pop 4 items
  79.        j       $ra
  80.  
  81. heapsort:
  82.        addi    $sp, $sp, -16       # space for 4 items
  83.        sw      $ra, 12($sp)        # store ra, s0, s1, s2
  84.        sw      $s2, 8($sp)
  85.        sw      $s1, 4($sp)
  86.        sw      $s0, 0($sp)
  87.  
  88.        add     $s0, $zero, $a0
  89.        add     $s1, $zero, $a1
  90.  
  91.        add     $s2, $zero, $s1     # s2 = n
  92.        srl     $s2, $s2, 1         # s2 = n / 2
  93.        addi    $t0, $t0, -1        # s2 = n / 2 - 1
  94.  
  95. loop1:  slt     $t1, $zero, $s2     # 0 < s2
  96.        beq     $t1, $zero, exit1   # if s2 < 0 exit
  97.        add     $a0, $zero, $s0     # args for heapify
  98.        add     $a1, $zero, $s1
  99.        add     $a2, $zero, $s2
  100.        j       heapify
  101.        addi    $s2, $s2, -1        # s2 -= 1
  102.        j       loop1
  103.  
  104. exit1:  add     $s2, $zero, $s1     # s2 = n
  105.        addi    $s2, $s2, -1        # s2 = n - 1
  106.  
  107. loop2:  slt     $t1, $zero, $s2     # 0 < s2
  108.        beq     $t1, $zero, exit2   # if s2 < 0 exit
  109.  
  110.        add     $a0, $zero, $s0     # location of first item of arr
  111.  
  112.        add     $a1, $zero, $s2     # a1 = s2
  113.        sll     $a1, $a1, 2         # a1 = s2 * 4
  114.        add     $a1, $a1, $s0       # location of s2th item of arr
  115.  
  116.        j       swap
  117.  
  118.        add     $a0, $zero, $s0     # args for heapify
  119.        add     $a1, $zero, $s2
  120.        add     $a2, $zero, $zero
  121.  
  122.        j       heapify
  123.  
  124.        addi    $s2, $s2, -1        # s2 -= 1
  125.        j       loop2
  126.  
  127. exit2:  lw      $s0, 0($sp)         # get vars from stack
  128.        lw      $s1, 4($sp)
  129.        lw      $s2, 8($sp)
  130.        lw      $ra, 12($sp)
  131.        addi    $sp, $sp, 16        # pop 4 items
  132.        j       $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement