Intel 8086 Microprocessor System Architeture
Table of Contents
- Intel 8086 Microprocessor System Architeture
- Interrupt managment on 80/86 microprocessor
- Programmable Interrupt Controller (PIC Intel 8259a)
- Demo Kernel Multitasking
- The Serial Port
- The Parallel Port
if you are intrested to receive information please write to
Elementi di base sulla architettura di un sistema a microprocessore. Viene presentato lo schema generale, i registri ed le principali operazioni con i bit

BUS = Collezione di segnali elettronici che derivano da una sorgente comune ed eseguono una funzione comune
- BUS INDIRIZZI: seleziona un blocco e ne abilita una locazione precisa. La sua larghezza limita la dimensione del blocco
- BUS DATI: passa le effettive informazioni tra il blocco abilitato e la CPU. La sua larghezza (8 bit nel 8088) influisce molto sulla velocità del calcolatore.
- BUS DI CONTROLLO: definisce il tipo di comunicazione (lettura o scrittura), apre e chiude il collegamento.
E' COMPITO DELLA CPU ATTIVARE CORRETTAMENTE OGNI BUS ED ASSICURARE UNA COMUNICAZIONE AFFIDABILE.
SCHEMA DELL'ARCHITETTURA INTERNA DI UN MICROPROCESSORE STANDARD
CONTATORE DI PROGRAMMA (PC): contiene l'indirizzo della successiva istruzione che deve essere eseguita
PUNTATORE ALLO STACK (SP): contiene l'indirizzo della cima dello stack, usato per trattare subroutine ed interruzioni
REGISTRI DI SEGMENTO: dividono la memoria in segmenti da 64kb. Vengono usati con altri registri a 16 bit per accedere a tutta la memoria disponibile.
REGISTRI INDICE: contengono l'offset rispetto ad un registro segmento. Servono ad accedere a blocchi di memoria con una sola istruzione.
REPERIMENTO DI UNA ISTRUZIONE DALLA MEMORIA (FETCHING)
FASE 1: trasferimento del contenuto del PC nel bus indirizzi, emissione segnale di lettura.
FASE 2: la memoria trasferisce sul bus dati il contenuto della cella di memoria all'indirizzo indicato.
FASE 3: l'INSTRUCTION REGISTER contiene l'istruzione che viene passata al decodificatore che la interpreta ed emette la sequenza di segnali necessari ad eseguirla
OSSERVAZIONE: Il PC è a soli 16 bit cioe' 216 byte (64Kb) di memoria indirizzabili.
OSSERVAZIONE: durante la decodifica ed esecuzione , il bus indirizzi resta inutilizzato
CALCOLO DI UN INDIRIZZO FISICO DI UNA LOCAZIONE DI MEMORIA
LA CPU CALCOLA AUTOMATICAMENTE L'INDIRIZZO FISICO (20 bit) DI UNA LOCAZIONE DI MEMORIA , UNENDO IL SUO INDIRIZZO LOGICO (16 bit) CON IL CONTENUTO DI UN ALTRO REGISTRO
Nel caso di una istruzione, il registro utilizzato automaticamente è CS, mentre l'indirizzo logico è PC. L'indirizzo fisico è CS:PC che è a 32 bit.
Nel caso dell 8086/88 l'indirizzo fisico da 20 bit è ottenuto sommando l'indirizzo logico con il valore del segmento shiftato di 4 posizioni a sinistra (moltiplicato 16)
IL PROGRAMMATORE PUO' AGIRE SUL CONTENUTO DEI REGISTRI DI SEGMENTO. INOLTRE PUO' DECIDERE DI VOLTA IN VOLTA QUALE REGISTRO DI SEGMENTO UTILIZZARE SCAVALCANDO L'IMPOSTAZIONE DI DEFAULT
I REGISTRI GENERALI DELL'8086/88
-GRUPPO DATI: sono registri a 16 bit a cui si può accedere anche separatamente ai 2 byte che li compongono, rispettivamente high e low
-GRUPPO PUNTATORI ED INDICI: registri a 16 bit
- Stack Pointer (SP): Puntatore alla cima dell'area di stack
- Base Pointer (BP):usato come registro base per i registri indice nelle funzioni di indicizzazione
- Source Index (SI): usato come registro di indirizzamento origine per i movimenti di blocchi di memoria
- Destination Index (DI): usato come registro di indirizzamento destinazione per i movimenti di blocchi di memoria
-REGISTRI DI SEGMENTAZIONE: sono registri a 16 bit che vengono utilizzati con altri registri per generare gli indirizzi a 20 bit.
- Code Segment (CS): inizio della locazione di memoria che contiene il programma da eseguire
- Data Segment (DS): primo byte della zona di memoria che contiene i dati.
- Stack Segment (SS):inizio della parte di memoria dedicata allo stack
- Extra Segment (ES): segmento da usare a seconda delle esigenze applicative.
METODI DI INDIRIZZAMENTO
IMMEDIATO: l'operando e' esplicito ed appare nell'istruzione es:
MOV AX,324 ;AX «324
A REGISTRO: l'operando è uno dei registri interni
MOV AX,BX ;AX « BX
DIRETTO: l'operando è contenuto in una variabile di memoria, che deve essere indicata completamente
MOV AX,var ;AX « var MOV AX,ES:var ;AX « ES:var
INDIRETTO A REGISTRO: l'operando è contenuto all'indirizzo contenuto in un registro. (questo registro contiene dunque un puntatore). Validi solo BX e SI
MOV AX,[SI] ;AX «[DS:SI] MOV AX,[BX] ;AX « [DS:BX]
INDIRETTO A REGISTRO CON SPOSTAMENTO: l'indirizzo dell'operando è dato dalla somma di una costante ed il contenuto di un registro interno
MOV AX,var[DI] ;AX « [DS:(var+DI)]
INDIRETTO A REGISTRO CON BASE + INDICE + COSTANTE:
MOV AX,var[BX][DI] ;AX «[DS:(var+DI+BX)]
PORTE DI Input/Output
UNA PORTA E' UN "POSTO" UNIVOCAMENTE IDENTIFICATO, PER LEGGERE E SCRIVERE DATI. NON FA PARTE DELLA MEMORIA DI SISTEMA (ROM e RAM)
INPUT: il microprocessore legge il contenuto di una porta di I/O
OUTPUT: Il microprocessore scrive in una porta di I/O
L'INDIRIZZAMENTO DI UNA PORTA I/O AVVIENE SULLO STESSO BUS INDIRIZZI USATO PER LA MEMORIA, CONSIDERANDO SOLO I PRIMI 16 BIT (dei 20 totali) 216=65.535 porte di I/O (0..FFFFh)
IL BUS DI CONTROLLO ATTIVA LA MEMORIA DI SISTEMA O UNA PORTA DI I/O A SECONDA DELL'ISTRUZIONE CORRENTE.
ISTRUZIONI e INDIRIZZAMENTO di Input/Output
LE ISTRUZIONI PER I/O SONO:
-Assembler
in accumulatore,porta out porta,accumulatore
Il numero della porta (il suo indirizzo) può essere una costante da un byte (indirizzamento fisso), o nel registro DX (indirizzamento variabile).
Se l'accumulatore è AL allora viene trasferito un byte, se AX due byte (quello indirizzato ed il successivo)
-C
int inport(int porta) /* word */ char inportb(int porta) /* byte */ outport(int porta,int valore) outportb(int porta, char valore)
In questo caso l'indirizzamento è sempre variabile, mentre esistono istruzioni differenti per trasferire un byte (char) o una parola (int).
DISPOSITIVI DI I/O
QUALSIASI COMPONENTE HW CONTROLLATO DAL SISTEMA
UN DISPOSITIVO PUO' ESSERE ASSOCIATO A PIU' PORTE O INDIRIZZI DI I/O, CHE IN GENERE SVOLGONO FUNZIONI DI STATO, CONTROLLO E COMANDO
TRA QUESTI DISPOSITIVI TROVIAMO:
-tastiera, monitor, porta seriale e parallela, timer programmabile (PIT 8253), gestore interrupt (PIC 8259), interfaccia parallela programmabile (PPI 8255), ecc...
ESEGUIRE UNA OPERAZIONI DI I/O SU UNA PORTA ASSOCIATA AD UN DISPOSITIVO, SIGNIFICA ACCEDERE DIRETTAMENTE AL DISPOSITIVO
PER MOLTI DISPOSITIVI VI SONO DEGLI INTERRUPT (DOS e/o BIOS) CHE VI ACCEDONO, COME PER LA PORTA SERIALE.
IN GENERALE SI ACCEDE ALLE PORTE DI UN DISPOSITIVO QUANDO NON ESISTE UN INT DEDICATO O SI DESIDERA UNA MAGGIORE VELOCITA'
MASCHERE DI BIT
SI UTILIZZANO PER ACCEDERE A SPECIFICI BIT ALL'INTERNO DI UN BYTE
ESEMPIO:
I pin 1..8 della porta parallela sono associati alla porta 378h. Il pin 1 è collegato direttamente al bit 0 .. il pin 8 al bit 7, della porta 378h. Per impostare ad alto (+5V) il pin 3 è necessario scrivere 1 nel bit 2 della 378h.
Come fare per non cambiare lo stato dei rimanenti pin ??
DB mask_bit_2 00000100b DW porta 0378h
PER IMPOSTARE AD ALTO
mov dx,porta in al,dx ;leggo lo stato attuale or al,mask_bit_2 ;metto alto il bit 2 out dx,al ;invio la modifica alla porta
PER IMPOSTARE BASSO
mov dx,porta in al,dx ;leggo lo stato attuale and al,NOT mask_bit_2 ;metto basso il bit 2 out dx,al ;invio la modifica alla porta
PER INVERTIRE LO STATO
mov dx,porta in al,dx ;leggo lo stato attuale xor al,mask_bit_2 ;inverto lo stato del bit 2 out dx,al ;invio la modifica alla porta
This work is property of Pk Lab. You can use it for free but you must retain author's copyright.