MICROPROCESSORE
INTEL 8086
L’8086 fu la prima generazione della CPU Intel
x86,introdotto nel 1978,è stato il primo processore a 16
bit di largo successo commerciale basato sull’8080 e
sull’8085.Utilizzato nei PERSONAL COMPUTER DOS di
tipo PC e XT,ha un BUS dati a 16 bit e un bus indirizzi a
20 bit.Può indirizzare fino a u1 MB di
memoria.Funziona con un CLOCK da 4 MHz a 12 MHz
,alimentato a 5 volt,contiene 29.000
TRANSISTOR.Venne creato mentre alla Zilog si creava
lo z8000.Dopo l’8086 la Intel presentò l’80286. Il primo
microcomputer commerciale costruito utilizzando
l'8086 fu il Mycron 2000.Anche la IBM Displaywriter,
una macchina per la scrittura di testi, utilizzava la 8086.
I PC IBM utilizzavano la versione a 8 bit, l‘8088. L'8086
fu clonato dai processori NEC V20, V25 e V30.
IL SIMULATORE DI
PROCESSORE INTEL 8086
i8086sim è un simultore interattivo di 8086,scritto in C++,progettato ad oggetti.
Il progetto di questo simulatore è costituito da due parti nettamente distinte:
 il back-end
 Il front-end
