Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. # Esercizio 6
  2. # Scrivere un programma che, data una matrice di interi
  3. # A (MxN), verifichi se A è simmetrica. Se non lo è, il
  4. # programma popola una seconda matrice B in modo tale
  5. # che sia la trasposta di A.
  6.  
  7. .data
  8. BASE: .word 2, 6, 18, 3, 9, 27
  9. #expected in stack 2, 3, 6, 9, 18, 27
  10.  
  11. M: .word 2
  12. N: .word 3
  13.  
  14. .text
  15. .globl main
  16.  
  17. main: la $a0, BASE
  18. lw $a1, M
  19. lw $a2, N
  20. addi $sp, $sp, -4
  21. sw $ra, 0($sp)
  22. jal simmetria
  23. lw $ra, 0($sp)
  24. addi $sp, $sp, 4
  25. jr $ra # FINE PROGRAMMA
  26.  
  27. simmetria:
  28. add $t9, $a0, $zero # copio BASE in $t9
  29. bne $a1, $a2, Trasposizione # se matrice non quadrata goto 'Trasposizione'
  30. addi $v0, $zero, 1 # $v0 = true (matrice quadrata)
  31. jr $ra
  32.  
  33. Trasposizione:
  34. add $v0, $zero, $zero # $v0 = false (matrice non quadrata)
  35. sll $t0, $a2, 2 # $t0 = 4*N = dimensione riga
  36. mult $t0, $a1 # $Lo = 4*M*N = dimensione matrice
  37. mflo $t1 # $t1 = 4MN
  38. addi $v1, $sp, -4 # inizializzo puntatore alla matrice
  39. sub $sp, $sp, $t1 # alloco spazio x nuova matrice
  40. add $t2, $zero, $zero # $t2 = i=0
  41. add $t3, $zero, $zero # $t3 = j=0
  42.  
  43. While: slt $t4, $t2, $a1 # if (i<righe) continue
  44. beq $t4, $zero, Else # else goto 'else'
  45. slt $t4, $t3, $a2 # if (j<colonne) continue
  46. beq $t4, $zero, Exit # else goto 'exit'
  47. lw $t4, 0($t9) #
  48. sw $t4, 0($v1) # copio B[i][j] nello stack
  49. addi $v1, $v1, -4
  50. addi $t2, $t2, 1 # i++
  51. add $t9, $t9, $t0 # riga successiva
  52. j While
  53.  
  54. Else: addi $t3, $t3, 1 # j++
  55. sll $t5, $t3, 2 # $t5 = 4*j
  56. add $t9, $a0, $t5 # colonna successiva
  57. add $t2, $zero, $zero # i = 0
  58. j While
  59.  
  60. Exit: add $v1, $sp, $t1 # $v1 = indirizzo base matrice trasposta B
  61. # cioè B[M+1][N+1] ---> B[0][0]
  62. # cioè $v1=4(MN+1) ---> $v1= $sp - 4dim(B) = &base
  63. addi $sp, $v1, 4
  64. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement