Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. main:
  2.  
  3.     # for t0 = 1 to 10 words
  4.     li $t0 0
  5.     for1:
  6.     slti $t1 $t0 40
  7.     beq $t1 $zero endfor1
  8.     #
  9.  
  10.     # input word
  11.     li $v0 5
  12.     syscall
  13.     sw $v0 a($t0)
  14.     #
  15.  
  16.     # next t0
  17.     addi $t0 4
  18.     j for1
  19.     endfor1:
  20.     #
  21.  
  22.     # test
  23.     la $a0 a
  24.     li $a1 0
  25.     li $a2 36
  26.     jal maxSumRec
  27.     move $v1 $v0
  28.     #
  29.  
  30.  
  31.     # exit
  32.     li $v0 10
  33.     syscall
  34.     #
  35.  
  36.  
  37. #   private static int maxSumRec( int [ ] a, int left, int right )
  38. #   {
  39.     maxSumRec:
  40.     addi $sp $sp -32
  41.     sw $ra 28($sp)
  42.     sw $s3 24($sp)
  43.     sw $s2 20($sp)
  44.     sw $s1 16($sp)
  45.     sw $s0 12($sp)
  46.     sw $a2 8($sp)
  47.     sw $a1 4($sp)
  48.     sw $a0 0($sp)
  49. #       if( left == right )  // Base case
  50.         bne $a1 $a2 endif1
  51. #           if( a[ left ] > 0 )
  52.             lw $t1 a($a1)
  53.             slt $t0 $zero $t1
  54.             beq $t0 $zero else1
  55. #               return a[ left ];
  56.                 move $v0 $t1
  57.                 j return
  58. #           else
  59.             else1:
  60. #               return 0;
  61.                 li $v0 0
  62.                 j return
  63.         endif1:
  64.  
  65. #       int center = ( left + right ) / 2;
  66.         add $s0 $a1 $a2
  67.         srl $s0 $s0 1
  68. #       int maxLeftSum  = maxSumRec( a, left, center );
  69.         move $s3 $a2
  70.         move $a2 $s0
  71.         jal maxSumRec
  72.         move $s1 $v0
  73.         move $a2 $s3
  74. #       int maxRightSum = maxSumRec( a, center + 1, right );
  75.         move $s3 $a1
  76.         addi $a1 $s0 4
  77.         jal maxSumRec
  78.         move $s2 $v0
  79.         move $a1 $s3
  80.  
  81. #       int maxLeftBorderSum = 0, leftBorderSum = 0;
  82.         li $t1 0
  83.         li $t2 0
  84. #       for( int i = center; i >= left; i-- )
  85.         move $t0 $s0
  86.         for2:
  87.         slt $t3 $t0 $a1
  88.         bne $t3 $zero endfor2
  89. #       {
  90. #           leftBorderSum += a[ i ];
  91.             lw $t4 a($t0)
  92.             add $t2 $t2 $t4
  93. #           if( leftBorderSum > maxLeftBorderSum )
  94.             slt $t3 $t1 $t2
  95.             bne $t3 $zero endif2
  96. #               maxLeftBorderSum = leftBorderSum;
  97.                 move $t1 $t2
  98.             endif2:
  99. #       }
  100.         addi $t0 $t0 -4
  101.         j for2
  102.         endfor2:
  103.  
  104.         move $t6 $t1
  105.  
  106. #       int maxRightBorderSum = 0, rightBorderSum = 0;
  107.         li $t1 0
  108.         li $t2 0
  109. #       for( int i = center + 1; i <= right; i++ )
  110.         addi $t0 $s0 4
  111.         for3:
  112.         slt $t3 $s0 $s2
  113.         bne $t3 $zero endfor3
  114. #       {
  115. #           rightBorderSum += a[ i ];
  116.             lw $t4 a($t0)
  117.             add $t2 $t2 $t4
  118. #           if( rightBorderSum > maxRightBorderSum )
  119.             slt $t3 $t1 $t2
  120.             bne $t3 $zero endif3
  121. #               maxRightBorderSum = rightBorderSum;
  122.                 move $t1 $t2
  123.             endif3:
  124. #       }
  125.         addi $t0 $t0 4
  126.         j for3
  127.         endfor3:
  128.  
  129.        
  130.  
  131. #       return max3( maxLeftSum, maxRightSum,
  132. #                    maxLeftBorderSum + maxRightBorderSum );
  133.         move $a0 $s1
  134.         move $a1 $s2
  135.         add $a2 $t1 $t6
  136.         jal max3
  137.  
  138.         return:
  139.         lw $ra 28($sp)
  140.         lw $s3 24($sp)
  141.         lw $s2 20($sp)
  142.         lw $s1 16($sp)
  143.         lw $s0 12($sp)
  144.         lw $a2 8($sp)
  145.         lw $a1 4($sp)
  146.         lw $a0 0($sp)
  147.         addi $sp $sp 32
  148.  
  149.         jr $ra
  150. #   }
  151.  
  152.  
  153. #   private static int max3( int a, int b, int c )
  154.     max3:
  155. #   {
  156. #       return a > b ? a > c ? a : c : b > c ? b : c;
  157.         move $v0 $a0
  158.         slt $t0 $v0 $a1
  159.         beq $t0 $zero skip1
  160.         move $v0 $a1
  161.         skip1:
  162.         slt $t0 $v0 $a2
  163.         beq $t0 $zero skip2
  164.         move $v0 $a2
  165.         skip2:
  166.         jr $ra
  167. #   }
  168.  
  169. .data
  170.     a: .space 40    # array to hold 10 words or integers
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement