Calcolatori elettronici/Istruzioni per il controllo del flusso
Istruzioni di salto
[modifica | modifica sorgente]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 | modifica sorgente]Short (2 byte)
[modifica | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]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 | modifica sorgente]L'istruzione JMP
è un'istruzione di salto incondizionato di tipo near.
Istruzioni di salto condizionato
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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>