PkLab.netMeccatronica |
Italy - Basilicata - Matera | ||||||
|
Home e contatti | ||||||
ARCHITETTURA DI UN SISTEMA BASATO SU MICROPROCESSORE Intel 8086
Nota: questo materiale è di proprietà di Pk Lab ed è utilizzabile liberamente
a condizione di citarne la fonte
Indice:
![]() BUS = Collezione di segnali elettronici che derivano da una sorgente comune ed eseguono una funzione comune
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 subrutines 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 registo
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'ISTRUCTION REGISTER contiene l'sitruzione che viene pasata 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.
CALCOLO DI UN INDIRIZZO FISICO DI UNA LOCAZIONE DI MEMORIA
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 conil 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
METODI DI INDIRIZZAMENTOIMMEDIATO: 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/OutputUNA 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
L'INDIRIZZAMENTO DI UNA PORTA I/O AVVIENE SULLO STESSO BUS INDIRIZZI USATO PER LA MEMORIA, CONSIDERANTO 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/OutputLE 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
UN DISPOSITIVO PUO' ESSERE ASSOCIATO A PIU' PORTE O INDIRIZZI DI I/O, CHE IN GENERE ESPLETANO FUNZIONI DI STATO, CONTROLLO E COMANDO TRA QUESTI DISPOSITIVI TROVIAMO: -tastiera, monitor, porta seriale e parallela, timer programmabile (PIT 8253), gestore interupt (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
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 ALTOmov 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 BASSOmov 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 STATOmov 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 |