Vi condivido alcuni video introduttivi sul tema assembly:
Visto che lavoreremo con assembly per RISCV vi condivido alcuni video introduttivi sull’architettura:
Se non sapete nulla di assembly/riscv vi consiglio di vedere questi filmati perche’ vi forniscono una buona contestualizzazione di quello che stiamo facendo.
Per poter andare a programmare in assembly per RISCV dovrete usare questo programma → https://github.com/TheThirdOne/rars, basta che vi scaricate il programma il formato jar e lo lanciate, e’ indolore come procedura. L’interfaccia e’ molto intuitiva: potete aprire dei file, avete un editor di testo, potete lanciare il programma e vederne l’esecuzione step by step.
Come potete vedere per prima cosa definiamo un main con .global main dopo definiamo la stringa che ci serve stampare e infine costruiamo il main effettivo all’interno della sezione .text. Per poter andare a stampare su standard output una stringa dobbiamo andare ad utilizzare l’istruzione li a7 ed andare a caricare l’indirizzo della stringa dentro a0. Queste operazioni sono definite da convenzione → https://github.com/TheThirdOne/rars/wiki/Environment-Calls
Usate sempre queste convenzioni. Alla fine chiamo il comando ecall per chiudere questa procedura di stampa della stringa e infine eseguo una operazione di return 0, esattamente come facevate in C++ e C, in formato assembly per riscv, quindi sempre secondo la convenzione che vi ho linkato nel paragrafo sopra.
.global main
.data
msg: .string "Hello World!"
.text
main:
li a7, 4
la a0, msg
ecall
li a0, 0
li a7, 93
ecall