- Utilizzare il linguaggio specifico della micro-programmazione e dell'assembly (DPR 88/2010)
- Descrivere l'architettura dei sistemi di elaborazione e il ciclo di fetch-execute
- Analizzare il flusso di esecuzione di un programma a basso livello
- Utilizzare strumenti di simulazione per il test e il debugging di programmi in assembly
Il flusso di esecuzione e il registro IP
Normalmente la CPU esegue le istruzioni in modo sequenziale: dopo ogni istruzione completata, il processore incrementa automaticamente il registro IP (Instruction Pointer) per puntare all’istruzione successiva.
Nelle CPU x86 più moderne questo registro prende il nome di EIP o RIP, ma il concetto di funzionamento resta invariato.
In molti casi, però, è necessario alterare il flusso normale del programma, ad esempio per saltare istruzioni, creare cicli o gestire decisioni logiche.
L’istruzione JMP
L’istruzione JMP (Jump) ordina alla CPU di caricare un nuovo indirizzo nel registro IP e di continuare l’esecuzione da quella posizione.
È definita incondizionata perché il salto avviene sempre, senza verificare alcuna condizione.
| Istruzione | Sintassi | Azione della CPU |
|---|---|---|
| JMP | JMP etichetta |
Carica l’indirizzo associato all’etichetta nel registro IP. |
Le etichette (Labels)
Un’etichetta rappresenta un indirizzo simbolico all’interno del programma. Durante la fase di assemblaggio, l’assemblatore sostituisce il nome dell’etichetta con l’indirizzo di memoria reale.
Il nome dell’etichetta è scelto liberamente dal programmatore, ma è buona pratica utilizzare nomi autoesplicativi che descrivano la funzione del codice associato.
MOV AX, 10 JMP salta_tutto ; Salto incondizionato ADD AX, 20 ; Istruzione ignorata salta_tutto: MOV BX, AX
ESERCIZI
Comprendere il funzionamento dell'istruzione JMP
🟢 Livello 1 – Comprendere il salto
Esercizio 1 – L’istruzione fantasma
Obiettivo: capire che alcune istruzioni possono non essere mai eseguite.
ORG 100h MOV AX, 10 JMP salta MOV AX, 99 salta: MOV BX, AX RET
- Che valore finale ha AX?
- Che valore finale ha BX?
- Quale istruzione non viene eseguita?
Esercizio 2 – Traccia il flusso
Obiettivo: seguire l’ordine reale di esecuzione.
ORG 100h MOV AX, 1 JMP L2 MOV AX, 2 L2: MOV AX, 3 RET
- Che valore finale ha AX?
🟡 Livello 2 – Uso delle etichette
Esercizio 3 – Etichette simboliche
Obiettivo: comprendere il ruolo delle label.
ORG 100h MOV AX, 5 JMP copia AZZERA: MOV AX, 0 copia: MOV BX, AX RET
- L’etichetta
AZZERAviene mai raggiunta? - Il nome delle etichette influisce sull’esecuzione?
Esercizio 4 – Salto all’indietro
Obiettivo: riconoscere un ciclo infinito.
ORG 100h MOV CX, 3 inizio: INC AX DEC CX JMP inizio
- Perché questo programma non termina?
- Quale istruzione causa il ciclo infinito?
🟠 Livello 3 – Strutture logiche con JMP
Esercizio 5 – IF simulato
Obiettivo: comprendere i limiti del JMP.
ORG 100h MOV AX, 5 JMP fine_if MOV BX, 1 fine_if: RET
- Il codice dentro la “if” viene mai eseguito?
- È possibile creare un vero IF solo con JMP?
Esercizio 6 – Salto di sicurezza
Scenario: evitare l’esecuzione di codice pericoloso.
ORG 100h JMP start MOV AX, 0 MOV BX, 0 start: MOV AX, 100 RET
Spiegare perché il codice di reset non viene mai eseguito.
⭐ Esercizio - Calcola N!
Calcola il fattoriale di un numero N quindi N!. Prova il programma per N=5, 7, 9, 25,30 e consegna le immagini dei risultati.
⭐ Esercizio - Conta quanti numeri pari
Calcola quanti numeri pari ci sono tra N1 e N2. Prova il programma per N1=5 e N2=12, N1=50 e N2=120, N1=4 e N2=90 e consegna le immagini dei risultati.