SlideShare a Scribd company logo
1
Appunti Sistemi – Lezione del 16/05/2019
INTERRUZIONI 8086
Quando una CPU deve acquisire dati da un dispositivo di INPUT o trasferire dati ad un dispositivo di
OUTPUT, deve prima verificare se l’interfaccia di I/O è pronta per la comunicazione. A tale scopo le
interfacce di I/O dispongono di un registro di stato, i cui flag indicano se il trasferimento è consentito
o meno.
Le modalità di colloquio del microprocessore con i dispositivi di I/O si possono distinguere in due
categorie:
 tecnica del polling
 tecnica delle Interruzioni
1. LA TECNICA DEL POLLING
In questo caso il microprocessore, mediante opportune istruzioni, controlla periodicamente (ogni
tot secondi) lo stato delle interfacce di I/O collegate al bus del sistema.
A tale scopo, il microprocessore legge ciclicamente il flag di stato di ciascuna interfaccia di I/O e in
base al loro valore attiva o meno le istruzioni necessarie per la comunicazione.
Questa tecnica di colloquio è poco efficiente, in quanto richiede un elevato impegno della CPU.
2. LA TECNICA DELLE INTERRUZIONI
Il modo più efficiente di gestire il colloquio tra la CPU e le periferiche è quello delle interruzioni.
Le interruzioni o interrupt sono delle primitive del DOS che comunicano alla CPU il verificarsi di un
evento, ad esempio la richiesta di scambio dati con una periferica.
Un'interruzione può essere provocata da:
 dispositivi esterni che richiedono un servizio
 dal processore stesso in seguito a particolari condizioni interne (eccezioni)
 dal software (si interrompe un programma in esecuzione e parte un altro processo)
Le Interruzioni provocate dall'hardware esterno (brevemente interruzioni hardware) possono
essere di tue tipi:
 mascherabili
o possono essere ignorate dalla CPU, che non deve per forza rispondere
o agiscono sul pin INTR del processore;
 non mascherabili
o non possono essere ignorate dalla CPU
o agiscono sul pin NMI del processore
Al verificarsi di un’interruzione software la CPU interrompe il programma in esecuzione (processo)
ed esegue un sottoprogramma, chiamato routine di interrupt, allocato ad uno specifico indirizzo
2
della ROM (BIOS) programmata dal costruttore della scheda madre. Terminata la routine
d'interrupt, la CPU torna al programma precedentemente interrotto e ne prosegue l'esecuzione.
SINTASSI
Le interruzioni o interrupt sono delle primitive del DOS e vengono chiamate in ASSEMBLER per chiedere, da
parte dell’utente, i servizi e le funzioni erogati dal DOS.
Sono caratterizzate dalla parola chiave INT e sono riunite in famiglie o gruppi individuati dal numero
esadecimale che segue la parola chiave INT.
In tutte le chiamate il valore contenuto nel registro AH contiene il numero della funzione che deve essere
eseguita.
Altri parametri possono essere richiesti in altri registri.
Noi vedremo in particolare la famiglia di interruzioni che gestiscono il video.
Interruzione INT 10h (si legge ”int uno zero h”): Famiglia di procedure per la gestione del video
AH=02 Determina la posizione del cursore
— Parametri in ingresso:
AH = 2
DH = numero di riga
DL = numero di colonna
BH = numero della pagina video
— Parametri in uscita: Nessuno
Con questo servizio si può determinare la posizione del cursore sul video, ponendo in DH il numero della riga
(da 0 a 24) e in DL quello della colonna (da 0 a 39 oppure da 0 a 79) in cui si vuol posizionare il cursore; in BH
va posto il numero della pagina di visualizzazione utilizzata.
AH = 09h Scrive carattere alla posizione del cursore
— Parametri in ingresso
AH = 09
AL = codice ASCII del carattere da scrivere
BH = numero della pagina video
BL = attributo del carattere (*)
CX = numero di volte per cui va ripetuta la scrittura
— Parametri in uscita: Nessuno
Il carattere i l cui codice ASCII è specificato in AL viene scritto nella pagina video indicata in BH, con
l'attributo specificato in BL alla posizione corrente del cursore. CX indica il numero di volte per cui ripetere
l'operazione: i caratteri vengono scritti uno di seguito all'altro, ma all'uscita dall'interruzione la posizione del
cursore risulta quella iniziale, per cui se la si vuole modificare occorre ricorrere alla funzione con AH = 02
(*)
3
Ad esempio per colorare una riga basterebbe spostare il cursore con lo spazio, impostando
opportunamente il byte d’attributo.
Lo spazio ha codice ASCII 32 (in decimale)
Le cifre da 0 a 9 hanno codice ASCII da 48 a 57 (in decimale)
Le lettere maiuscole hanno codice ASCII da 65 a 90 (in decimale), ogni lettera va caricata nel registro AL.
Le lettere minuscole hanno codice ASCII da 97 a 122 (in decimale)
AH = 0E Scrive con modalità telescrivente facendo spostare il cursore in automatico di una
posizione a destra
— Parametri in ingresso
AH = 0E
AL = codice ASCII del carattere da scrivere
BH = numero della pagina video
BL = attributo del carattere (solo nelle modalità grafiche)
— Parametri in uscita: Nessuno
Questa richiesta di interruzione scrive i l carattere specificato in AL sulla pagina video da BH alla posizione
corrente del cursore, che successivamente viene fatto avanzare.
Sono interpretati e convertiti nelle corrispondenti azioni anche i codici ASCII di BACKSPACE (08, indietro) e
CARRIAGE RETURN (0D, ritorno a capo),
4
All’avvio la RAM è vuota e poi si riempie: ecco come è organizzato il nostro MegaByte di memoria
nell’8086
Il microprocessore 8086 gestisce le interruzioni nel seguente modo.
La CPU, se precedentemente abilitata a ricevere interruzioni, alla fine di ogni istruzione (nell’ultimo ciclo di
clock dell’ultimo ciclo macchina) testa la condizione dei suoi piedini di INTERRUPT (in genere due: prima NMI
(non mascherabile) e poi INTR (mascherabile)
Se uno dei due piedini è alto (cioè è ad 1), la CPU esegue l’interruzione.
Il piedino NMI è di sistema, il programmatore può pilotare solo INTER.
Esistono le istruzioni equivalente a CLI (Clear Interrupt flag, , porta ad 1 il flag dell’interruzione) e a STI (Set
Interrupt, porta a zero il flag dell’interruzione).
Quando arriva la richiesta d’interruzione, la CPU deve sapere dove sta la prima istruzione del nuovo
programma da eseguire e deve memorizzare dove si trova l’ultima istruzione del programma che sta
eseguendo.
Ricordiamo che la memoria è gestita in modo segmentato
5
CS : IP
Cioè
Code Segment: Instruction Pointer
Nel seguente schema ogni riga corrisponde a 2 Byte ed ogni vettore d’interruzione è rappresentato dalla
coppia IP, CS (CS è un registro a16 bit)
Nei primi 1024 Byte ci sono 1024:4=256 vettori.
Quindi i vettori d’interruzione vanno da 0 a 255.
Il primo KByte della memoria di un 8086 è destinato alla "tabella dei vettori d'interruzione", che contiene 256
indirizzi.
Ciascuno di questi indirizzi viene detto vettore d'interruzione ed identifica il TIPO. Il vettore d'interruzione
dell'INT 0 sta all'indirizzo zero e occupa 4 byte, il vettore dell'INT 1 sta all'indirizzo 4, in generale il vettore
dell'INT n si trova all'indirizzo (n* 4).
I tipi da 0 a 31 non sono utilizzabili dal programmatore perché sono di sistema.
Ad esempio INT 0 è il vettore che lancia la procedura quando un programma effettua la divisione per zero.
6
STACK
La stack è una struttura dati che risiede nella memoria principale ed è molto usata nella programmazione a
basso livello. Si tratta di un'area di memoria nella quale l'accesso ai dati avviene in modo LIFO (Last In First
Out). Per noi lo Stack rappresenta la terza area di memoria, la prima è il Code Segment, la seconda è il Data
Segment. Per non incorrere in inconvenienti sarebbe meglio tenere separate le tre zone.
Una struttura LIFO è tale che l'ultimo elemento che arriva è anche il primo che viene ripreso e servito (si pensi
ad esempio ad una pila di piatti puliti da mettere a posto).
Il registro di segmento che viene usato è SS (Stack Segment), mentre l'offset è SP (Stack Pointer). L'indirizzo
dell'ultima word che è stata messa nello stack è perciò SS:SP.
Lo "stack pointer" indica sempre l'ultimo elemento dello stack, cioè l'indirizzo in memoria dell'ultimo valore
che vi è stato immesso.
N.B. Invece in una coda il primo che arriva è il primo ad essere servito secondo la modalità FIFO (Firts In First
Out), come la coda allo sportello di un ufficio postale.
Si lavora sullo stack con due istruzioni: PUSH e POP.
PUSH ("spingi") immette un nuovo valore all'interno dello stack; POP lo toglie (to pop out significa "uscire
precipitosamente").
Nell’8086 il program counter coincide con CS:IP. Nel caso ci sia una richiesta d’interruzione la CPU mette in
atto le seguenti operazioni elementari:
 salva nella memoria di STACK il valore corrente del PROGRAM COUNTER,
 aggiorna il contenuto dello STACK POINTER,
 determina quale dispositivo ha richiesto l’interruzione,
 inserisce nel PROGRAM COUNTER l’indirizzo da cui inizia la nuova subroutine di servizio
 procede alla esecuzione della subroutine di servizio.
