Calcolatori elettronici/Istruzioni per il controllo del processore

Indice del libro

Istruzioni per la gestione delle interruzioni

modifica

Interrupt esterni

modifica
  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

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
  • 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.
  1. La ISR non può stare nello stesso segmento di codice del programma che è stato interrotto.