Assembly Programming Tutorial #6 – Gli Interrupt

155 Views 0 Comment

GLI INTERRUPT

Un interrupt o interruzione è un evento che interrompe il normale flusso di esecuzione di un programma per eseguire procedure specifiche. Ad esempio una interruzione si può attivare quando:

  • Si verificano eventi scaturiti dai dispositivi esterni;
  • Condizioni eccezionali (es: divisione per zero);
  • Utilizzo di alcune funzionalità del sistema operativo.

Quando un interrupt viene attivato, si trasferisce il controllo del processore dal programma in esecuzione ad una procedura, chiamata routine di servizio dell’interrupt. Terminata l’esecuzione della routine di servizio, il processore riprende l’esecuzione del programma principale.

ATTIVAZIONE DI UN INTERRUPT

Per attivare la routine di servizio (ISR) relativa ad un certo interrupt si usa l’istruzione INT
sintassi: int <numero>
dove <numero> è un valore numerico compreso tra 0 e 255 (00h e FFh).
Cosa avviene quando si attiva un interrupt?
1. Viene interrotta l’esecuzione del programma corrente;
2. Viene salvato nello stack lo stato dei registri IP, CS, SF (flags);
3. L’interrupt inibisce la possibilità di ulteriori interruzioni (azzera il flag IF);
4. Viene prelevato dalla interrupt vector table (IVT) l’indirizzo del gestore di interrupt individuato da <numero>;
5. Salta alla ISR relativa all’interrupt (carica in CS:IP l’indirizzo prelevato);
6. Al termine della procedura, riabilita la possibilità di ulteriori interruzioni;
7. Ripristina i valori di IP, CS, SF dallo stack;
8. Reimposta il flusso del controllo all’istruzione successiva all’interruzione.

Ogni interruzione ha le sue sottofunzioni che devono essere specificate nel registro AH prima di essere attivata.

L’istruzione IRET conclude tutte le ISR, causando il ritorno del sistema nello stato precedente all’ultima interruzione.

INT 10h

SOTTOFUNZIONE (AH)                                SERVIZIO

00                                                                   Modalità video

01                                                                   Tipo del cursore

02                                                                   Posizione del cursore

03                                                                   Lettura posizione del cursore

05                                                                   Selezione della pagina video attiva

06/07                                                              Scrolling video

08/09/0A                                                         Lettura/scrittura di caratteri a video

0C/0D                                                             Lettura/scrittura di pixel

0E                                                                   Teletype output

13h                                                                 Scrive una stringa su un terminale

INT 16h

INT 16h / AH = 00h  legge un tasto premuto sulla tastiera (senza echo)
Restituisce:
AH = codice BIOS
AL = carattere ASCII
Se un tasto è stato premuto, viene rimosso dal buffer della tastiera

INT 16h / AH = 01h  verifica la battitura di un tasto nel buffer della tastiera
Restituisce:
ZF = 1 se non è stato premuto un tasto
ZF = 0 se è stato premuto un tasto
AH = codice BIOS
AL = carattere ASCII
Se un tasto è stato premuto, viene rimosso dal buffer della tastiera

INT 20h

L’ int 20h permette di terminare il programma e restituire il controllo al sistema operativo.
INT 20h è richiamato dall’istruzione RET

INT 21h

SOTTOFUNZIONE                                              SERVIZIO

01/02/05/07                                                          Lettura/scrittura/stampa di caratteri

09/0A                                                                    Lettura/scrittura di stringhe

0B/0C                                                                   Gestione tastiera

0E/19                                                                    Gestione dei drive

25/35                                                                     Programmazione di interrupt

2A/2C                                                                    Gestione data e ora

39/3A/3B/47                                                          Gestione directory

3C/3D/3E/3F/40/41/42/56                                     Gestione dei file

4C                                                                         Ritorno al sistema operativo.

N.B. LE SOTTOFUNZIONI DEGLI INTERRUPT SONO SPECIFICATE NELLA GUIDA IN LINEA DELL’ EMULATORE.

 

Nel prossimo articolo parleremo di come Scrivere il primo programma, se invece ti sei perso lo scorso articolo, si è parlato delle Istruzioni di trasferimento dei dati.

Stai cercando altre guide? Allora dai uno sguardo alla nostra raccolta dedicata alla Programmazione Assembly.

Alla prossima!


Continua a seguirci su:

Facebook Instagram Telegram Rss
0 Comments

Leave a Comment