Vai al contenuto

Videocorso Assembly x86-64 e ARM CGFA

Parla direttamente con il processore: NASM su Linux, registri, stack, chiamate di sistema, SIMD e un assaggio di ARM64

  • Partenza: Da zero
  • 16 ore con gli esercizi
  • 10 lezioni in 3 livelli
  • 2 lezioni gratis

A chi serve

Curiosi, studenti di informatica e programmatori che vogliono capire davvero cosa fa il computer sotto ai linguaggi di alto livello

Cosa serve per iniziare

  • Un PC con Linux, oppure Windows con WSL (Ubuntu) per avere un terminale Linux
  • Nessuna esperienza di programmazione obbligatoria: aiuta conoscere i numeri binari ed esadecimali, che ripassiamo insieme
  • Pazienza: in assembly ogni riga fa una cosa piccolissima

Cosa installare

NASM (Netwide Assembler)Assemblatore gratuito. Su Ubuntu o WSL: sudo apt install nasm. Sito ufficiale: nasm.us
ld (linker GNU) e gccSi installano con sudo apt install build-essential. Il linker ld trasforma il file oggetto in un programma eseguibile
gdb (debugger)sudo apt install gdb. Permette di eseguire il programma istruzione per istruzione e guardare i registri
Per l'ultima lezione (ARM64)Un Raspberry Pi o un server ARM con Linux, oppure su PC: sudo apt install gcc-aarch64-linux-gnu qemu-user per assemblare ed eseguire in emulazione

A cosa ti serve

  • Sicurezza informatica e analisi del malware (reverse engineering)
  • Sistemi embedded e firmware
  • Sviluppo di compilatori, sistemi operativi e driver
  • Ottimizzazione di codice critico per prestazioni e videogiochi
  • Capire a fondo il C, il C++ e Rust

Programma del corso

10 lezioni in 3 livelli. Ogni lezione: video, spiegazione, codice da copiare o provare, esercizio con soluzione e quiz.

Progetto finale: Calcolatrice di fatture in assembly

Scrivi un programma NASM che somma gli importi di un array di fatture, aggiunge l'IVA al 22 per cento e stampa il totale a schermo. Userai array, funzioni, divisione e la conversione di un numero in testo.

I passi

  1. Dichiara in .data un array di 5 importi in euro con dq.
  2. Scrivi una funzione somma_array (rdi = indirizzo, rsi = quanti elementi) che restituisce il totale in rax.
  3. Scrivi una funzione con_iva che calcola x + x * 22 / 100 con imul e div.
  4. Scrivi una funzione stampa_numero che trasforma rax in cifre decimali: dividi per 10 ripetutamente e metti i resti nel buffer partendo dal fondo.
  5. Stampa il risultato con write e termina con exit.
  6. Prova tutto con gdb e controlla con strace le syscall.
  7. Extra: leggi gli importi dalla tastiera, oppure riscrivi la parte di somma in ARM64.

Esame e attestato

Alla fine del corso fai l'esame: 15 domande, serve il 75% di risposte giuste. Superato l'esame ottieni l'attestato stampabile con nome, ore, punteggio e un codice di controllo che chiunque può verificare.

Vai all'esame

Glossario di Assembly

Registro
Una piccolissima memoria velocissima dentro il processore.
Istruzione
Un'operazione elementare che il processore sa eseguire, come mov o add.
Assemblatore
Il programma (come NASM) che trasforma l'assembly in codice macchina.
Linker
Il programma (come ld) che unisce i file oggetto in un eseguibile.
Syscall
Una richiesta che il programma fa al sistema operativo, per esempio scrivere o uscire.
Flag
Un interruttore del processore che registra l'esito dell'ultima operazione, usato dai salti.
Etichetta
Un nome che segna un punto del codice o dei dati, usato per saltare o indirizzare.
Stack
La pila di memoria dove finiscono indirizzi di ritorno e dati temporanei.
Convenzione di chiamata
L'accordo su quali registri portano gli argomenti e il risultato di una funzione.
SIMD
Una istruzione che elabora più dati insieme, con i registri xmm e ymm.
ARM64
L'architettura RISC di telefoni, Raspberry Pi e chip Apple, detta anche AArch64.
Macro
Un modello di testo che l'assemblatore espande prima di produrre il codice.

Le prime 2 lezioni sono gratis

Per il corso completo, scuole e aziende: chiedi le condizioni.