Diario delle lezioni
Questa pagina riporta l’elenco, i contenuti e i video delle lezioni.
Le lezioni vengono inoltre registrate e conservate tramite strumenti digitali. Si ricorda che le registrazioni risultanti saranno riutilizzabili solo alle condizioni previste dalla normativa vigente sul riuso dei dati pubblici (direttiva comunitaria 2003/98/CE e d. lgs. 36/2006 di recepimento della stessa), in termini compatibili con gli scopi per i quali sono state raccolte e registrate, ovvero esclusivamente a fini didattici e nel rispetto della normativa in materia di protezione dei dati personali.
Argomenti settimana 1: mercoledì 26 febbraio - venerdì 28 febbraio 2025 (Querzoni - Assaiante)
- Introduzione generale al corso
- Struttura dell’hardware di un sistema di calcolo: macchina di Von Neumann
- Pipeline compilazione
gcc (-E, -c, -S, -o)
- Linguaggio C vs. linguaggio assembly vs. linguaggio macchina (codice binario)
- Toolchain di compilazione ed i suoi moduli
- Tool
objdump -d per disassemblare codice binario
- Spiegazione layout memoria segmento eseguibile con istruzioni giustapposte con formato variabile
- Esempio di scrittura di file
.s,
- Comando
file per analizzare il tipo di file
- Strumenti di debugging:
- Materiale didattico:
Argomenti settimana 2: lunedì 2 marzo - venerdì 6 marzo 2026 (Querzoni - Assaiante/Lazzeretti)
- Nozione ISA (es. IA32 vs. AMD64/x86-64/x64)
- Registri interi a 32 bit (general-purpose e speciali):
A, B, C, D, SI, DI, BP, SP
- Struttura generale delle istruzioni IA32 binarie e unarie, operandi sorgente e destinazione
- Corrispondenza suffissi IA32 e tipi (
b, w, l)
- Primi elementi di sintassi assembly AT&T:
- Traduzione C->IA32: assegnamento
- istruzione
mov e suffisso l (movl) per indicare movimento di 4 byte da sorgente a destinazione
- letterali costanti
$
- Traduzione C->IA32: ritorno da funzione
- istruzione
ret
- registro
%eax come valore di ritorno a 32 bit
- Focus su sintassi AT&T
- Operandi immediati, registro e memoria
- Operatori logici (
not, and, or, xor) e aritmetici (neg, add, sub, imul, inc, dec, div)
- Traduzione C->IA32: calcolo di espressioni aritmetiche
- Traduzione C->IA32: accesso ai parametri passati a una funzione
- registro
%esp (stack pointer), layout della stack caller-callee, indirizzo di ritorno
- modo di indirizzamento registro con spiazzamento
d(%esp)
- Traduzione C->IA32: controllo del flusso
- Istruzioni di salto incondizionato (istruzione
jmp) e condizionato (famiglia jcc)
- Etichette che denotano indirizzi (target di salti)
- Materiale didattico:
Argomenti settimana 3: lunedì 9 - venerdì 13 marzo 2026 (Querzoni - Assaiante/Lazzeretti)
- Traduzione di schemi
if, if ... else, while e for in forma if ... goto direttamente traducibile in IA32
- Cenni a registro
EFLAGS e suo ruolo nel registrare informazioni che collegano azioni effettuate da operazioni aritmetico-logiche e successive istruzioni di salto condizionato.
- Condition code relative al risultato della precedente istruzione aritmetico-logica:
e, ne, l, le, g, ge, a, ae, b, be (signed e unsigned). Non trattate condizioni che definiscono i condition code in funzione dei bit ZF, OF, CF, ecc, di EFLAGS (fuori degli obiettivi del corso).
- Pattern
sub-jcc, cmp-jcc, test-jcc.
- Uso di puntatori: modi di indirizzamento indiretto a registro con base, indice, scala e spiazzamento.
- Aritmetica dei puntatori.
- Uso di array di valori.
- Uso di stringhe C.
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 4: lunedì 16 - venerdì 20 marzo 2025 (Querzoni - Assaiante/Lazzeretti)
- ABI (Application Binary Interface)
- Chiamata e ritorno da funzione: istruzioni
CALL e RET (semantica e uso)
- Passaggio dei parametri: allocazione della memoria nello stack frame
- Calling convention System V: registri callee-save e caller save, istruzioni
PUSH e POP (semantica e uso)
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 5: lunedì 23 marzo - venerdì 27 marzo 2025 (Querzoni - Assaiante/Lazzeretti)
- Conversioni di tipo intero (type cast): istruzioni
MOVZ e MOVS
- Variabili locali: allocazione della memoria nello stack frame e allineamento %esp a 4 byte
- Istruzione
LEA per il calcolo di indirizzi ed espressioni: esempio del calcolo di indirizzi di variabili locali in stack e calcolo di espressioni aritmetiche
- Espressioni booleane: istruzione
SETcc e regola del cortocircuito in C
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 6: lunedì 30 marzo - venerdì 10 aprile 2025 (Querzoni - Assaiante/Lazzeretti)
- Consultazione del manuale Application Binary Interface (ABI) [rif]
- Consultazione del manuale Intel (ISA, Volume 1 e 2) [rif]
- Accenno alla sintassi ASM Intel [rif]
- Regole di allineamento oggetti in memoria, vincolo allineamento 4 byte su
ESP
- Struct in C e sue regole di allineamento e padding [rif]
- Allocazione struct in stack
- Assegnamento condizionato con istruzione
CMOV
- Shift logico
SHL/SHR ed aritmetico SAL/SAR: applicazione su rappresentazioni con e senza segno, moltiplicazione e divisione intera per 2^S
- Divisione intera
IDIV
- Vincoli su alcune istruzioni (IMUL, CMOV, TEST, CMP, MOVZ/MOVS)
- Panoramica sull’architettura x86_64 e ABI x86_64/Linux
- Metriche prestazionali: latenza, throughput, spazio, energia (cenni)
- Scala della latenza degli eventi in un sistema di calcolo
- Speedup, legge di Amdahl e studio porzioni da ottimizzare in un programma
- Profilazione manuale delle prestazioni: clock_gettime e getrusage
- Latenza e risoluzione timer, esperimenti, funzione clock_getres (cenni)
- Tool di profilazione gprof
- Esercizi svolti in classe.
- Materiale didattico:
[
A.A. 2014-2015 |
A.A. 2015-2016 |
A.A. 2016-2017 |
A.A. 2017-2018 |
A.A. 2018-2019 |
A.A. 2019-2020 |
A.A. 2020-2021 |
A.A. 2021-2022 |
A.A. 2022-2023 |
A.A. 2023-2024 |
A.A. 2024-2025
]