Guest User

Untitled

a guest
Jul 7th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .data
  2. w:        .asciiz "8754830094826456674949263746929"
  3. resultat: .byte 0
  4.  
  5.     .text
  6.     .globl main
  7. main:
  8.     addiu   $sp, $sp, -4
  9.     sw  $ra, 0($sp)
  10.     la  $a0, w
  11.     li  $a1, 31
  12.     jal moda
  13.     la  $s0, resultat
  14.     sw  $v0, 0($s0)
  15.     move    $a0, $v0
  16.     li  $v0, 11
  17.     syscall
  18.     lw  $ra, 0($sp)
  19.     addiu   $sp, $sp, 4
  20.     jr  $ra
  21.  
  22. nofares:
  23.     li  $t0, 0x12345678
  24.     move    $t1, $t0
  25.     move    $t2, $t0
  26.     move    $t3, $t0
  27.     move    $t4, $t0
  28.     move    $t5, $t0
  29.     move    $t6, $t0
  30.     move    $t7, $t0
  31.     move    $t8, $t0
  32.     move    $t9, $t0
  33.     move    $a0, $t0
  34.     move    $a1, $t0
  35.     move    $a2, $t0
  36.     move    $a3, $t0
  37.     jr  $ra
  38.  
  39.  
  40. moda:   # moda(char *vec, int num)
  41.     # $s0 = k, $s1 = max
  42.     addiu $sp, $sp, -60     # reserve 60
  43.     sw $ra, 0($sp)          # add $ra
  44.     sw $s0, 4($sp)          # add $s0
  45.     sw $s1, 8($sp)          # add $s1
  46.     sw $s2, 12($sp)         # add $s2
  47.     sw $s3, 16($sp)         # add $s3
  48.  
  49.     li $s0, 0           # k = 0
  50.     li $t0, 10          # $t0 = 10
  51.  
  52. while:
  53.     bge $s0, $t0, endwhile      # while(k < 10)
  54.     sll $t1, $s0, 2         # $t1 = k * 4
  55.     addu $t1, $sp, $t1      # $t1 = @sp + k*4
  56.     sw $zero, 20($t1)       # hist[k] = 0
  57.     addiu $s0, $s0, 1       # k++
  58.     b while             # continue
  59.  
  60. endwhile:
  61.     li $s1, '0'         # max = '0'
  62.     li $s0, 0           # k = 0
  63.  
  64. while2:
  65.     bge $s0, $a1, endwhile2     # while(k < num)
  66.     move $s2, $a0           # $s2 = @vec
  67.     move $s3, $a1           # $s3 = num
  68.     addiu $a0, $sp, 20      # $a0 = $sp + 20 = @hist
  69.     addu $t0, $s2, $s0      # $t0 = @vec[k]
  70.     lb $t0, 0($t0)          # $t0 = vec[k]
  71.     addiu $a1, $t0, -48     # $a1 = vec[k] - '0'
  72.     addiu $a2, $s1, -48     # $a2 = max - '0'
  73.     jal update          # update(@histo, vec[k] - '0', max - '0')
  74.     addiu $s1, $v0, 48      # $s1 = update(..) + '0'
  75.     move $a0, $s2           # $a0 = @vec
  76.     move $a1, $s3           # $a1 = num
  77.     addiu $s0, $s0, 1       # k++
  78.     b while2            # continue
  79.  
  80. endwhile2:
  81.     move $v0, $s1           # return max
  82.     lw $s3, 16($sp)         # pop $s3
  83.     lw $s2, 12($sp)         # pop $s2
  84.     lw $s1, 8($sp)          # pop $s1
  85.     lw $s0, 4($sp)          # pop $s0
  86.     lw $ra, 0($sp)          # pop $ra
  87.     addiu $sp, $sp, 60      # free 60
  88.  
  89.     jr $ra
  90.  
  91.  
  92. update: # update(int *hist, char i, char imax)
  93.     addiu $sp, $sp, -16     # reserve 12
  94.     sw $ra, 0($sp)          # add $ra
  95.     sw $s0, 4($sp)          # add $s0
  96.     sw $s1, 8($sp)          # add $s1
  97.     sw $s2, 12($sp)         # add $s2
  98.    
  99.     move $s0, $a0           # $s0 = $a0
  100.     move $s1, $a1           # $s1 = $a1
  101.     move $s2, $a2           # $s2 = $a2
  102.  
  103.     jal nofares         # nofares()
  104.  
  105.     move $a0, $s0           # $a0 = $s0
  106.     move $a1, $s1           # $s1 = $a1
  107.     move $a2, $s2           # $s2 = $a2
  108.    
  109.     sll $t0, $a1, 2         # $t0 = i * 4
  110.     addu $t0, $a0, $t0      # $t0 = @hist + i*4 = @hist[i]
  111.     lw $t1, 0($t0)          # $t1 = hist[i]
  112.     addiu $t1, $t1, 1       # $t1 = hist[i] + 1
  113.     sw $t1, 0($t0)          # hist[i]++
  114.  
  115.     sll $t0, $a2, 2         # $t0 = imax * 4
  116.     addu $t0, $a0, $t0      # $t0 = @hist + imax*4 = @hist[imax]
  117.     lw $t0, 0($t0)          # $t0 = hist[imax]
  118.    
  119.     ble $t1, $t0, else      # if(hist[i] > hist[imax])
  120.     move $v0, $a1           # return i
  121.     b endif
  122. else:
  123.     move $v0, $a2           # return imax
  124.  
  125. endif:
  126.     lw $s2, 12($sp)         # pop $s2
  127.     lw $s1, 8($sp)          # pop $s1
  128.     lw $s0, 4($sp)          # pop $s0
  129.     lw $ra, 0($sp)          # pop $ra
  130.     addiu $sp, $sp, 16      # free 16
  131.  
  132.     jr $ra
Add Comment
Please, Sign In to add comment