Il BACK-END è la parte del programma che si occupa esclusivamente della
simulazione,costituisce la macchina virtuale.
Il FRONT-END è la parte del programma che si occupa della rappresentazione dello
stato della macchina e costituisce l’intermediario fra l’utente della macchina e la
macchina stessa.
N.B PER QUESTO PREOGETTO E’ STATO SCELTO COME AMBIENTE WINDOWS 95’
ANALISI DELL’IMPLEMENTAZIONE
DEL BACK-END
Machine
Essa contiene tutte le parti della macchina,questo progetto si fonda sul modello della
macchina di Von Neumann.
METODI CARATTERISTICI DI QUESTA CLASSE SONO:
TRACE
esegue una sola istruzione,che è quella puntata da CS:IP
PROCEDE esegue una sola istruzione,quella puntata da CS:IP,ma in caso di CALL procede fino alla
terminazione della PROCEDURA.
GoTill
esegue istruzioni,da quella corrente,fino a raggiumgere l’IP indicato.
RUN
esegue l’intero programma fino a trovare l’istruzione INT 21H con AH=4CH.
ExeLoop è usata dai metodi precedenti che impostano il CS e l’IP di ritorno nelle variabili RetCS e
RetIP di Machine e richiamano ExeLoop che inizia un ciclo esecuzione di istruzioni che termina
quando viene raggiunto RetCS:RetIP.
I METODI PRINCIPIALI DI QUESTA
CLASSE SONO:
GETXX
permette di leggere lo stato di un registro
SETXX
permette di scrivere un valore in un registro
GETFLAG
permette di conoscere lo stato di un FLAG della PSW
SETFLG
setta un FLAG dell PSW
RESETFLAG
resetta un FLAG della PSW
EXECUTE
esegue il codice operativo dell’indirizzo CS:IP
RAPPRESENTA LA MEMORIA CENTRALE
DELLA MACCHINA…
…La Memory
I METODI GENERALI SONO:
GETSIZE
restituisce la dimensione attuale alla memoria
GETBYTE
da il contenuto del byte ad un dato indirizzo
SETBYTE
imposta un byte di indirizzo dato,ad un valore dato
GETWORD
da il contenuto della WORD ad un dato indirizzo
SETWORD
imposta una word di indirizzo dato,ad un valore dato.
Input/Output
Rappresenta l’unico modo di effettuare l’I/O per il simulatore.
Finora sono stati presentati gli oggetti
di Machine che simulano componenti
costitutive di una macchina,secondo il
modello citato.Gli oggetti di seguito
presentati invece sono solo delle
operatività specifiche e non
rappresentano un componente
costitutivo della macchina.
ANALISI DELL’IMPLEMENTAZIONE
DEL FRONT-END DI I8086 SIM.
Il front-end di i8086sim è costituito da 4 form:
•
•
•
•
Form1
MemForm
ConForm
AboutForm
FORM1
Interfaccia
principale
Contenuto registri
in EDITBOX
Chip i8086
prodotto da
AMD
Pulsanti
esecuzione
Flag di stato
Queste funzioni richiamano i metodi omonimi della classe Machine nel
back-end.
Quando si fa click su GOTILL viene visualizzata la finestra di dialogo
per la richiesta dell’IP:
Le istruzioni modificano in vario modo i flag di stato
generalmente riflettendo i seguenti stati:
•
•
•
•
•
•
Il flag Parity è attivo se il risultato di un’operazione logica o aritmetica ha
un numero pari di 1 nella sua rappresentazione binaria.
Il flag Aux Carry è attivo se in un’operazione c’è un riporto del nibble meno
significativo o un prestito di un bit dal nibble più significativo a quello meno
significativo del byte meno significativo.
Il flag Carry è attivo se in operazioni al byte o alla word c’è un riporto.
Il flag Zero è attivo se il risultato è zero.
Il flag Sign è attivo se il bit del risultato di ordine più alto è 1.
Il flag Overflow è attivo se in un’operazione il bit più significativo produce
un riporto diverso da quello prodotto dal bit immediatamente precedente.
Nessuna delle istruzioni 8086,implementate nel simulatore,modifica i flag di controllo :
• Direction Flag
• Interrupt Enable Flag
• Trap Flag
Che comunque possono essere modificati direttamente dall’utente in Form 1.
Menù in Form1
Load…
Finestra di dialogo per la selezione del file EXE da allocare in memoria.
Save Log…
Finestra di dialogo per la creazion del file LOG.
Memory resize…
Finestra di dialogo per il
ridimensionamento della memo
Clear console…
Cancella il contenuto di ConForm
Dump in Log…
Tale voce è abilitata se il Logger è attivo.Visualizza la finestra di dialogo per riportare il
contenuto di un intervallo di memoria nel Log.
Memory…
Visualizza MemForm
About…
Visualizza AboutForm
I/O Console…
Visualizza ConForm
MemForm
Questo form riporta lo stato della memoria rappresentando il valore esadecimale dei
singoli byte.Sulla destra è riportato,se esiste il carattere ASCII corrispondente a tale
valore.Inoltre selezionando una casella,si può editare direttamente il valore byte in
forma esadecimale.Tale modifica sarà riportata nel back-end.In caso di modifica
vengono anche aggiornate le istruzioni disassemblate in Form1,che potrebbero
essere cambiate.
ConForm
Questo form costituisce la console in cui l’utente inserisci l’input e visualizza
l’output (solo caratteri).In caso di input,come si può osservare dalla figura,l’esecuzione
del programma è bloccata e la richiesta di input è segnalata sulla StatusBar di
Form1.Finchè non è premuto un tasto da tastiera,tutti i controlli di Form1 sono
disabilitati.Inoltre quando non è in corso una richiesta di input,sulla console non si
può scrivere.Il cordinamento di tale finestra don il Back-end ha costretto l’uso della
variabile Action di Machine.
Analisi dell’implementazione del front-end di
sim86.
A prova dell’indipendenza del
back-end dal front-end è stato
realizzato SIM86 che è un
simulatore con quasi tutte le
funzione di i8086sim però è t t
testuale.In figura di può vedere
l’help con tutte le funzioni da
esso eseguite .Il confronto
interessante nasce dalle poche
modifiche da apportare al back-end.Infatti in questo caso l I/O si esegue sulla stessa
console del simulatore e nella stessa sono visualizzati i messaggi delle
eccezzioni.Ciò richiede una gestione diversa da i8086sim infatti le classi ioput e
exception hanno stessi file header,ma diverse definizioni dei metodi.Dunque in i8086
si ha ioutput.ccp e except.cpp mentre in sim86 si ha $ioput.cpp e Eexcept.cpp.Il
modo di interagire del front-end con l’unica concole a disposizione del simulatore
non crea lo stesso problema di input che si aveva con ConForm.Infatti la richiesta di
un input da tastiera qui è proprio di tipo sequenziale(getch() ),ed essa stessa blocca
l’esecuzione del programma.Qui non sarebbe necessario il meccanismo ActionActionPerform ()-ExeLoop ().Questo però viene comunque mantenuto per lasciare il
back-end il più generale possibile.
3° A
LANGONE
RUBEN