Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Esercizio 6
- # Scrivere un programma che, data una matrice di interi
- # A (MxN), verifichi se A è simmetrica. Se non lo è, il
- # programma popola una seconda matrice B in modo tale
- # che sia la trasposta di A.
- .data
- BASE: .word 2, 6, 18, 3, 9, 27
- #expected in stack 2, 3, 6, 9, 18, 27
- M: .word 2
- N: .word 3
- .text
- .globl main
- main: la $a0, BASE
- lw $a1, M
- lw $a2, N
- addi $sp, $sp, -4
- sw $ra, 0($sp)
- jal simmetria
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- jr $ra # FINE PROGRAMMA
- simmetria:
- add $t9, $a0, $zero # copio BASE in $t9
- bne $a1, $a2, Trasposizione # se matrice non quadrata goto 'Trasposizione'
- addi $v0, $zero, 1 # $v0 = true (matrice quadrata)
- jr $ra
- Trasposizione:
- add $v0, $zero, $zero # $v0 = false (matrice non quadrata)
- sll $t0, $a2, 2 # $t0 = 4*N = dimensione riga
- mult $t0, $a1 # $Lo = 4*M*N = dimensione matrice
- mflo $t1 # $t1 = 4MN
- addi $v1, $sp, -4 # inizializzo puntatore alla matrice
- sub $sp, $sp, $t1 # alloco spazio x nuova matrice
- add $t2, $zero, $zero # $t2 = i=0
- add $t3, $zero, $zero # $t3 = j=0
- While: slt $t4, $t2, $a1 # if (i<righe) continue
- beq $t4, $zero, Else # else goto 'else'
- slt $t4, $t3, $a2 # if (j<colonne) continue
- beq $t4, $zero, Exit # else goto 'exit'
- lw $t4, 0($t9) #
- sw $t4, 0($v1) # copio B[i][j] nello stack
- addi $v1, $v1, -4
- addi $t2, $t2, 1 # i++
- add $t9, $t9, $t0 # riga successiva
- j While
- Else: addi $t3, $t3, 1 # j++
- sll $t5, $t3, 2 # $t5 = 4*j
- add $t9, $a0, $t5 # colonna successiva
- add $t2, $zero, $zero # i = 0
- j While
- Exit: add $v1, $sp, $t1 # $v1 = indirizzo base matrice trasposta B
- # cioè B[M+1][N+1] ---> B[0][0]
- # cioè $v1=4(MN+1) ---> $v1= $sp - 4dim(B) = &base
- addi $sp, $v1, 4
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement