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 - Proietti Mattia)
- 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)
- Strumenti di debugging:
- Materiale didattico:
Argomenti settimana 2: lunedì 3 marzo - venerdì 7 marzo 2025 (Querzoni - Proietti Mattia/Lazzeretti)
- 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
- 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
- Nozione ISA (es. IA32 vs. AMD64/x86-64/x64)
- Focus su sintassi AT&T
- 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
- Operandi immediati, registro e memoria
- Corrispondenza suffissi IA32 e tipi (
b
, w
, l
)
- 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)
- Esempi
- Materiale didattico:
Argomenti settimana 3: lunedì 10 - venerdì 14 marzo 2025 (Querzoni - Proietti Mattia/Lazzeretti)
- Istruzioni di salto incondizionato (istruzione
jmp
) e condizionato (famiglia jcc
)
- Etichette che denotano indirizzi (target di salti)
- 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
.
- Esercizi svolti in classe.
- Materiale didattico:
Argomenti settimana 4: lunedì 17 - venerdì 21 marzo 2025 (Querzoni-Lazzeretti)
- 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.
- 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ì 24 marzo - venerdì 28 marzo 2025 (Querzoni-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
- 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
]