PDA

Visualizza la versione completa : [Pascal] Gestione degli INTERRUPT


Habdul
07-05-2002, 07:00
Ciao, ancora, raga!!!:ciauz:

Volevo chiedere a qualcuno di buona volontà di spiegarmi cosa diavolo sono sti maledetti INTERRUPT, e possibilmente spiegarmi come si usano in Turbo Pascal 7.0!!!

Grazie in anticipo!!! :D :D

JamesD
07-05-2002, 20:32
Gli interrupt sono dei segnali che arrivano direttamente alla cpu per avvisarla del verificarsi di un certo evento. Gli interrupt sono gestiti tramite alcune routine che sono all'interno del sistema operativo oppure dei driver per quanto riguarda la parte hardware. Quelli che interessano a te penso siano quelli software. Questi interrupt vengo richiamati quando vogliamo eseguire certe operazioni (per esempio attendere la pressione di un tasto).

Purtroppo pascal non l'ho mai utilizzato e non so come aiutarti, ma spero che la mia scarna spiegazione ti abbia un po chiarito le idee:D

Ciauz:ciauz:

Habdul
07-05-2002, 21:01
Grazie mille per la spiegazione!!!

JamesD
07-05-2002, 21:04
:)

giobe2000
07-05-2002, 22:08
Il discorso sugli interrupt Software e Hardware è piuttosto lungo e un po' troppo articolato per essere liquidato in quattro e quattr'otto...... Vediamo di fare un tentativo:

1) le periferiche esterne (come la tastiera, o la porta parallela o quella seriale) o interne (come il timer di sistema) possono richiamare il processore del nostro computer per ottenere la sua attenzione.

2) per costringere il processore ad eseguire una procedura di servizio esclusiva e a loro dedicata hanno a disposizione un certo numero di fili (dette "linee di richiesta d'interruzione", IRQ, Interrupt ReQuest, disponibili anche sui connettori (slot) interni del computer) sui quali si affrettano a mettere un livello logico "0"

3) il processore può essere INTERROTTO in ogni momento da una periferica che chiede di essere servita... ma le concederà le sue risorse SOLO SE VUOLE; la capacità di interruzione da parte della periferica può infatti essere MASCHERATA da programma, cioè noi programmatori possiamo evitare fastidi al processore.

4) se il processore è autorizzato a farsi interrompere (cioè se la eventuale richiesta d'interruzione è autorizzata da programma...) è costretto (anche se non ne ha voglia...) ad assicurare un servizio...

5) il processore assicura un servizio solo eseguendo particolari procedure, dedicate alle periferiche autorizzate, comunque INTERROMPENDO QUELLO CHE STA FACENDO.

6) per ogni linea d'interruzione IRQ viene assicurata d'ufficio una procedura, di solito riconosciuta dal sistema e dai programmatori con il nome di INT seguito da un numero, lo stesso dell'istruzione software dell'80x86 che è in grado di forzarne comunque l'esecuzione:
per IRQ0 (TIMER) la procedura si chiama INT 08H,
per IRQ1 (tastiera) è invece INT 09H ,
e così via...

7) dunque la richiesta d'interruzione della periferica viene soddisfatta eseguendo un programma il cui indirizzo (detto VETTORE) è annotato in una tabella presente in RAM (detta "TABELLA dei VETTORI"), nella posizione suggerita dal numero esadecimale che segue INT, potenzialmente da 00H a FFH.

8) naturalmente è facile capire che per le periferiche in grado di interrompere bastano poco più di una decina dei 256 (da 00H a FFH) numeri disponibili..

9) dunque la gran parte delle procedure puntate dai VETTORI della Tabella NON CORRISPONDONO al servizio delle INTERRUZIONI HARDWARE, ma sono comunque chiamate di procedure di sistema FONDAMENTALI NELLA PROGRAMMAZIONE a basso livello.

10) di fatto le chiamate di queste procedure apre orrizzonti impensabili, di solito dedicati ad un unico specifico dispositivo (sono dette INTERRUPT SOFTWARE); per esempio, se da software invoco:
INT 10H ho a disposizione tutte le funzioni VIDEO
INT 16H ho a disposizione gestione LETTURA TASTIERA
INT 33H ho a disposizione gestione MOUSE
INT 17H ho a disposizione gestione STAMPANTE
e così via....

Per usare le chiamate INT in Pascal (specie delle seconde, essendo le prime un po' troppo legate alla conoscenza dell'hardware..) conviene usare le istruzioni ASM .. end
e scrivere il programma direttamente in Assembly; solo così si può sfruttare a fondo la potenza delle procedure di sistema...

Per altro esistono istruzioni specifiche, come GetINTvec (e SetINTvec) che permettono di leggere in una "variabile puntatore" (o di scrivere in Tabella) l'indirizzo segmentato (CS:IP ...ops...) della procedura di servizio che si desidera coivolgere..

Giobe®2000 - Assembly & Turbo Pascal - Lezioni, programmi, segreti, trucchi
-----------------------------------------------------------------------------------------------------------------
www.giobe2000.it (http://www.giobe2000.it) - Conosci i meccanismi segreti che governano il tuo computer

JamesD
08-05-2002, 19:09
:stordita: :fagiano: :nonlodire :gren:

giobe2000
08-05-2002, 19:12
:stordita:

Giobe®2000 - Assembly & Turbo Pascal - Lezioni, programmi, segreti, trucchi
-----------------------------------------------------------------------------------------------------------------
www.giobe2000.it (http://www.giobe2000.it) - Conosci i meccanismi segreti che governano il tuo computer

Loading