# Calcolatori elettronici/Istruzioni per il controllo del flusso

Calcolatori elettronici
Copertina Tutti i moduli · Sviluppo
    CopertinaCalcolatori elettronici/Copertina
* L'evoluzione dei sistemi di elaborazioneCalcolatori elettronici/L'evoluzione dei sistemi di elaborazione
* Il progetto di circuiti logiciCalcolatori elettronici/Il progetto di circuiti logici
* I processoriCalcolatori elettronici/I processori
* Architettura 8086Calcolatori elettronici/Architettura 8086
* Unità di controlloCalcolatori elettronici/Unità di controllo
* Introduzione alle memorieCalcolatori elettronici/Introduzione alle memorie
* Le memorie ad accesso casualeCalcolatori elettronici/Le memorie ad accesso casuale
* Le memorie cacheCalcolatori elettronici/Le memorie cache
* Le memorie ad accesso serialeCalcolatori elettronici/Le memorie ad accesso seriale
* La memoria virtualeCalcolatori elettronici/La memoria virtuale
* La gestione dei dispositivi input/outputCalcolatori elettronici/La gestione dei dispositivi input/output
* Intel 8255Calcolatori elettronici/Intel 8255
* Intel 8259Calcolatori elettronici/Intel 8259
* I busCalcolatori elettronici/I bus
* Le architetture a pipelineCalcolatori elettronici/Le architetture a pipeline
* Assembler 8086
          IntroduzioneCalcolatori elettronici/Introduzione
   * Informazioni generaliCalcolatori elettronici/Informazioni generali
   * Istruzioni di trasferimento datiCalcolatori elettronici/Istruzioni di trasferimento dati
   * Istruzioni aritmeticheCalcolatori elettronici/Istruzioni aritmetiche
   * Istruzioni per il controllo del flussoCalcolatori elettronici/Istruzioni per il controllo del flusso
   * Istruzioni per la manipolazione dei bitCalcolatori elettronici/Istruzioni per la manipolazione dei bit
   * Le procedureCalcolatori elettronici/Le procedure
   * Istruzioni per il controllo del processoreCalcolatori elettronici/Istruzioni per il controllo del processore
   * Formato delle istruzioni macchina, tempi di esecuzioneCalcolatori elettronici/Formato delle istruzioni macchina, tempi di esecuzione
Modifica il sommario

## Istruzioni di salto

Le istruzioni di salto modificano il valore del PC in modo che il fetch successivo venga effettuato in un'altra posizione di memoria.
Si distinguono istruzioni di salto condizionato (es. JNE) e di salto incondizionato (es. JMP).

### Tipi di salto
#### Short (2 byte)

Le istruzioni dei processori destinati ad applicazioni a basso costo sono progettate per avere un codice macchina il meno lungo possibile, in modo che siano sufficienti memorie più piccole ed economiche. In particolare, le istruzioni di salto condizionato sono di tipo short, cioè sono ottimizzate per i salti che vengono effettuati in una destinazione vicina alla stessa istruzione: bastano infatti 2 byte complessivi, di cui il secondo byte contiene l'offset dell'istruzione a cui saltare non relativo all'inizio del segmento di memoria, ma relativo alla stessa istruzione di salto.

#### Near (3 byte)

Le istruzioni di salto di tipo near richiedono 3 byte: il primo contiene il codice operativo dell'istruzione, gli altri due l'offset della procedura a cui saltare.

#### Far (5 byte)

Le istruzioni di salto di tipo far (5 byte) possono saltare da un segmento di memoria all'altro, modificando oltre all'IP anche il registro di segmento.

### Istruzioni di salto incondizionato

L'istruzione JMP è un'istruzione di salto incondizionato di tipo near.

### Istruzioni di salto condizionato

Per ogni flag esistono due istruzioni di salto condizionato, che eseguono il salto una se il flag vale 1, l'altra se vale 0.
| Confronto tra numeri con segno | Confronto tra numeri senza segno | Salta se |
| JL o JNGE | JB o JNAE | destinazione < sorgente |
| JG o JNLE | JA o JNBE | destinazione > sorgente |
| JLE o JNG | JBE o JNA | destinazione ≤ sorgente |
| JGE o JNL | JAE o JNB | destinazione ≥ sorgente |
| JE | JE | destinazione = sorgente |
| JNE | JNE | destinazione ≠ sorgente |
Altre istruzioni di salto condizionato (ad es. JZ e JNZ) sono in grado di testare flag come SF e ZF lasciati dall'istruzione CMP <sorgente> <destinazione>.
L'istruzione JCXZ salta se in CX è contenuto il valore 0.
Le istruzioni di salto condizionato sono di tipo short.

## Istruzioni di iterazione

L'istruzione LOOP serve per la gestione dei cicli: decrementa di un'unità il registro CX, confronta il CX con 0, e se è diverso da 0 salta all'etichetta usata come parametro.
Il codice:
    LOOP <etichetta>
è equivalente a:
    DEC CX
    CMP CX, 0
    JNE <etichetta>