Documente Academic
Documente Profesional
Documente Cultură
Curs Microprocesoare
Curs Microprocesoare
Microprocesorul I8086
1.1. Descriere general
Microprocesorul (P) I8086 este produs de firma INTEL i este primul P pe 16 bii.
A fost realizat n anul 1978 i a fost folosit pentru echiparea primelor microcalculatoare ale
firmei IBM.
I8086 este un circuit integrat de tip LSI, realizat cu un numr mare de componente
(echivalentul a aproximativ 30000 tranzistoare), n tehnologie HMOS (High performance
Metal-Oxid-Semiconductor). Acesta a fost ncapsulat ntr-o capsul cu 40 pini, de tip DIP
(Dual In-line Packaged). Aceast soluie de ncapsulare a impus multiplexarea n timp a
funciilor mau multor pini pentru a asigura numrul de semnale necesare funcionrii P-ului.
Caracteristicile de baz ale P I8086 sunt:
- lungimea cuvntului de date: 16 bii
- capacitatea de memorie adresabil: 1 MOctet
- numrul de regitrii interni: 14 regitrii de cte 16 bii
- numrul de moduri de adresare ale operanzilor: 8
- frecvena de tact acceptat: (5MHz pentru varianta 8086; 10MHz pentru varianta 80861; 8MHz pentru varianta 8086-2)
- tensiune de alimentare: +5Vcc
I8086 poate funciona att unitar n sisteme monoprocesor, ct i n sisteme
multiprocesor (pentru acesta putndu-se selecta modul de lucru minim sau maxim).
AD0AD15 linii care prin multiplexare sunt utilizate pentru realizarea Magistralei
de Date, respectiv pentru partea mai puin semnificativ a Magistralei de Adrese;
A16/S3A19/S6 linii care prin multiplexare sunt folosite pentru Magistrala de
stare (S3-S6), respectiv pentru partea mai semnificativ a Magistralei de Adrese;
o biii S3 i S4 formeaz un cod ce precizeaz registrul segment intern care a
fost utilizat pentru generarea adresei, conform Tabelului 1;
o bitul S5 reprezint valoarea fanionului de ntreruperi IF (Interrupt Flag), de
autorizare a ntreruperilor mascabile;
o bitul S6=0 este neutilizat.
S3
0
1
0
1
Registru segment
Adiional (Extra)
Stiva
Cod
Date
AD16/S3
DI7
DI3
.
DI0
STB
AD15
DI7
AD8
.
DI0
STB
AD7
DI7
AD0
.
DI0
STB
A7
.
A0
ALE
8
2
8
2
DO7
DO3
.
DO0
BHE
A19
A16
8
2
8
2
DO7
A15
.
DO0
A8
8
2
8
2
DO7
A7
.
DO0
A0
8
2
8
6
B7
D15
.
B0
D8
8
2
8
6
B7
D7
.
B0
D0
EN
DEN
A7
DT/R
.
A0
T
EN
HIGH
FFFFF
FFFFD
A1
A19
A1...A19
A1
A19
CS1
CS2
4
2
0
5
3
1
D8...D15
CS1
CS2
BHE
A0
D0...D7
Blocurile de memorie sunt formate din 8 linii de date (D0D7), 20 linii de adrese (A0
A19) i dou borne de selectare (CS1 i CS2). Locaiile de memorie din blocul LOW au
asociate adrese pare, fiind selectate doar dac bitul mai puin semnificativ (LSB) de pe MA,
A0, conectat la borna CS2 a acestuia este 0. Locaiile din blocul HIGH au asociate adrese
impare i sunt selectate doar dac semnalul BHE de la P, conectat la borna CS2
corespunztoare este activ (0 logic).
Acest mod de organizare al memoriei permite realizarea de transferuri de date, ntre
P i memorie, sub form de octet sau de cuvnt (pe 16 bii) de la orice adres. Din acest
punct de vedere se pot realiza patru tipuri de transfer de date:
transfer pe octet la adres par (adresa x):
o BHE=1 i A0=0 atunci octetul din locaia x precizat pe liniile A1A19 este
depus pe liniile D0D7 ale MD;
transfer pe cuvnt la adres par (adresa x):
o BHE=0 i A0=0 atunci octeii din locaiile x i x+1 precizate pe liniile A1
A19 sunt depui pe liniile D0D7, respectiv pe liniile D8D15ale MD;
transfer pe octet la adres impar (adresa x+1):
o BHE=0 i A0=1 atunci octetul din locaia x+1 precizat pe liniile A1A19
este depus pe liniile D8D15 ale MD;
transfer pe cuvnt la adres impar (adresa x+1):
o BHE=0 i A0=1 atunci octetul din locaia x+1 precizat pe liniile A1A19
este depus pe liniile D8D15 ale MD;
o se incrementeaz adresa de pe liniile A1A19;
o BHE=1 i A0=0 atunci octetul din locaia x+2 precizat pe liniile A1A19
este depus pe liniile D0D7 ale MD.
Pe frontul cresctor
c
all tactului T33 P-ul testteaz starea liniei READ
DY pentru a verifica
dac peerifericul caare trebuie s
s depun data
d pe MD
D a fcut-o. Dac acestt semnal geenerat de
dispozittivul surs este gsit activ
a
(1 logic)
l
se co
ontinu trannsferul dateii. n caz co
ontrar se
introducc taci supplimentari de
d ateptarre (Tw), pn la actiivarea sem
mnalului REA
ADY. n
continuuare, se preia date de pee MD, iar laa nceputul strii T4 see dezactiveaaz semnaleele RD i
DEN inddicnd sfritul cicluluii.
1.5.2. Ciclul
C
de scrriere
Ciclul de sccriere (Fig.11.5) se execcut cnd see transmite o dat spre memorie (ccomand
de tip mov)
m
sau sprre un perifeeric (comannd de tip ou
ut) i este asemntor ccu ciclul de citire.
ase dintre biii registrului F (CF, PF, AF, ZF, SF i OF) sunt denumii fanioane de
stare, i sunt similari cu cei al registrului F al microprocesoarelor anterioare pe 8 bii. Acetia
ofer informaii referitoare la rezultatul ultimei operaii executate n UAL. Ceilali 3 bii (IF,
TF, DF) sunt denumii fanioane de control i permit stabilirea prin program a unor opiuni
privind funcionarea P-ului.
n continuare se prezint semnificaia fiecrui bit din registrul de fanioane,
precizndu-se att simbolul ct i rolul fiecruia:
B11 - OF (Overflow Flag) este un indicatorul de depire aritmetica (OF=1)
dimensiunea rezultatului depete capacitatea locaiei de destinaie;
B10 - DF (Direction Flag) se folosete n transmisia irurilor de date. Cnd
(DF=1) irul se transmite cresctor, cnd (DF=0) irul se transmite descresctor
B9 - IF (Interrupt Flag) autorizeaz (IF=1) sau blocheaz (IF=0) ntreruperile
mascabile;
B8 - TF (Trap Falg) seteaz funcionarea microprocesorului n regim pas cu pas
prin generarea de ntreruperi dup fiecare instruciune executat (TF=1)
B7 - SF (Sign Flag) - indicatorul de semn - este 1 daca cel mai semnificativ bit al
rezultatului ia valoarea 1;
B6 - ZF (Zero Flag) se folosete pentru a determina cnd rezultatul unei operaii
este nul (ZF=1) sau cnd difer de zero (ZF=0).
B4 - AF (Auxiliary Carry Flag) - indicator de transport auxiliar;
B2 - PF (Parity Flag) se folosete pentru a determina paritatea binar a unui
numr. (PF=1) numrul conine un numr par de bii n componena sa, (PF=0)
numrul conine un numr impar de bii n componena sa;
B0 - CF (Carry Flag) se folosete pentru determinarea efecturii unui transport
la calcul. El se numete bit de transport i devine 1 cnd la o adunare numrul este
mai mare de 16 bii sau la o scdere cnd rezultatul este mai mic dect zero.
Toi biii registrului F pot fi modificai prin program. n cazul celor care nu au
dedicate instruciuni speciale, modificarea valorilor lor se poate face copiind prin stiv
coninutul registrului F ntr-un registru general, se face modificare dup care se recopiaz
napoi n F.
C. Registrul de uz general
n componena EU a P-ului I8086 se disting dou categorii de regitrii generali de
cte 16 bii, accesibili utilizatorului:
- regitrii de date;
- regitrii indicatori (pointeri) i index.
Regitrii de date
Regitrii de date fac parte din grupa regitrilor generali i sunt folosii pentru
memorare temporar a unor informaii. Oricare dintre cei patru regitrii pot fi utilizai ca
surs sau destinaie a unui operand n operaii aritmetice, logice, deplasri sau rotiri.
Totui unii regitrii au funcii speciale, motiv pentru care au i primit denumiri
distincte: registru Acumulator, Baz, Contor sau Date. Aceast alocare de denumiri distincte
pornete de la ideea c registrul BX (Baz) este utilizat la adresarea cu baz pentru a se
stoca baza deplasamentului. Registrul CX (Contor) se recomand pentru utilizarea sa ca
registru de contor n instruciuni de tip bucl.
Fiecare registru poate fi folosit ca i registru de cuvnt (de 16 bii) sau ca doi regitrii
de octet (8 bii). Acetia vor fi notai prin intermediul unei litere specifice registrului (A, B, C
sau D) i a unui sufix specific modului de utilizare (X 16 bii; H 8 bii partea superioar High; L 8 bii partea inferioar Low).
Exemplu: instruciunea MOV AX,12h transfer n registrul pe 16 bii AX, numrul
hexazecimal 23h (deoarece acest numr este scris pe 8 bii, instruciunea va pune valoarea
00h pe zona mai semnificativ a registrului AX). Acelai rezultat se poate obine cu
urmtoarele dou instruciuni: MOVAL,12h (care transfer numrul 23h n partea inferioar a
registrului AX), respectiv MOV AH,00h (care transfer numrul 00h n partea superioar a
registrului AX).
Regitrii indicatori i index
Regitrii indicatori i index sunt regitrii ce conin informaii utilizate n formarea
cuvintelor de adres. EU al P-ului I8086 conine doi regitrii index, notai SI i DI, i doi
regitrii pointer de adrese notai SP i BP.
Registrul index surs (SI Source Index), respectiv registrul index destinaie (DI
Destination Index) sunt regitrii generali, similari regitrilor de date, n sensul c pot fi
folosii n instruciuni aritmetice i logice ca i acetia, dar numai pe 16 bii. Totui scopul lor
principal este acela de a stoca deplasamentul pe 16 bii a adresei curente n segmentul de date
sau n segmentul auxiliar al memoriei. Practic ei se utilizeaz n instruciuni cu adresare
indexat. n anumite instruciuni cu adresare implicit, ce opereaz cu iruri de octei sau de
cuvinte, sunt folosii pentru calculul adresei sursei (registru SI) sau a destinaiei (registru DI).
Indicatorul de stiv (SP Stack Pointer) conine deplasamentul n segment de stiv a
crei adres de baz este definit prin registrul segment de stiv (SS), identificnd astfel vrful
stivei.
Indicatorul de baz (BP Base Pointer) conine de asemenea un deplasament n
segmentul de stiv curent, utilizat atunci cnd folosim modul de adresare cu baz. Permite
transferuri de date n/din orice loc al stivei. Este folosit n mod uzual de subrutine a cror
parametrii sunt transmii prin stiv.
AF=(DS)*10h+(DI)+DeplsauAF=(DS)*10h+(SI)+Depl
Exemplu:
MOVDL,50.[DI]
MOVdestinaie,surs
O alt instruciune de transfer este aceea prin care coninutul a dou locaii se schimb
ntre ele. Instruciunea poart denumirea de schimbare (EXCH - EXCHange). Totui se face
precizarea c aceast instruciune nu permite schimbarea datelor n memorie (memorie memorie). Forma general este:
XCHGdestinaie,surs
Tot din categoria instruciunilor de transfer face parte i depunere (PUSH) i preluare
(POP) din stiv. Forma general a acestor instruciuni este:
PUSHsurs
POPdestinaie
Ultimul tip de transfer posibil este acela de transfer de intrare-ieire prin intermediul
cruia se transfer ntre microprocesor i modulele IO. Se poate utiliza direct dac adresa este
pe 8 bii i indirect (prin intermediul registrului DX) dac adresa portului este pe 16 bii.
Formele posibile de exprimare sunt:
INAL,adres8bii
INAL,DX
OUTadres8bii,AL
OUTDX,AL
n urma executrii uneia dintre aceste instruciuni, se adun sau se scade destinaia din
surs, iar rezultatul se pune n destinaie. Din acest motiv destinaia trebuie s fie registru
general sau locaie de memorie. Sursa poate fi registru general, locaie de memorie sau numr
explicit. Exist i o restricie prin care destinaia i sursa nu pot fi n acelai timp locaii de
memorie.
Un alt set de operaii aritmetice este dat de instruciunile incrementare (INC
INCrement) i decrementare (DEC DECrement). Prin intermediul acestor instruciune se
poate aduna (INC) respectiv scdea (DEC) cu o unitate, o valoare stocat ntr-un registru. Noua
valoarea va rmne n acelai registru. Efectuarea acestor instruciuni pot modifica
urmtoarele fanioane: AF, OF, PF, SF, ZF. Sintaxa general a acestor instruciuni este:
INCdestinaie
DECdestinaie
Compararea (CMP CoMPare) a dou numere este o operaie prin intermediul crora
se pot compara dou numere. n urma efecturii unei astfel de operaii se pot modifica
urmtoarele fanioane: AF, CF, OF, PF, SF, ZF. Forma general a instruciunii este
urmtoarea:
CMPdestinaie,surs
De asemenea sursa definete operaia. Astfel dac sursa are 8 bii operaia se
efectueaz pe 8 bii, ctul este pus n registrul AL i restul n registrul AH. La operaii pe 16
bii, ctul este pus n registrul AX i restul n registrul DX.
Dac se realizeaz o mprire la 0, se va genera o ntrerupere de ordin 0. Tratarea
acestui tip de ntrerupere este prezentat n capitolul aferent sistemului de ntreruperi.
2.2.3. Instruciuni pe bii
Prima categorie din acest tip de instruciuni sunt instruciuni logice (AND I logic,
OR SAU Logic, XOR SAU EXCLUSIV logic, NOT NEGARE logic). Sintaxele aferente
acestor instruciuni sunt urmtoarele:
ANDdestinaie,surs
ORdestinaie,surs
XORdestinaie,surs
NOTsurs
La aceste tipuri de instruciuni operaiile se efectueaz bit cu bit, adic fiecare bit din
destinaie cu omologul su din surs. Rezultatul se va depune n destinaie.
(deplasarelogiclastnga)
(deplasarelogicladreapta)
(deplasarearitmeticlastnga)
(deplasarearitmeticladreapta)
(rotirelastnga)
(rotireladreapta)
(rotirecuCARRYlastnga)
(rotirecuCARRYladreapta)
cod
testcondiie
JC,Eticheta
cod.
;nceputbucl
;executinstruciunidinbucl
;executinstruciunecaredrezultatulcondiiei(CMP,ADD,etc)
;verificarecondiie(dacestefalsserevinelanceputbucl)
;dacsandeplinitcondiiasecontinuprogramul
cod
testcondiie
;executinstruciuninaintedecondiie
;executinstruciunecaredrezultatulcondiiei(CMP,ADD,etc)
JC,Eticheta
cod
Eticheta:cod.
;verificarecondiie(dacestefalssarelaetichet)
;dacesteadevratexecutunsetdeinstruciuni
;daccondiiaafostfalssecontinuprogramul
Acest ultim exemplu reprezint un set de instruciuni de tip (IF THEN), adic dac o
condiie este adevrat se execut un set de instruciuni, iar apoi se continu programul. Dac
condiia este fals se trece direct la condiionarea programului.
Dac se dorete realizarea unui program care s se comporte ca i o funcie de tip (IF
THEN ELSE) structura sa va fi urmtoarea:
cod
testcondiie
JC,Eticheta1
cod
JN,Eticheta2
Eticheta1:cod.
Eticheta2:cod.
;executinstruciuninaintedecondiie
;executinstruciunecaredrezultatulcondiiei(CMP,ADD,etc)
;verificarecondiie(dacestefalssarelaetichet)
;dacesteadevratexecutunsetdeinstruciuni
;verificarecondiie(dacestefalssarelaetichet)
;dacestefalsexecutaltsetdeinstruciuni
;daccondiiaafostfalssecontinuprogramul
Explicarea codului este urmtoarea: dac o condiie este adevrat se execut un set
de instruciuni (aferente funciei THEN), iar apoi se sare cu ajutorul unui salt necondiionat
(JN) la eticheta (Eticheta2) de unde se continu programul. Dac condiia este fals se sare la
eticheta (Eticheta1) unde se execut un alt set de instruciuni (aferent funciei ELSE), iar la
final se continu automat programul.
Instruciunile de salt pot fi de dou tipuri: instruciuni salt condiionat, respectiv
instruciuni de salt necondiionat. Pentru cazul n care instruciunea de salt se execut n urma
efecturii unei comparaii s-au creat dou seturi de instruciuni particulare: unul pentru
comparaia cu semn i altul pentru comparaia fr semn.
Sintaxele posibile pentru instruciuni de tip salt condiionat sunt:
JC
JNC
JZ
JNZ
JS
JNS
JO
JNO
JP
JNP
saltdacCF=1
saltdacCF=0
saltdacZF=1
saltdacZF=0
saltdacSF=1
saltdacSF=0
saltdacSF=1
saltdacSF=0
saltdacSF=1
saltdacSF=0
(aavutlocundeplasament)
(nuaavutlocundeplasament)
(rezultatulestezero)
(rezultatulnuestezero)
(rezultatulestenegativ)
(rezultatulnuestenegativ)
(sadepitcapacitatea)
(nusadepitcapacitatea)
(rezultatulestepar)
(rezultatulesteimpar)
saltdacCF=0,ZF=0
saltdacCF=0
saltdacCF=1
saltdacCF=1sauZF=0
saltdacZF=1
saltdacZF=0
(saltlamaimare)
(saltlamaimaresauegal)
(saltlamaimic)
(saltlamaimicsauegal)
(saltlaegal)
(saltladiferit)
saltdacSF=OFsauZF=0 (saltlamaimare)
saltdacSF=0
(saltlamaimaresauegal)
saltdacnotSF=OF
(saltlamaimic)
saltdacnotSF=OFsauZF=1(saltlamaimicsauegal)
saltdacZF=1
(saltlaegal)
saltdacZF=0
(saltladiferit)
RET
;utilizatpentrusaltulnecondiionatlaoanumitadres
;utilizatpentruapelareauneisubrutine(saltlaadresadenceput
;aacesteia)
;utilizatpentrurevenireadinsubrutin(saltlaadresacare
;urmadupinstruciuneaCALLnprogramuldebaz)
registrului de fanioane. Pentru realizarea acestui lucru exist dou instruciuni dedicate i
anume: STI (SeT Interrupt) folosit pentru setarea IF, respectiv CLI (CLear Interrupt) folosit
pentru resetareaIF.
cod
B1h
10h
00h
40h
nCSsevancrcaB110h
nIPsevancrca0040h
DA
II?
n=0,3,4
NU
DA
NMI ?
n=2
NU
MI ?
IF=1 ?
NU
NU
DA
NMI ?
DA
n=2
NU
TF=1 ?
DA
n=1
TEMP=1 ?
DA
n=1
NU
NU
Instruciune urmtoare
Execut SSI
o dac NU, se verific dac este autorizat regimul pas cu pas, iar n caz
afirmativ se lanseaz SSI corespunztoare acestui regim;
se execut SSI care se termin cu instruciunea IRET cu rol n refacerea strii
iniiale a microprocesorului.
3.4.2. ntreruperile interne prin program (software)
I8086 este capabil s accepte un numr ridicat de ntreruperi interne de tip ntreruperi
software. Aceste ntreruperi sunt generate software prin executarea unei instruciuni de tip
INT n, unde n reprezint tipul ntreruperii. Operandul n, nmulit cu 4 va indica locaiile de
memorie din TVI n care sunt amplasate adresele IPn i CSn corespunztoare VI aferent
cererii de ntrerupere.
Mecanismul de tratare a acestei categorii de ntreruperi este similar cu cel descris n
ordinograma din Fig.3.1 pentru ntreruperi generate de un eveniment intern. La execuia
instruciunii INT n, coninuturile regitrilor IP, CS i F sunt trecute n stiv, sunt resetate
fanioanele IF i TF, iar apoi se lanseaz execuia SSI conform mecanismului descris anterior.
Dac se consider necesar se pot salva n stiv i coninutul altor regitrii printr-o
secven de tip PUSH amplasat la nceputul SSI corespunztor, urmat de o secven de tip
POP amplasat nainte instruciunii IRET.
ntreruperile software nu pot fi invalidate prin program, dar pot fi ntrerupte temporar
de o ntrerupere intern, de o ntrerupere nemascabil sau de o ntrerupere mascabil cu o
prioritate mai mare. ntreruperea mascabil poate intervenii doar dac n prealabil a fost setat
fanionul IF.
Unele dintre ntreruperile software folosite cel mai des n sistemele IBM este
ntreruperea de tip 21h, prin care sunt apelate funciile DOS ale sistemului. Distincia ntre
diverse funcii DOS apelate se realizeaz prin ncrcarea n prealabil a registrului AH cu un
numr aferent funciei ce se dorete a fi apelat.
De exemplu: afiarea unui caracter pe ecran, este o funcie care are atribuit numrul
de ordine 2. Astfel pentru executarea acestei funcii se procedeaz astfel:
se ncarc registrul AH cu valoarea 2;
se ncarc registrul DL cu codul hexazecimal al caracterului ce urmeaz a fi
ncrcat;
se apeleaz ntreruperea cu ajutorul codului INT21h.
Prin urmare dac se dorete afiarea pe ecran a textului AB se procedeaz astfel:
movah,02
movdl,65
int21h
movdl,66
int21h
iniiazfunciadeafiarecaracter
ncarccodulASCIIpentruprimulcaracter
apeleazfunciileDOS
ncarccodulASCIIpentrualdoileacaracter
apeleazdinnoufunciileDOS