Introduzione Assembly

Vi condivido alcuni video introduttivi sul tema assembly:

  1. https://www.youtube.com/watch?v=4gwYkEK0gOkAssembly Language in 100 Seconds
  2. https://www.youtube.com/watch?v=1FXhjErUz58What Is Assembly Language? (introduzione piu’ approfondita)

Visto che lavoreremo con assembly per RISCV vi condivido alcuni video introduttivi sull’architettura:

  1. https://www.youtube.com/watch?v=Ps0JFsyX2fU&t=250sIntroduzione RISCV
  2. https://www.youtube.com/watch?v=lXdx0X2WHfYRISC-V is the future of computing | Chris Lattner and Lex Fridman
  3. https://www.youtube.com/watch?v=ktjSvlelKPkWhy RISC-V is Inevitable, Calista Redmond, RISC-V International

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.

Untitled

Untitled

How to “Hello World” in RISCV

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

hello_world.asm

Stampa di variabile intera

Esercizio 01 - Stampa con loop