Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #carica 10 interi nello stack
- .data
- .align 2
- interi: .word 0 1 2 3 4 5 6 7 8 9
- .text
- .globl main
- main:
- addi $sp, $sp, -40 #alloco 10 word nello stack
- add $s4, $sp, $zero #copio la posizione di $sp
- addi $s2, $s2, 0 #inizializzo i a 0
- addi $s3, $s3, 10 #inizializzo j = 10
- la $s0, interi #carico l'indirizzo del primo valore inserito nel .data all'etichetta "interi" (0)
- ciclo:
- sll $s1, $s2, 2 #$s1 = i*4
- beq $s3, $s2, print #se i=j vai a stampa
- add $s1, $s1, $s0 #calcolo l'indirizzo dove prelevare il dato
- lw $t2, 0($s1) #carico in $t2 il dato
- sw $t2, 0($s4) #faccio il push del dato nello stack
- add $s4, $s4, 4 #incremento di 4 la copia della posizione di $sp per poter inserire il prossimo valore nello stack
- addi $s2, $s2, 1 #incremento i di 1
- j ciclo #jump
- print: #########ROUTINE DI STAMPA############
- beq $s3, $zero, esci #$s3 (j) vale 10 e lo confronto con 0
- addi $s3, $s3, -1 #decremento di 1 $s3 (j)
- addi $s4, $s4, -4 #decremento di 4 la copia della posizione di $sp per stampare il valore corretto presente nello stack
- lw $t0, 0($s4) #carico il valore in $t0
- addi $v0, $zero, 1 #metto in $v0 il valore 1 per la syscall print
- add $a0, $t0, $zero #metto in $a0 il valore di cui voglio fare il print
- syscall #chiamata a sistema
- j print #jump
- esci: ##########ROUTINE ESCI################
- addi $sp, $sp, 40 #dealloco lo stack
- addi $v0, $zero, 10 #metto in $v0 il valore 10 per la syscall di exit
- syscall #chiamata a sistema
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement