Calcolatori elettronici/Istruzioni per il controllo del flusso

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Istruzioni di salto[modifica]

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[modifica]

Short (2 byte)[modifica]

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)[modifica]

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)[modifica]

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[modifica]

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

Istruzioni di salto condizionato[modifica]

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 destinazionesorgente
JGE o JNL JAE o JNB destinazionesorgente
JE JE destinazione = sorgente
JNE JNE destinazionesorgente

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[modifica]

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>