Advertisement
JosepRivaille

Examen Laboratori EC 2014/2015-Q2

Dec 21st, 2015
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. #############################################
  2. # Exercici 1) #
  3. #############################################
  4. # int A[4][4] = { -1, 0, 0, 0, #
  5. # -2, 3, 0, 0, #
  6. # 4, -5, -6, 0, #
  7. # 7, -8, 9, 0 }; #
  8. # #
  9. # int sum; #
  10. # #
  11. # main() { #
  12. # int i, j; #
  13. # sum = 0; #
  14. # for (i=0; i<4; i++) #
  15. # for (j=0; j<=i; j++) #
  16. # { #
  17. # if (A[i][j] < 0) #
  18. # A[i][j] = -A[i][j] #
  19. # sum = sum + A[i][j]; #
  20. # } #
  21. # } #
  22. #############################################
  23.  
  24. .data
  25.  
  26. A: .word -1, 0, 0, 0
  27. .word -2, 3, 0, 0
  28. .word 4, -5, -6, 0
  29. .word 7, -8, 9, 0
  30. sum: .word 0
  31.  
  32. .text
  33. .globl main
  34.  
  35. main:
  36. li $t7, 4
  37. move $t0, $zero # $t0 = i
  38. whilei: move $t1, $zero # $t1 = j
  39. la $t2, A
  40. sll $t3, $t0, 4
  41. add $t2, $t2, $t3 # &A[i][0]
  42. whilej: lw $t3, 0($t2) # $t3 = A[i][j]
  43. bge $t3, $zero, endif
  44. sub $t3, $zero, $t3
  45. sw $t3, 0($t2)
  46. endif: la $t4, sum # $t4 = &sum
  47. lw $t5, 0($t4) # $t5 = sum
  48. add $t5, $t5, $t3 # sum += A[i][j]
  49. sw $t5, 0($t4)
  50. addiu $t1, $t1, 1 # ++j
  51. addiu $t2, $t2, 4 # &A[i][j] (offset = 4 = 1 * int size)
  52. ble $t1, $t0, whilej
  53. addiu $t0, $t0, 1 # ++i
  54. blt $t0, $t7, whilei
  55. jr $ra
  56.  
  57.  
  58. #########################################################################
  59. # Exercici 2) #
  60. #########################################################################
  61. # int ackermann(int m, int n) #
  62. # { #
  63. # int resultat = 0; #
  64. # #
  65. # if (m == 0) { #
  66. # resultat = n + 1; #
  67. # } else if (n == 0) { #
  68. # resultat = ackerman(m - 1, 1); #
  69. # } else { #
  70. # resultat = ackermann(m - 1, ackermann(m, n - 1)); #
  71. # } #
  72. # return resultat; #
  73. # } #
  74. #########################################################################
  75.  
  76. .data
  77. res:.word 1, 2, 3, 4
  78. .word 2, 3, 4, 5
  79. .word 3, 5, 7, 9
  80. .word 5, 13, 29, 61
  81.  
  82. .text
  83. .globl main
  84.  
  85. main:
  86. addiu $sp, $sp, -4
  87. sw $ra, 0($sp)
  88. la $t0, res
  89. lw $a0, 16($t0) # 2 valors random de la matriu per a passar com a paràmetre
  90. lw $a1, 60($t0)
  91. jal ackermann
  92. move $t0, $v0
  93. lw $ra, 0($sp)
  94. addiu $sp, $sp, 4
  95. jr $ra
  96.  
  97.  
  98. ackermann:
  99. addiu $sp, $sp, -12 # Guardem registres segurs
  100. sw $s0, 0($sp)
  101. sw $s1, 4($sp)
  102. sw $ra, 8($sp)
  103.  
  104. move $s0, $a0
  105. move $s1, $a1
  106.  
  107. bne $s0, $zero, elif # Entrem al if si $s0 == $zero
  108. addiu $v0, $s1, 1 # resultat = n + 1
  109. b endif
  110.  
  111. elif:
  112. bne $s1, $zero, else # Entrem al elif si $s1 == $zero
  113. addiu $a0, $s0, -1 # Paràmetre 0 = m - 1
  114. li $a1, 1 # Paràmetre 1 = 1
  115. jal ackermann
  116. b endif
  117.  
  118. else:
  119. move $a0, $s0 # Paràmetre 0 = m
  120. addiu $a1, $s1, -1 # Paràmetre 1 = n - 1
  121. jal ackermann
  122. addiu $a0, $s0, -1 # Paràmetre 0 = m - 1
  123. move $a1, $v0 # Paràmetre 1 = $v0 = ackerman(m, n - 1)
  124. jal ackermann
  125.  
  126. endif:
  127. lw $s0, 0($sp)
  128. lw $s1, 4($sp)
  129. lw $ra, 8($sp)
  130. addiu $sp, $sp, 12 # Recuperem registres segurs
  131.  
  132. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement