# Calcolatori elettronici/Istruzioni per il controllo del processore

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 per la gestione delle interruzioni
### Interrupt esterni

Tramite gli interrupt esterni, un dispositivo esterno (es. tastiera) può in qualunque momento richiedere l'attenzione del processore attraverso un segnale sul pin INT, in modo che il processore, verificando questo segnale al termine di ogni istruzione, possa interrompere l'esecuzione del programma e saltare al codice che serve il dispositivo esterno. La richiesta di interruzione è affiancata da un codice su 8 bit che identifica il dispositivo tra quelli elencati in memoria nella Interrupt Vector Table (IVT), la quale associa ogni codice di periferica all'indirizzo di partenza della procedura che serve il dispositivo, detta Interrupt Service Routine (ISR). L'indirizzo di partenza della ISR è composto dal nuovo valore del CS (16 bit) e dal nuovo valore dell'IP (16 bit). La ISR deve sporcare il meno possibile la memoria che era in uso dal programma interrotto; inoltre, a differenza di una normale procedura, la ISR all'avvio salva temporaneamente nello stack, oltre al vecchio indirizzo di ritorno IP e al vecchio valore di CS, anche il registro di stato PSW che contiene i flag, che alla fine viene ripristinato tramite un'istruzione IRET. L'installazione di un nuovo dispositivo, prima di attivare gli interrupt, richiede di caricare in memoria la ISR e aggiungere il codice del nuovo dispositivo nella IVT.

### Interrupt software

L'8086 supporta anche gli interrupt software, che simulano un interrupt esterno e saltano a una certa procedura identificata dal parametro di un'istruzione INT (es. INT 21h). Le procedure richiamate da interrupt software sono offerte dal sistema operativo → il programmatore non deve preoccuparsi di conoscere l'effettivo indirizzo o il nome della procedura.

## Altre istruzioni

* L'istruzione INTO equivale ad una INT 4 quando l'Overflow Flag (OF) è settato, altrimenti equivale ad un'istruzione nulla.
* Se il processore entra nello stato idle tramite l'istruzione HLT, aspetta una richiesta di interrupt senza fare nulla.
* In un sistema a più di un microprocessore, uno dei microprocessori può segnalare tramite l'istruzione LOCK agli altri di non occupare il bus mentre sta effettuando una serie di particolari operazioni che devono essere eseguite in modo consecutivo.
* L'istruzione NOP non fa nulla, e serve per:
** introdurre un tempo di attesa di durata nota prima di eseguire l'istruzione successiva, ad esempio per rallentare un ciclo;
** sovrascrivere delle istruzioni in eccesso senza dover ricompilare tutto il programma;
** craccare i programmi!
* Le istruzioni STC, CLC e CMC operano sul Carry Flag (CF).
* Le istruzioni STI e CLI operano sull'Interrupt Flag (IF) che determina se il processore è sensibile agli interrupt.

## Note

* ↑ La ISR non può stare nello stesso segmento di codice del programma che è stato interrotto.