PkLab.netMeccatronica |
Italy - Basilicata - Matera | ||||||
|
Home e contatti |
INTERRUZIONI
Nota: questo materiale è di proprietà di Pk Lab ed è utilizzabile liberamente
a condizione di citarne la fonte
INTERRUZIONE DEL PROCESSO DI ELABORAZIONE POSSIBILI ALTERNATIVE:
Esempio: visualizazione dinamica dell'ora sul monitor Ogni secondo la CPU deve mostrare a video l'ora Alternative:
INTERRUZIONI ESTERNE
Non Mascherable Interrupt: linea dedicata alle interruzioni che devono essere sempre riconosciute dalla CPU appena è elettricamente possibile, cioè quando l'istruzione corrente è completa (le istruzioni richiedono piu cicli di clock) INTerrupt Request: linea dedicata alle richieste di interruzione. Questa linea nel PC-IBM è controllata dal 8259 Programmable Interrupt Control (PIC). Può essere disattivata con l'istruzione CLI (STI attiva) RESET: linea dedicata alla ripartenza del sistema. Tutti i registri interni vengono azzerati tranne CS che viene posto a FFFFh ATTIVITA' DELLA CPU DURANTE UN INTERRUPT
LA TABELLA DELLE INTERRUZIONI
OCCUPA I PRIMI 256x4byte=1024 DELLA MEMORIA DI SISTEMA, CIOE' GLI INDIRIZZI 0000..003FF
Ad esempio, l'indirizzo dell'interrupt 21h è memorizzato all'indirizzo
21Hx4=84H. Precisamente i byte 84H e 85H contengono l'offeset rispetto
al segmento che è contenuto nei byte 86H e 87H
RIPROGRAMMAZIONE DI INTERRUPTSIGNIFICA SCRIVERE UN GESTORE PER L'INTERRUPT, DA FAR ESEGUIRE AL POSTO DI QUELLO ATTUALE, E SCRIVERE NELLA TABELLA DELLE INTERRUZIONI, L'INDIRIZZO DELLA NUOVA PROCEDURA. ESEMPIO:riprogrammazione int 1Ch (timer tick). Si desidera questo interrupt mostra l'ora sul monitor.
INTERCETTARE UN INTERRUPT
IL NUOVO GESTORE DI INTERRUPT TERMINA CON UN SALTO AL VECCHIO GESTORE
NECESSITA' DI MEMORIZZARE L'INDIRIZZO FISICO DEL VECCHIO INTERRUPT,
PRIMA DELLA SUAL RIPROGRAMMAZIONE
ESEMPIO: old_1c DB 0EAh ;codice macchina per jmp old_1c_o DW ? ;offeset dell'interrupt old_1c_s DW ? ;segmento dell'interrupt .... mov ah,53 ;servizio lettura ind. int mov al,1Ch ;interrupt richiesto int 21h ;chiamata dos ;ora es:bx puntano all'interrupt corrente mov old_int1c_o,bx ;salvo l'offset mov old_int1c_s,es ;salvo il segmento ..... ;riprogram. dell'interrupt new_int1c: ..... jmp old_1c ;salto al vecchio int. EsempiESEMPIO: clock.asmIn questo esempio viene intercettato l'INT08H per mostrare a video un contasecondi.L'INT08H viene generato dal PC ogni 55ms quindi dopo 18 volte e' trascorso circa un secondo e puo' essere aggiornato il monitor. In ogni caso sempre viene chiamato INT 08h orginale per mantenere integro
il sistema
ESEMPIO: keysound.asmKEYSOUND.ASM incercetta il gestore int09h per la tastiera per emettere un suono ad ogni pressione di un tastoint09h e viene emesso alla pressione ed al rialscio di un tasto il suono
invece viene generato solo alla pressione. In ogni caso viene sempre chiamato
il INT09H orginale per garantire il funzionamento della tastiera
ESEMPIO: scr2txt.asmRiprogrammazione dell'INT 05h collegato al tasto print screen per salvare il contenuto dello schermo 25x80 caratteri in un file di testo.In questo esempio viene riprogrammato l'interrupt e si perde la funzione
originale.
|