Sistemi E Reti

Salti Incondizionati

In assembly x86, l’istruzione JMP (Jump) è un’istruzione di controllo del flusso che forza la CPU a proseguire l’esecuzione del programma da un’altra posizione di memoria, caricando un nuovo indirizzo nel registro IP invece di continuare in modo sequenziale.

Durata

100 minuti

Software

emu8086

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 AZZERA viene 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.




Assembly, x86, JMP, Sistemi e Reti, Controllo di Flusso, LabInfo,