7
Terminata la routine di servizio dell'interruzione il microprocessore
 ricarica nel PROGRAM COUNTER l' indirizzo precedentemente memorizzato nella memoria di STACK,
 aggiorna lo STACK POINTER
 continua il programma dall' istruzione immediatamente successiva a quella in cui si era verificata la
richiesta di interruzione.
N.B. Quando si attiva un’interruzione, solo il contenuto del Program Counter vienememorizzato
automaticamente nello Stack; per cui se si ritiene necessario salvare anche il contenuto di altri registri interni
della CPU, occorre farlo con istruzioni specifiche all'inizio della subroutine di servizio (PUSH a 16 bit) e
ristabilisce poi la situazione di partenza prima di rientrare nel programma principale (usando ad esempio
l’istruzione di POP).
La sintassi delle istruzioni PUSH e POP, in un 8086, è la seguente:
L’operando di PUSH e di POP può essere un registro di 16 bit o una word recuperata dalla memoria, ma
nell'8086 non può essere un valore immediato.
Dunque nell'8086 tutte le operazioni sullo stack sono solo a 16 bit, non è permesso fare PUSH o POP di valori
di 8 bit.

More Related Content

What's hot

Assembly level language
Assembly level languageAssembly level language
Assembly level language
PDFSHARE
 
SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)
SUNODH GARLAPATI
 
Microprocessor 8086 instruction description
Microprocessor 8086 instruction descriptionMicroprocessor 8086 instruction description
Microprocessor 8086 instruction description
Dheeraj Suri
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
MikeNandes
 
implementation of data instrucions in emu8086
implementation of data instrucions in emu8086implementation of data instrucions in emu8086
implementation of data instrucions in emu8086
COMSATS Abbottabad
 
Assembly Language Lecture 4
Assembly Language Lecture 4Assembly Language Lecture 4
Assembly Language Lecture 4
Motaz Saad
 
8086
80868086
Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!
Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!
Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!
CONFIANCE LANCAMENTOS NITERÓI
 
Assembly Language Lecture 3
Assembly Language Lecture 3Assembly Language Lecture 3
Assembly Language Lecture 3
Motaz Saad
 
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8
Theodoros Leftheroudis
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoElaine Cecília Gatto
 
Seven segment interfacing with 8051.pdf
Seven segment interfacing with 8051.pdfSeven segment interfacing with 8051.pdf
Seven segment interfacing with 8051.pdf
Srikrishna Thota
 
Apresentação dev ios
Apresentação dev iosApresentação dev ios
Apresentação dev ios
Flavio Rabelo
 
Operation of 8255A
Operation of 8255AOperation of 8255A
Operation of 8255A
Anuj Yadav
 
Medidor de pH com calibração de pH e compensação automática de temperatura - ...
Medidor de pH com calibração de pH e compensação automática de temperatura - ...Medidor de pH com calibração de pH e compensação automática de temperatura - ...
Medidor de pH com calibração de pH e compensação automática de temperatura - ...
Bruno Pereira
 
29. 8086 microprocessor pin diagram
29. 8086 microprocessor pin diagram29. 8086 microprocessor pin diagram
29. 8086 microprocessor pin diagram
sandip das
 
Microcontroller part 4
Microcontroller part 4Microcontroller part 4
Microcontroller part 4
Keroles karam khalil
 
Instruction set of 8086
Instruction set of 8086Instruction set of 8086
Instruction set of 8086
Vijay Kumar
 
Tipos de Placa-Mãe
Tipos de Placa-MãeTipos de Placa-Mãe
Tipos de Placa-Mãe
Airin A.
 

What's hot (20)

Assembly level language
Assembly level languageAssembly level language
Assembly level language
 
SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)SPI introduction(Serial Peripheral Interface)
SPI introduction(Serial Peripheral Interface)
 
Microprocessor 8086 instruction description
Microprocessor 8086 instruction descriptionMicroprocessor 8086 instruction description
Microprocessor 8086 instruction description
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
implementation of data instrucions in emu8086
implementation of data instrucions in emu8086implementation of data instrucions in emu8086
implementation of data instrucions in emu8086
 
Assembly Language Lecture 4
Assembly Language Lecture 4Assembly Language Lecture 4
Assembly Language Lecture 4
 
8086
80868086
8086
 
Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!
Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!
Parque das Águas Alcantara (21) 3073-3201 DESCONTO ESPECIAL CONSULTE-NOS!
 
Assembly Language Lecture 3
Assembly Language Lecture 3Assembly Language Lecture 3
Assembly Language Lecture 3
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ 8
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introdução
 
Seven segment interfacing with 8051.pdf
Seven segment interfacing with 8051.pdfSeven segment interfacing with 8051.pdf
Seven segment interfacing with 8051.pdf
 
Apresentação dev ios
Apresentação dev iosApresentação dev ios
Apresentação dev ios
 
Operation of 8255A
Operation of 8255AOperation of 8255A
Operation of 8255A
 
Medidor de pH com calibração de pH e compensação automática de temperatura - ...
Medidor de pH com calibração de pH e compensação automática de temperatura - ...Medidor de pH com calibração de pH e compensação automática de temperatura - ...
Medidor de pH com calibração de pH e compensação automática de temperatura - ...
 
29. 8086 microprocessor pin diagram
29. 8086 microprocessor pin diagram29. 8086 microprocessor pin diagram
29. 8086 microprocessor pin diagram
 
Microcontroller part 4
Microcontroller part 4Microcontroller part 4
Microcontroller part 4
 
Instruction set of 8086
Instruction set of 8086Instruction set of 8086
Instruction set of 8086
 
Tipos de Placa-Mãe
Tipos de Placa-MãeTipos de Placa-Mãe
Tipos de Placa-Mãe
 

Similar to Appunti interrupt 8086

Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
samu97
 
Hardware e software
Hardware e softwareHardware e software
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19Ionela
 
Presentazione microprocessore
Presentazione microprocessorePresentazione microprocessore
Presentazione microprocessore
Oleg Stoianov
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
Bruno Montalto
 
1informaticadibase 110602151357 Phpapp02
1informaticadibase 110602151357 Phpapp021informaticadibase 110602151357 Phpapp02
1informaticadibase 110602151357 Phpapp02Formazioneenna Enna
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
Bruno Montalto
 
Cell Programming 2
Cell Programming 2Cell Programming 2
Cell Programming 2
Vincenzo De Maio
 
Architettura dei calcolatori
Architettura dei calcolatoriArchitettura dei calcolatori
Architettura dei calcolatori
kaliaragorn
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowGiacomo Antonino Fazio
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
Giacomo Antonino Fazio
 
Architetture dei calcolatori elettronici
Architetture dei calcolatori elettroniciArchitetture dei calcolatori elettronici
Architetture dei calcolatori elettronici
Matteo Ceserani
 
Lezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 oreLezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 ore
Mirko Mancin
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
Davide Mercanti
 
