Interrupt
(il cod. op. INT sta per INTERRUPT)
„
Tutto il sistema del computer va visto come composto da sottosistemi hardware (la tastiera,
il monitor, la stampante, l’hard disk, etc.) e da sottosistemi software, programmi che stanno
funzionando, di cui il più importante è il Sistema Operativo.
„
La tecnica più impiegata in un computer per far comunicare fra di loro questi sottosistemi è
quella degli interrupt: ad esempio quando noi pigiamo un tasto la tastiera, oltre ad inviare il
codice del tasto, invia anche un interrupt al sistema che significa, per l’appunto, “tasto
premuto”.
„
In linea teorica un programma per non combinare dei guai deve poter interagire SOLO con
il Sistema Operativo. Se, ad esempio, un programma deve visualizzare una scritta sul
video oppure leggere un dato dalla tastiera (operazioni che vedremo più avanti) deve
chiederlo al Sistema Operativo e per farlo deve impiegare degli interrupt.
„
Per chiedere un servizio a un sistema operativo non è sufficiente il numero dell’interrupt
ma bisogna proprio specificare il sevizio (solitamente attraverso il registro AX), questo
perché i servizi sono moltissimi ed evolvono con i sistemi operativi.
„
In pratica bisogna vedere il sistema operativo come un programma supervisore che ci
mette a disposizione dei procedimenti per comunicare con le altri parti del computer. Per
accedere a questi procedimenti dobbiamo vedere in un manuale di programmazione (o in
un manuale di interrupts) prima quale è l’interrupt che fornisce il servizio e poi, visto che un
interrupt con un certo numero può fornire più servizi, il numero del servizio stesso.
1
MOV
INT
„
„
„
AX, 4C00h
21
Nel nostro programma l’impiego dell’INT 21, servizio 4Ch, dice al
sistema operativo che il programma è terminato.
Quando il sistema operativo riceve questa richiesta sa che può
riprendere il controllo della CPU per svolgere i propri compiti. Il
registro CS viene settato con un nuovo Code Segment (quello
del programma viene cancellato) e IP punta alla prossima
istruzione (del programma sistema operativo) da eseguire.
Questa è la sintassi completa di questo servizio riportata nel
manuale di programmazione del DOS:
-----------------------------------------------------INT 21 - DOS 2+ - QUIT WITH EXIT CODE (EXIT)
AH = 4Ch
AL = exit code to operative system
Return: never returns
------------------------------------------------------
2
Interrupt software
Vediamo qualche esempio di interrupt generabili da un nostro programma
-----------------------------------------------------INT 21 - DOS 2+ - GET CURRENT DIRECTORY
AH = 47h
DL = drive (0=default, 1=A, etc.)
DS:SI points to 64-byte buffer area
Return: CF = 1 if error
AX = Error Code
Note: the returned path does not include the initial backslash
-----------------------------------------------------INT 21 - DOS 2+ - RENAME A FILE
AH = 56h
DS:DX -> ASCIZ old name
ES:DI -> ASCIZ new name
Return: CF = 1 if error
AX = Error Code
Note: allows move between directories on same logical volume
(DOS 3.x) allows renaming of directories
-----------------------------------------------------INT 33 - DOS 3+ - MS MOUSE RETURN POSITION AND BUTTON STATUS
AX = 0003h
Return: BX = button status
bit 0 left button pressed if 1
bit 1 right button pressed if 1
bit 2 middle button pressed if 1 (Mouse Systems mouse)
CX = column
DX = row
------------------------------------------------------
„
3
Interrupt interni e Interrupt hardware
E adesso qualche altro tipo di interrupt non generabili, però, dai nostri programmi:
-----------------------------------------------------INT 04 - internal - OVERFLOW
Generated by INTO instruction if OF flag is set. If flag is not set, INTO
is effectively a NOP. Used to trap any arithmetic errors before the
erroneous results propagate further through the computation.
-----------------------------------------------------INT 06 - internal - UNDEFINED OPCODE (80286)
-----------------------------------------------------INT 00 - internal - DIVIDE ERROR
Automatically called at end of DIV or IDIV operation that results in error
or overflow.
-----------------------------------------------------INT 09 - hardware - IRQ1 - KEYBOARD INTERRUPT
Generated when data is received from the keyboard.
-----------------------------------------------------INT 0E - hardware - IRQ6 - DISKETTE INTERRUPT
Generated by floppy disk controller on completion of an operation
-----------------------------------------------------INT 0C - hardware - IRQ4 - COM1 INTERRUPT
-----------------------------------------------------INT 02 - hardware - NMI (NON-MASKABLE INTERRUPT)
Generated by NMI signal in hardware.
This signal has various uses:Parity error, Disk-controller power, System suspended, …
-----------------------------------------------------„
4
Classificazioni degli Interrupt
SOFTWARE
INTERNAL
Generati da un programma (anche un nostro
programma) e sono impiegati per chiedere
un servizio al sistema operativo
Generati dalla CPU e, di massima, sono anche
questi impiegati per richiedere un servizio al
sistema operativo (ad es. per visualizzare un
msg di errore)
HARDWARE
Generati da una periferica / dispositivo
hardware verso la CPU
MASKABLE
Mascherabili (e quindi, ignorabili) dalla CPU
(esiste un cod. op. che dice alla CPU di
ignorare gli interrupt)
INTERRUPT
NON
MASKABLE
Non mascherabili
5
Classificazioni degli Interrupt
„
„
„
„
„
Quindi gli interrupt possono essere: SOFTWARE, INTERNAL o HARDWARE.
Quelli Software sono generati dai programmi. In caso di errori del programma è
la CPU a generare direttamente un interrupt, in questo caso definiti internal, e
servono per dire al sistema operativo che bisogna visualizzare un messaggio di
errore all’utente (anche la CPU comunica con il sistema operativo tramite
interrupt)
Quelli Hardware non sono divisi per servizio (quando si parla di servizio si
intende di servizi da richiedere al sistema operativo), come quelli software, ma
per IRQ (che sta per interrupt request e che significa che un dispositivo ha fatto
una richiesta di interrupt, di interruzione, alla CPU) e sono generati dalle
periferiche (tastiera, stampante, floppy, hard disk, porta seriale, etc...) verso la
CPU.
La CPU quando riceve un interrupt interrompe (da cui il nome) le operazioni che
stava svolgendo per verificare cosa è accaduto ed, eventualmente, eseguire
una parte di programma associata all’interrupt ricevuto.
In certi casi, quando la CPU sta svolgendo un compito delicato, maschera gli
interrupt, nel senso che li ignora. Alcuni interrupt sono, però, molto importanti e
non possono essere ignorati, ad esempio quando l’utente preme il pulsante di
sospensione, oppure quando viene a mancare la corrente ... Questi interrupt
sono definiti NMI, ovvero INTERRUPT NON MASCHERABILI
6