SlideShare a Scribd company logo
2
Most read
3
Most read
4
Most read
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

PDF
Esercizi in linguaggio Assembly 8086
PPTX
scripting in Python
PDF
自作flutterアプリをリファクタリングしてみた!
PPT
Arp spoofing
PPTX
Using FPGA in Embedded Devices
PDF
Kamailio - Secure Communication
PDF
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)
Esercizi in linguaggio Assembly 8086
scripting in Python
自作flutterアプリをリファクタリングしてみた!
Arp spoofing
Using FPGA in Embedded Devices
Kamailio - Secure Communication
Intro to Single / Two Rate Three Color Marker (srTCM / trTCM)

What's hot (20)

PPTX
Diapositivas mpls
PPTX
Intermediate code generation1
PPTX
Módulo 5 Arquitetura de Computadores
PDF
S emb t13-freertos
PDF
Cisco Commands
PDF
Race conditions
PDF
CPU Verification
PDF
Iptables Configuration
DOCX
Trabalho sobre as memórias ram
PPTX
Top down and botttom up Parsing
PPTX
Segurança informática, navegação segura, vírus e pirataria
PDF
Project ACRN: SR-IOV implementation
PPT
Spanning Tree Protocol
PPT
Arquitetura de sistemas web
PDF
Ppl for students unit 1,2 and 3
PPT
Cs423 raw sockets_bw
PDF
Bootloaders
PPTX
Introducao as rede de computadores
PPTX
EIGRP (Enhanced Interior Gateway Routing Protocol)
PPTX
Advantages of VLAN
Diapositivas mpls
Intermediate code generation1
Módulo 5 Arquitetura de Computadores
S emb t13-freertos
Cisco Commands
Race conditions
CPU Verification
Iptables Configuration
Trabalho sobre as memórias ram
Top down and botttom up Parsing
Segurança informática, navegação segura, vírus e pirataria
Project ACRN: SR-IOV implementation
Spanning Tree Protocol
Arquitetura de sistemas web
Ppl for students unit 1,2 and 3
Cs423 raw sockets_bw
Bootloaders
Introducao as rede de computadores
EIGRP (Enhanced Interior Gateway Routing Protocol)
Advantages of VLAN
Ad

Similar to Appunti interrupt 8086 (20)

PPTX
Il pic 16 f84a
PDF
Microcontrollori
ODP
PDF
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
PPTX
Presentazione microprocessore
PPT
1informaticadibase 110602151357 Phpapp02
PPT
Informatica di base
PPT
Informatica di base
PDF
Cell Programming 2
PPT
Linguaggio assembly del processore 8086 (ita) 1
PPSX
Assembly2
PDF
Architettura dei calcolatori
PDF
Attacchi alle applicazioni basati su buffer overflow
PPT
Attacchi alle applicazioni basati su buffer overflow
PPSX
Modulo 1 - Lezione 2
PDF
Architetture dei calcolatori elettronici
PDF
Lezione 2 arduino - corso 20 ore
PDF
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
DOC
Assembly and Reverse Engineering
PPTX
An IoT prototype: from ideation to promotion
Il pic 16 f84a
Microcontrollori
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Presentazione microprocessore
1informaticadibase 110602151357 Phpapp02
Informatica di base
Informatica di base
Cell Programming 2
Linguaggio assembly del processore 8086 (ita) 1
Assembly2
Architettura dei calcolatori
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
Modulo 1 - Lezione 2
Architetture dei calcolatori elettronici
Lezione 2 arduino - corso 20 ore
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
Assembly and Reverse Engineering
An IoT prototype: from ideation to promotion
Ad

Recently uploaded (8)

PPTX
SLIDE-DE-CURSOS-OssssFICIAL-DA-EGEPI-.pptx
PDF
GIÁO ÁN CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512 (2 CỘT) NĂM HỌC ...
PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 FRIENDS GLOBAL - CẢ NĂM (24...
PDF
16 CHUYÊN ĐỀ BÀI TẬP ÔN THI TUYỂN SINH VÀO 10 - MÔN TIẾNG ANH - THEO FORM ĐỀ ...
PDF
GIÁO ÁN KẾ HOẠCH BÀI DẠY CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512...
PDF
Mazzoni-Reggi-2012-Effetto-Lucifero-Su-Wikipedia.pdf
PDF
CHUYÊN ĐỀ BỔ TRỢ NGỮ ÂM, TỪ VỰNG NÂNG CAO - TIẾNG ANH 9 VÀ ÔN THI VÀO LỚP 10 ...
PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 EXPLORE NEW WORLDS - CẢ NĂM...
SLIDE-DE-CURSOS-OssssFICIAL-DA-EGEPI-.pptx
GIÁO ÁN CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512 (2 CỘT) NĂM HỌC ...
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 FRIENDS GLOBAL - CẢ NĂM (24...
16 CHUYÊN ĐỀ BÀI TẬP ÔN THI TUYỂN SINH VÀO 10 - MÔN TIẾNG ANH - THEO FORM ĐỀ ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512...
Mazzoni-Reggi-2012-Effetto-Lucifero-Su-Wikipedia.pdf
CHUYÊN ĐỀ BỔ TRỢ NGỮ ÂM, TỪ VỰNG NÂNG CAO - TIẾNG ANH 9 VÀ ÔN THI VÀO LỚP 10 ...
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 EXPLORE NEW WORLDS - CẢ NĂM...

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.