Assembly and Reverse Engineering
Assembly and Reverse EngineeringAssembly and Reverse Engineering
Assembly and Reverse Engineering
luigi capuzzello
 
An IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionAn IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotion
Jennifer De Filicaia
 

Similar to Appunti interrupt 8086 (20)

Il pic 16 f84a
Il pic 16 f84aIl pic 16 f84a
Il pic 16 f84a
 
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
 
Hardware e software
Hardware e softwareHardware e software
Hardware e software
 
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
 
Presentazione microprocessore
Presentazione microprocessorePresentazione microprocessore
Presentazione microprocessore
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
1informaticadibase 110602151357 Phpapp02
1informaticadibase 110602151357 Phpapp021informaticadibase 110602151357 Phpapp02
1informaticadibase 110602151357 Phpapp02
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
Cell Programming 2
Cell Programming 2Cell Programming 2
Cell Programming 2
 
Assembly2
Assembly2Assembly2
Assembly2
 
Architettura dei calcolatori
Architettura dei calcolatoriArchitettura dei calcolatori
Architettura dei calcolatori
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
Modulo 1 - Lezione 2
Modulo 1 - Lezione 2Modulo 1 - Lezione 2
Modulo 1 - Lezione 2
 
Architetture dei calcolatori elettronici
Architetture dei calcolatori elettroniciArchitetture dei calcolatori elettronici
Architetture dei calcolatori elettronici
 
Lezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 oreLezione 2 arduino - corso 20 ore
Lezione 2 arduino - corso 20 ore
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
 
Assembly and Reverse Engineering
Assembly and Reverse EngineeringAssembly and Reverse Engineering
Assembly and Reverse Engineering
 
An IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotionAn IoT prototype: from ideation to promotion
An IoT prototype: from ideation to promotion
 
Cpu
CpuCpu
Cpu
 

