Calcolatori elettronici/Istruzioni per il controllo del flusso

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>