mirror of
https://github.com/Steffo99/unisteffo.git
synced 2024-12-01 12:24:19 +00:00
37 lines
1.6 KiB
Markdown
37 lines
1.6 KiB
Markdown
|
# Primo programma in RISC-V
|
||
|
|
||
|
```riscv
|
||
|
# Che bello! Adoro l'assembly!
|
||
|
# Questo programma funziona, è verificato!
|
||
|
.global _start
|
||
|
|
||
|
# La sezione .data contiene i dati del programma
|
||
|
.section .data
|
||
|
|
||
|
# Creo una variabile con etichetta "ciao"
|
||
|
ciao: .string "0\n\0"
|
||
|
|
||
|
# 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 t1, 10 # Voglio ripetere il ciclo 10 volte
|
||
|
li a7, 64 # PRINT(stream, indirizzo, numerobytes) è la syscall 64
|
||
|
li a0, 0 # stream è il primo argomento: vogliamo scrivere su stdout (0)
|
||
|
la a1, ciao # indirizzo è il secondo argomento: partiamo dall'etichetta ciao
|
||
|
li a2, 2 # numerobytes è il terzo argomento: vogliamo stampare 2 bytes
|
||
|
print:
|
||
|
ecall # PRINT(a0, a1, a2)
|
||
|
lbu t0, 0(a1) # Carica il byte con il 0
|
||
|
addi t0, t0, 1 # Aggiungici 1
|
||
|
sb t0, 0(a1) # Ricaricalo in memoria
|
||
|
addi t1, t1, -1 # Togli 1 dal numero di cicli rimasti
|
||
|
bne t1, zero, print # Se rimangono dei cicli, torna indietro e falli!
|
||
|
end:
|
||
|
li a7, 93 # Tutti i programmi terminano chiamando la syscall 93, EXIT()
|
||
|
ecall # EXIT()
|
||
|
```
|