Appunti interrupt 8086

  • 1. 1 Appunti Sistemi – Lezione del 16/05/2019 INTERRUZIONI 8086 Quando una CPU deve acquisire dati da un dispositivo di INPUT o trasferire dati ad un dispositivo di OUTPUT, deve prima verificare se l’interfaccia di I/O è pronta per la comunicazione. A tale scopo le interfacce di I/O dispongono di un registro di stato, i cui flag indicano se il trasferimento è consentito o meno. Le modalità di colloquio del microprocessore con i dispositivi di I/O si possono distinguere in due categorie:  tecnica del polling  tecnica delle Interruzioni 1. LA TECNICA DEL POLLING In questo caso il microprocessore, mediante opportune istruzioni, controlla periodicamente (ogni tot secondi) lo stato delle interfacce di I/O collegate al bus del sistema. A tale scopo, il microprocessore legge ciclicamente il flag di stato di ciascuna interfaccia di I/O e in base al loro valore attiva o meno le istruzioni necessarie per la comunicazione. Questa tecnica di colloquio è poco efficiente, in quanto richiede un elevato impegno della CPU. 2. LA TECNICA DELLE INTERRUZIONI Il modo più efficiente di gestire il colloquio tra la CPU e le periferiche è quello delle interruzioni. Le interruzioni o interrupt sono delle primitive del DOS che comunicano alla CPU il verificarsi di un evento, ad esempio la richiesta di scambio dati con una periferica. Un'interruzione può essere provocata da:  dispositivi esterni che richiedono un servizio  dal processore stesso in seguito a particolari condizioni interne (eccezioni)  dal software (si interrompe un programma in esecuzione e parte un altro processo) Le Interruzioni provocate dall'hardware esterno (brevemente interruzioni hardware) possono essere di tue tipi:  mascherabili o possono essere ignorate dalla CPU, che non deve per forza rispondere o agiscono sul pin INTR del processore;  non mascherabili o non possono essere ignorate dalla CPU o agiscono sul pin NMI del processore Al verificarsi di un’interruzione software la CPU interrompe il programma in esecuzione (processo) ed esegue un sottoprogramma, chiamato routine di interrupt, allocato ad uno specifico indirizzo
  • 2. 2 della ROM (BIOS) programmata dal costruttore della scheda madre. Terminata la routine d'interrupt, la CPU torna al programma precedentemente interrotto e ne prosegue l'esecuzione. SINTASSI Le interruzioni o interrupt sono delle primitive del DOS e vengono chiamate in ASSEMBLER per chiedere, da parte dell’utente, i servizi e le funzioni erogati dal DOS. Sono caratterizzate dalla parola chiave INT e sono riunite in famiglie o gruppi individuati dal numero esadecimale che segue la parola chiave INT. In tutte le chiamate il valore contenuto nel registro AH contiene il numero della funzione che deve essere eseguita. Altri parametri possono essere richiesti in altri registri. Noi vedremo in particolare la famiglia di interruzioni che gestiscono il video. Interruzione INT 10h (si legge ”int uno zero h”): Famiglia di procedure per la gestione del video AH=02 Determina la posizione del cursore — Parametri in ingresso: AH = 2 DH = numero di riga DL = numero di colonna BH = numero della pagina video — Parametri in uscita: Nessuno Con questo servizio si può determinare la posizione del cursore sul video, ponendo in DH il numero della riga (da 0 a 24) e in DL quello della colonna (da 0 a 39 oppure da 0 a 79) in cui si vuol posizionare il cursore; in BH va posto il numero della pagina di visualizzazione utilizzata. AH = 09h Scrive carattere alla posizione del cursore — Parametri in ingresso AH = 09 AL = codice ASCII del carattere da scrivere BH = numero della pagina video BL = attributo del carattere (*) CX = numero di volte per cui va ripetuta la scrittura — Parametri in uscita: Nessuno Il carattere i l cui codice ASCII è specificato in AL viene scritto nella pagina video indicata in BH, con l'attributo specificato in BL alla posizione corrente del cursore. CX indica il numero di volte per cui ripetere l'operazione: i caratteri vengono scritti uno di seguito all'altro, ma all'uscita dall'interruzione la posizione del cursore risulta quella iniziale, per cui se la si vuole modificare occorre ricorrere alla funzione con AH = 02 (*)
  • 3. 3 Ad esempio per colorare una riga basterebbe spostare il cursore con lo spazio, impostando opportunamente il byte d’attributo. Lo spazio ha codice ASCII 32 (in decimale) Le cifre da 0 a 9 hanno codice ASCII da 48 a 57 (in decimale) Le lettere maiuscole hanno codice ASCII da 65 a 90 (in decimale), ogni lettera va caricata nel registro AL. Le lettere minuscole hanno codice ASCII da 97 a 122 (in decimale) AH = 0E Scrive con modalità telescrivente facendo spostare il cursore in automatico di una posizione a destra — Parametri in ingresso AH = 0E AL = codice ASCII del carattere da scrivere BH = numero della pagina video BL = attributo del carattere (solo nelle modalità grafiche) — Parametri in uscita: Nessuno Questa richiesta di interruzione scrive i l carattere specificato in AL sulla pagina video da BH alla posizione corrente del cursore, che successivamente viene fatto avanzare. Sono interpretati e convertiti nelle corrispondenti azioni anche i codici ASCII di BACKSPACE (08, indietro) e CARRIAGE RETURN (0D, ritorno a capo),
  • 4. 4 All’avvio la RAM è vuota e poi si riempie: ecco come è organizzato il nostro MegaByte di memoria nell’8086 Il microprocessore 8086 gestisce le interruzioni nel seguente modo. La CPU, se precedentemente abilitata a ricevere interruzioni, alla fine di ogni istruzione (nell’ultimo ciclo di clock dell’ultimo ciclo macchina) testa la condizione dei suoi piedini di INTERRUPT (in genere due: prima NMI (non mascherabile) e poi INTR (mascherabile) Se uno dei due piedini è alto (cioè è ad 1), la CPU esegue l’interruzione. Il piedino NMI è di sistema, il programmatore può pilotare solo INTER. Esistono le istruzioni equivalente a CLI (Clear Interrupt flag, , porta ad 1 il flag dell’interruzione) e a STI (Set Interrupt, porta a zero il flag dell’interruzione). Quando arriva la richiesta d’interruzione, la CPU deve sapere dove sta la prima istruzione del nuovo programma da eseguire e deve memorizzare dove si trova l’ultima istruzione del programma che sta eseguendo. Ricordiamo che la memoria è gestita in modo segmentato
  • 5. 5 CS : IP Cioè Code Segment: Instruction Pointer Nel seguente schema ogni riga corrisponde a 2 Byte ed ogni vettore d’interruzione è rappresentato dalla coppia IP, CS (CS è un registro a16 bit) Nei primi 1024 Byte ci sono 1024:4=256 vettori. Quindi i vettori d’interruzione vanno da 0 a 255. Il primo KByte della memoria di un 8086 è destinato alla "tabella dei vettori d'interruzione", che contiene 256 indirizzi. Ciascuno di questi indirizzi viene detto vettore d'interruzione ed identifica il TIPO. Il vettore d'interruzione dell'INT 0 sta all'indirizzo zero e occupa 4 byte, il vettore dell'INT 1 sta all'indirizzo 4, in generale il vettore dell'INT n si trova all'indirizzo (n* 4). I tipi da 0 a 31 non sono utilizzabili dal programmatore perché sono di sistema. Ad esempio INT 0 è il vettore che lancia la procedura quando un programma effettua la divisione per zero.
  • 6. 6 STACK La stack è una struttura dati che risiede nella memoria principale ed è molto usata nella programmazione a basso livello. Si tratta di un'area di memoria nella quale l'accesso ai dati avviene in modo LIFO (Last In First Out). Per noi lo Stack rappresenta la terza area di memoria, la prima è il Code Segment, la seconda è il Data Segment. Per non incorrere in inconvenienti sarebbe meglio tenere separate le tre zone. Una struttura LIFO è tale che l'ultimo elemento che arriva è anche il primo che viene ripreso e servito (si pensi ad esempio ad una pila di piatti puliti da mettere a posto). Il registro di segmento che viene usato è SS (Stack Segment), mentre l'offset è SP (Stack Pointer). L'indirizzo dell'ultima word che è stata messa nello stack è perciò SS:SP. Lo "stack pointer" indica sempre l'ultimo elemento dello stack, cioè l'indirizzo in memoria dell'ultimo valore che vi è stato immesso. N.B. Invece in una coda il primo che arriva è il primo ad essere servito secondo la modalità FIFO (Firts In First Out), come la coda allo sportello di un ufficio postale. Si lavora sullo stack con due istruzioni: PUSH e POP. PUSH ("spingi") immette un nuovo valore all'interno dello stack; POP lo toglie (to pop out significa "uscire precipitosamente"). Nell’8086 il program counter coincide con CS:IP. Nel caso ci sia una richiesta d’interruzione la CPU mette in atto le seguenti operazioni elementari:  salva nella memoria di STACK il valore corrente del PROGRAM COUNTER,  aggiorna il contenuto dello STACK POINTER,  determina quale dispositivo ha richiesto l’interruzione,  inserisce nel PROGRAM COUNTER l’indirizzo da cui inizia la nuova subroutine di servizio  procede alla esecuzione della subroutine di servizio.
  • 7. 7 Terminata la routine di servizio dell'interruzione il microprocessore  ricarica nel PROGRAM COUNTER l' indirizzo precedentemente memorizzato nella memoria di STACK,  aggiorna lo STACK POINTER  continua il programma dall' istruzione immediatamente successiva a quella in cui si era verificata la richiesta di interruzione. N.B. Quando si attiva un’interruzione, solo il contenuto del Program Counter vienememorizzato automaticamente nello Stack; per cui se si ritiene necessario salvare anche il contenuto di altri registri interni della CPU, occorre farlo con istruzioni specifiche all'inizio della subroutine di servizio (PUSH a 16 bit) e ristabilisce poi la situazione di partenza prima di rientrare nel programma principale (usando ad esempio l’istruzione di POP). La sintassi delle istruzioni PUSH e POP, in un 8086, è la seguente: L’operando di PUSH e di POP può essere un registro di 16 bit o una word recuperata dalla memoria, ma nell'8086 non può essere un valore immediato. Dunque nell'8086 tutte le operazioni sullo stack sono solo a 16 bit, non è permesso fare PUSH o POP di valori di 8 bit.