Input e output
gestisce tutti gli input e gli output. Un (chiamata all'ambiente) chiede al sistema operativo o al simulatore di eseguire un servizio per il tuo codice assembly. Lo schermo e la tastiera sono due dei servizi disponibili in questo modo.
Metti il numero di servizio in a7, qualsiasi argomento in a0, poi attiva . I servizi che questo simulatore conosce:
1 # stampa intero (a0 = numero)4 # stampa stringa (a0 = indirizzo del testo)5 # leggi intero (risultato restituito in a0)10 # termina il programma32 # pausa (a0 = millisecondi)
a7 = 1 seleziona il servizio di stampa.
a7 indica quale servizio eseguire, mentre a0 contiene tutto ciò di cui quel servizio ha bisogno: un valore da stampare, un indirizzo da cui leggere, un tempo di attesa. L’elenco è fisso e breve, composto da cinque voci; pertanto, una volta appreso questo handshake, si conoscono tutti i modi in cui questo simulatore comunica con il mondo esterno. Un vero sistema operativo estende lo stesso concetto a un elenco molto più lungo.li a7, 5 # leggi intero -> a0ecalladd a0, a0, a0 # raddoppialoli a7, 1 # stampa interoecallli a7, 10ecall
seleziona la lettura di un intero e si mette in pausa per l'input, restituendo il tuo numero in a0. somma a0 a se stesso, raddoppiandolo sul posto. Poi e stampano il risultato, e e escono. Quando lo esegui, il simulatore apre una casella di input. Digita un numero e guardalo tornare raddoppiato.
Stampa del testo
Per prima cosa, due nuovi termini. Una sezione è un'area etichettata del programma: le istruzioni risiedono nella sezione .text, mentre i dati fissi come il testo risiedono nella sezione .data. E un indirizzo è semplicemente un numero che identifica una posizione nella memoria. Invece di trasportare l’intera stringa, un registro può contenere l’indirizzo in cui inizia la stringa, e il servizio di stampa legge da lì.
Il testo va nella sezione data. Gli si associa un'etichetta, poi si usa ("load address") per caricare l'indirizzo di quell'etichetta e il servizio 4 per stamparlo.
.datamsg: .string "Hello, RISC-V!\n".textla a0, msg # a0 = indirizzo del testoli a7, 4 # stampa stringaecallli a7, 10ecall
In .data, la direttiva riserva spazio per il testo e associa l'etichetta msg. .string memorizza i caratteri e aggiunge \n, un carattere di nuova riga. In .text, mette l'indirizzo del testo in a0, sceglie il servizio di stampa di stringhe, e stampa i caratteri da quell'indirizzo fino a raggiungere la fine della stringa. Poi il programma termina come al solito.
