Advertisement
emanuvalza99

Untitled

Nov 19th, 2020
1,707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2. A: .word 24 6 20 10 7 21 4 9
  3. N: .word 8
  4.  
  5. .text
  6. .globl main
  7.  
  8. main:
  9.     la $a0, A           # $a0 = A
  10.     la $t0, N
  11.     lw $a1, 0($t0)      # $a1 = n
  12.     # Alloco lo stack
  13.     addi $sp, $sp, -12
  14.     # Salvo i registri sullo stack
  15.     sw $ra, 8($sp)
  16.     sw $a0, 4($sp)
  17.     sw $a1, 0($sp)
  18.     jal find_max        # find_Max(A,n)
  19.     # Fine procedura
  20.     #Dealloco lo stack e carico $ra
  21.     lw $ra, 8($sp)
  22.     addi $sp, $sp, 12
  23.     # Print MAX
  24.     add $a0, $zero, $v0
  25.     li $v0, 1
  26.     syscall
  27.     jr  $ra             # return
  28.  
  29.  
  30.  
  31. find_max:
  32.     bne $a1, 1, else        # is n != 1 goto else
  33.     lw $v0, 0($a0)          # $v0 = A[0]
  34.     jr $ra                 
  35. else:
  36.     addi $a1, $a1, -1       #  n = n-1
  37.     sll $t0, $a1, 2         # $t0 = (n-1)*4
  38.     add $t0, $a0, $t0       # $t0 = &A[n-1]
  39.     lw $a0, 0($t0)          # $a0 = A[n-1]
  40.     # Alloco lo stack per salvare i registri $a e $ra
  41.     addi $sp, $sp, -12     
  42.     sw $ra, 8($sp)         
  43.     sw $a0, 4($sp)
  44.     sw $a1, 0($sp)
  45.     jal max                 # max(A[n-1], find_max(A,n-1))
  46.     # Dealloco lo stack e carico $ra
  47.     lw $ra, 8($sp)         
  48.     addi $sp, $sp, 12  
  49.     jr $ra                  # return max
  50.  
  51.  
  52. max:
  53.     lw $a0, 16($sp)         # $a0 = A
  54.     # Salvo sullo stack i registri $a e $ra
  55.     addi $sp, $sp, -12
  56.     sw $ra, 8($sp)
  57.     sw $a0, 4($sp)
  58.     sw $a1, 0($sp)
  59.     jal find_max            # find_max(A,n-1)
  60.     # Dealloco lo stack
  61.     lw $ra, 8($sp)
  62.     addi $sp, $sp, 12
  63.     lw $a0, 4($sp)          # Ricavo A[n-1] per il confronto e lo carico in $a0
  64.     slt $t0, $v0, $a0      
  65.     beq $t0, $zero, max_soFar   # $if A[i] > A[i+1] goto max_soFar
  66.     add $v0, $zero, $a0         # max = new_Max
  67.     jr $ra
  68.  
  69. max_soFar:
  70.     add $v0, $zero, $v0         # max = old_Max
  71.     jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement