1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-22 02:44:17 +00:00
appunti-steffo/2 - Architettura dei calcolatori/1 - Appunti/06 - Stack.riscv

40 lines
1.3 KiB
Text

# Che bello! Adoro l'assembly!
# Funziona!
.global _start
# La sezione .data contiene i dati del programma
.section .data
# La sezione .rodata contiene i dati del programma in sola lettura
.section .rodata
# La sezione .text contiene il testo del programma
.section .text
# Creo una label _start che funzionerà da entrypoint
_start:
li s0, 5 # Scrivi il numero 5
li s3, 3 # COSTANTE: 3
# Pushing phase
pushing:
sb s0, 0(sp) # Metti nello stack s0
addi sp, sp, 1 # Aumenta di 1 lo stack pointer
addi s2, s2, 1 # Aumenta di 1 la dimensione dello stack
addi s0, s0, -1 # Diminuisci di 1 il numero da fattorializzare
bgeu s0, s3, pushing # Continua a pushare finchè non arrivi a 2
li s1, 2
# Popping phase
popping:
addi sp, sp, -1 # Diminuisci di 1 lo stack pointer
# Attenzione: diminuisco lo stack pointer PRIMA di caricare dallo stack, altrimenti caricarei il nulla
lb s0, 0(sp) # Prendi dallo stack il prossimo numero
addi s2, s2, -1 # Diminuisci di 1 la dimensione dello stack
mul s1, s1, s0 # Effettua la moltiplicazione
bne s2, zero, popping # Se ci sono altri valori nello stack, continua a moltiplicare
# Ending phase
ending:
li a7, 93
ecall