PkLab.net
Meccatronica
Italy - Basilicata - Matera
 
Robotica&Image processing Sistemi di controllo Applicazioni speciali Networking Didattica
 
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

  • BUS INDIRIZZI: seleziona un blocco e ne abilita una locazione precisa. La sua larchezza limita la dimensione del blocco
  • BUS DATI: passa le effettive infomazioni 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 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.
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 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

  • Stack Pointer (SP): Puntatore alla cima dell'area di stak
  • 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

MOV destinazione « sorgente

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, 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/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 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


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 

Il PKLAB aderisce ai principi Open Access della Dichiarazione di Berlino (Sito italiano)
[Home Page]  [System Control]   [Robotic & Image processing]   [Applicazioni Speciali]  [Didattica]   [Networking]   [Search]

Contatto:
Valid CSS!