Calcolatori elettronici/Istruzioni per il controllo del processore
Istruzioni per la gestione delle interruzioni
[modifica | modifica sorgente]Interrupt esterni
[modifica | modifica sorgente]Per approfondire, vedi A11. La gestione dei dispositivi input/output. |
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[1] (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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]- L'istruzione
INTO
equivale ad unaINT 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
eCMC
operano sul Carry Flag (CF). - Le istruzioni
STI
eCLI
operano sull'Interrupt Flag (IF) che determina se il processore è sensibile agli interrupt.
Note
[modifica | modifica sorgente]- ↑ La ISR non può stare nello stesso segmento di codice del programma che è stato interrotto.