Programma in Assembly per CPU 8086

Materie:Tesina
Categoria:Sistemi

Voto:

1 (2)
Download:266
Data:25.09.2008
Numero di pagine:8
Formato di file:.doc (Microsoft Word)
Download   Anteprima
programma-assembly-cpu-8086_1.zip (Dimensione: 33.63 Kb)
trucheck.it_programma-in-assembly-per-cpu-8086.doc     83 Kb
readme.txt     59 Bytes



Testo

LABORATORIO DI SISTEMI
ALUNNO: Fratto Claudio
CLASSE: IV B Informatico
ESERCITAZIONE N°: 4
OGGETTO: Scrivere un programma in Assembly, per CPU 8086, utilizzando le porte ed i dispositivi virtuali collegate ad esse forniti dal software Emu8086, che effettuasse il controllo della temperatura di un ambiente.

SCHEMA
ALGORTMO

INDIRIZZI DELLE PORTE UTILIZZATE
Porta input: 0111 1101(2) corrispondente alla porta alla quale è collegato il trasduttore (termometro vituale);
Porta output: 0111 1111 (2) corrispondente alla porta alla quale è collegato l’attuatore (riscaldatore vituale);
Porta output: 1100 0111(2) corrispondente alla porta alla quale è collegato il display digitale;
FILE SORGENTE

; AUTHOR Claudio Fratto
; DATE 28-01-08
; VERSION 1.00
; FILE sistema_in_off_(temperatura).ASM
#MAKE_EXE#
; inizio definizione del segmento dei dati
data segment

min db 77 ; dichiarazione di una variabile ad 8 bit ed
; inizializzata con il valore della temperatura
; minima che deve essere presente nel sistema 'ambiente'

max db 83 ; dichiarazione di una variabile ad 8 bit ed
; inizializzata con il valore della temperatura
; massimo che può essere presente nel sistema 'ambiente'

data ends
; fine definizione del segmento dei dati
; inizio definizione del segmento dello stack
stack segment
cima dw dup20(0) ; definizione della lunghezza dello stack: ognuna
; delle 20 locazioni che andranno a comporre lo
; stack viene inizializzata con il valore 0x0000

fondo dw 0000h ; definizione di un etichetta utile per fare un corretto
; riferimento alle locazioni utilizzate nello stack
stack ends
; fine definizione del segmento dello stack
; inizio definizione del segmento del codice
code segment
start: ; etichetta che identifica l'inizio del programma
; inizio blocco per il settaggio dei registri
mov ax, data ; caricamento nel registro ax dell'indirizzo della prima
; locazione di memoria riservata al segmento dei dati
mov ds, ax ; caricamento nel registro ds del contenuto del registro ax

mov es, ax ; caricamento nel registro es del contenuto del registro ax

mov ax,stack ; caricamento nel registro ax dell'indirizzo della prima
; locazione di memoria riservata al segmento dello stack
mov dx,ax ; caricamento nel registro ss del contenuto del registro ax

; fine blocco per il settaggio dei registri
lea sp,fondo ; caricamento del'indirizzo effettivo della locazione con
; indice più alto del nostro stack, nel registro SP

l1: ; definizione di un'etichetta che svolge la funzione di riferimento:
; è utilizzata nell'istruzione di salto non condizionato

mov ah,00h ; inizializzazione della parte alta del registro ax con il valore 0x00
mov dx,125 ; caricamento nel registro dx dell'indirizzo della porta di ingresso,
; corrispondente al termometro che svolge la funzione di trasduttore
; nel nostro sistema
in al,dx ; caricamento nella parte bassa del registro ax, del valore presente
; sulla porta di ingresso (quello letto dal termometro)
mov dx,199 ; caricamento nel registro dx dell'indirizzo della porta di ingresso,
; corrispondente al display digitale
out dx,ax ; messa in uscita, attraverso l'indirizzo della porta di uscita
; corrispondente al display, del valore contenuto in ax (temperatura ; letta del termometro)
push ax ; caricamento, nella prima locazione libero dello stack, del
; valore contenuto nel registro ax

cmp al,min ; confronto del valore contenuto nella parte bassa del registro ax con il
;valore contenuto nella locazione di memoria identificata ;dall'etichetta min, per settare il flag del segno, flag utilizzato per ;stabilire se attivare o meno l'attuatore (il nostro riscaldamento)

; inizio 'if'
jns l2 ; controllo del flag del segno ( se ZS==0 salta a l2, se ZS==1 esegui ;blocco 'else'

; inizio 'else'
mov dx,7fh ; caricamento nel registro dx dell'indirizzo della porta di uscita, ;corrispondente al bruciatore che svolge la funzione di attuatore nel ;nostro sistema
mov al,01h ; caricamento del valore 0x01 nella parte bassa del registro ax, valore ;corrispondete al valore di accensione del bruciatore
out dx,al ; messa in uscita, attraverso l'indirizzo della porta di uscita corrispondente
; al bruciatore, del valore contenuto in ax, in modo da attivare il ;bruciatore
; fine 'else'

; fine 'if'

l2: ; definizione di un'etichetta che svolge la funzione di riferimento:
; è utilizzata nell'istruzione di salto condizionato

pop ax ; caricamento nel registro ax del valore contenuto nell'ultima
; locazione occupata dello stack

cmp al,max ; confronto del valore contenuto nella parte bassa del registro ax con il ;valore contenuto nella locazione di memoria identificata dall'etichetta ;max, per settare il flag del segno, flag utilizzato per stabilire se ;disattivare o meno l'attuatore

; inizio 'if'
js l1 ; controllo del flag del segno ( se ZS==1 salta a l1, se ZS==0 esegui ;blocco 'else'

; inizio 'else'
mov dx,7fh ; caricamento nel registro dx dell'indirizzo della porta di uscita, ;corrispondente al bruciatore che svolge la funzione di attuatore nel ;nostro sistema
mov al,00h ; caricamento del valore 0x00 nella parte bassa del registro ax, valore ;corrispondete al valore di spegnimento del bruciatore
out dx,al ; messa in uscita, attraverso l'indirizzo della porta di uscita ;corrispondente al bruciatore, del valore contenuto in ax, in modo da ;attivare il bruciatore
jmp l1 ; salto non condizionato per ripetere all'infinito in controllo della ;temperatura del nostro sistema
; fine 'else'

; fine 'if'

code ends
; fine definizione del segmento del codice
end start ;termine del programma
RELAZIONE
Lo scopo dell’esperienza effettuata in laboratorio era quello di creare un programma che eseguito dalla CPU gestisse il controllo della temperatura di un ambiente, mantenendola costante.
Essa si è articolata in tre fasi:
1) la prima fase consisteva nel ricreare in maniera virtuale, considerando tutti i dispositivi necessari per un corretto utilizzo, il sistema oggetto dell’esperienza (vedi SCHEMA in foglio1);
2) la seconda fase consisteva nel creare l’algoritmo del problema da risolvere (vedi ALGORITMO in foglio2) per poi scrivere il file sorgente corrispondente, scritto in linguaggio Assembly;
3) la terza fase consisteva nel compilare e simulare il programma sorgente attraverso l’ambiente di simulazione (compilatore ed emulatore) Emu8086 verificandone il suo funzionamento.
• CENNI TEORICI SUI CONTROLLI ON – OFF
I sistemi di controllo ON – OFF sono dei particolari tipi di sistemi di controllo che permetto alla variabile Y(t), che non è altro che l’ingresso di un componente fondamentale del sistema stesso, l’attuatore, di assumere soltanto due valori (Y1 e Y2) a seconda del valore dell’uscita del sistema. Esso può essere inferiore o superiore agli estremi di un intervallo di valori, che sta a rappresentare il margine di tolleranza, la cui ampiezza va a definire l’isteresi, nell’intorno di un valore centrale (valore ideale che l’uscita di un sistema dovrebbe avere), dovuto all’errore che può esserci nel sistema. Questo intervallo prende il nome di gap.
Questo tipo di sistemi di controllo sono caratterizza da un dispositivo fondamentale per il loro funzionamento: il trasduttore. Esso è un dispositivo che riesce a convertire dei diversi tipo di energia, generalmente fornita da grandezza meccaniche, in segnali elettrici.
In commercio esistono diversi tipi di trasduttori che si differenziano dal tipo di energia che riescono a convertire. I più importati sono:
a) i trasduttori elettrochimici: pila e accumulatore, ecc.;;
b) i trasduttori elettromeccanici: dinamo, galvanometro, switch, attuatore, ecc.;;
c) i trasduttori elettroacustici: cuffie, altoparlanti, microfoni, ecc.;
d) i trasduttori fotoelettrici: led, celle solati, ecc.;
e) i trasduttori elettromagnetici: antenna, tubo catodico, lampadina, ecc.;
La costituzione dell’isteresi è dovuta alle tecniche di costruzione dei vari dispositivi ed in particolare al ritardo di misura da parte del trasduttore
• FASE 1
Dopo aver considerato tutti i dispositivi necessari per il corretto funzionamento del sistema di controllo della temperatura di una ambiente, cioè:
a) un rilevatore di temperatura: il trasduttore;
b) una fonte di calore da potere attivare o meno in funzione della temperatura dell’ambiente: l’attuatore;
c) un microprocessore che potesse essere in grado di gestire, con l’ausilio di un determinato software, l’attivazione per mezzo di un interruttore dell’attuatore e la rilevazione della temperatura per mezzo del trasduttore.
si è andati a disegnare il sistema per evidenziare tutti i collegamenti, ricostruendolo quindi in maniera virtuale.
• FASE 2
Dopo aver definito le caratteristiche del sistema, si è andati a scrivere un programma, in linguaggio Assembly, che, eseguito dalla CPU, fosse in grado di gestire il controllo automatico della temperatura. Prima di scrivere il programma nel linguaggio di programmazione si è steso un algoritmo, per rappresentare il suo funzionamento.
SPIEGAZIONE DELL’ALGORITMO
a) Si è andati a definire l’ampiezza del margine di tolleranza, in funzione del valore centrale dell’intervallo (80°C);
b) si è andati a leggere la temperatura, nel momento specifico, dell’ambiente;
c) si è andati a controllare se la temperatura rilevata fosse minore dell’estremo inferiore dell’isteresi: nel caso ciò fosse stato veritiero si sarebbe attivato l’attuatore;
d) si è andati a controllare se la temperatura rilevata fosse maggiore dell’estremo superiore dell’isteresi: nel caso ciò fosse stato veritiero si sarebbe disattivato l’attuatore.
Essendo il controllo della temperatura infinito, l’operazione di lettura e quelle di confronto sono state inserite all’interno di un ciclo infinito.
SPIEGAZIONE DEL PROGRAMMA
Per scrivere un programma che svolgesse le operazioni espresse nell’algoritmo, si è dovuti ricorrere a dei dispositivi virtuali forniti dall’ambiente di sviluppo utilizzato. Questi dispositivi erano collegati al microprocessore attraverso delle porte, ognuna delle quali si identificava con un indirizzo ad otto bit. La prima operazione che si è andati a compiere è stata quindi rilevare gli indirizzi corrispondenti al trasduttore (il termometro virtuale), all’attuatore (il riscaldatore virtuale), ed ad un display digitale, che rendesse più facile la lettura della temperatura dell’ambiente. Quindi si è andati a ricavare la temperatura dell’ambiente, leggendolo dalla porta alla quale era collegato il trasduttore, con l’utilizzo dell’istruzione
IN destinazione, indirizzo_porta
Successivamente si è andati a confrontare il valore letto con il valore minimo della temperatura dell’ambiente, definito sottraendo al valore centrale (80°C) tre gradi, utilizzando i valori dei flag e le istruzioni di salto condizionato. Se dal confronto fosse emerso che la temperatura letta fosse minore del limite inferiore dell’isteresi si sarebbe dovuto attivare l’attuatore. Per attivarlo, sapendo che il suo stato attivo corrispondeva al valore esadecimale 1, si è dovuto mettere in uscita, sulla porta alla quale era collegati l’attuatore, il suddetto valore, utilizzando la sintassi:
OUT indirizzo_porta, valore
Dopo il primo confronto si è passati al secondo procedendo con la medesima tecnica, cambiando soltanto il valore di confronto (valore centrale più tre gradi), ed il valore da mettere sulla porta di uscita, nel caso in cui si dovesse disattivare l’attuatore . Questo nuovo valore (il numero esadecimale 0) corrispondeva allo stato di non funzionamento dell’attuatore.
• FASE 3
Dopo aver scritto il programma su carta si è andati a testarlo al computer scrivendolo nell’editor fornito dall’ambiente di sviluppo utilizzato. Dopo averlo compilato si è andati a simularlo virtualmente. Dalla simulazione si è potuto costatare che la temperatura dell’ambiente non scendeva mai sotto il valore minimo dell’intervallo, e non superava mai il valore massimo dell’intervallo stesso. Da ciò si è potuto dedurre che il programma creato svolgeva al meglio il suo compito.
Claudio Fratto Laboratorio di Sistemi Esercitazione N°4 28-01-2008
1

Esempio



  



Come usare