Calcolatori elettronici/Istruzioni per il controllo del flusso

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search
CopertinaCalcolatori elettronici/Copertina
  1. L'evoluzione dei sistemi di elaborazioneCalcolatori elettronici/L'evoluzione dei sistemi di elaborazione
  2. Il progetto di circuiti logiciCalcolatori elettronici/Il progetto di circuiti logici
  3. I processoriCalcolatori elettronici/I processori
  4. Architettura 8086Calcolatori elettronici/Architettura 8086
  5. Unità di controlloCalcolatori elettronici/Unità di controllo
  6. Introduzione alle memorieCalcolatori elettronici/Introduzione alle memorie
  7. Le memorie ad accesso casualeCalcolatori elettronici/Le memorie ad accesso casuale
  8. Le memorie cacheCalcolatori elettronici/Le memorie cache
  9. Le memorie ad accesso serialeCalcolatori elettronici/Le memorie ad accesso seriale
  10. La memoria virtualeCalcolatori elettronici/La memoria virtuale
  11. La gestione dei dispositivi input/outputCalcolatori elettronici/La gestione dei dispositivi input/output
  12. Intel 8255Calcolatori elettronici/Intel 8255
  13. Intel 8259Calcolatori elettronici/Intel 8259
  14. I busCalcolatori elettronici/I bus
  15. Le architetture a pipelineCalcolatori elettronici/Le architetture a pipeline
  16. Assembler 8086
IntroduzioneCalcolatori elettronici/Introduzione
  1. Informazioni generaliCalcolatori elettronici/Informazioni generali
  2. Istruzioni di trasferimento datiCalcolatori elettronici/Istruzioni di trasferimento dati
  3. Istruzioni aritmeticheCalcolatori elettronici/Istruzioni aritmetiche
  4. Istruzioni per il controllo del flussoCalcolatori elettronici/Istruzioni per il controllo del flusso
  5. Istruzioni per la manipolazione dei bitCalcolatori elettronici/Istruzioni per la manipolazione dei bit
  6. Le procedureCalcolatori elettronici/Le procedure
  7. Istruzioni per il controllo del processoreCalcolatori elettronici/Istruzioni per il controllo del processore
  8. Formato delle istruzioni macchina, tempi di esecuzioneCalcolatori elettronici/Formato delle istruzioni macchina, tempi di esecuzione

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>