AC
AC
CUPRINS
1. INTRODUCERE
2. DESCRIEREA STRUCTURII SISTEMELOR NUMERICE (AHPL)
3. REPREZENTAREA ŞI PRELUCRAREA INFORMAŢIEI ÎN CALCULATOARELE
NUMERICE
4. OPERAŢII ARITMETICE ÎN CALCULATOARE NUMERICE
5. STRUCTURA ŞI ARHITECTURA CALCULATORULUI DIDACTIC
6. PROGRAMAREA IN LIMBAJ DE ASAMBLARE A CALCULATORULUI
DIDACTIC
7. SUBSISTEMUL DE INTRĂRI / IEŞIRI AL CALCULATORULUI DIDACTIC
8. SISTEMUL DE MANIPULARE A ÎNTRERUPERILOR
9. MICROPROGRAMARE
BIBLIOGRAFIE
1) Trandafir Moisa, Nicolae Tapus, Cristian Morarescu - Structura si arhitectura
sistemelor numerice (Editura Printech, 1999)
2) John L. Hennessy, David A. Patterson - Computer Architecture: A Quantitative
Approach, 4th Edition (Morgan Kaufmann Publishers, 2007)
3) David A. Patterson, John L. Hennessy - Computer Organization and Design: The
Hardware/Software Interface, 4th Edition (Morgan Kaufmann Publishers, 2009)
4) Behrooz Parhami - Computer Architecture: From Microprocessors to
Supercomputers (Oxford University Press, 2005)
[Link]
I CN E
Modelul structural al unui calculator numeric
fluxul datelor
fluxul informatiilor de control care asigurã interactiunea
corectã a celor trei subsisteme
Echipament Echipament
periferic Interfata Interfata periferic
I intrare iesire E
de intrare Unitatea de iesire
centrala
de prelucrare
fluxul datelor
fluxul informatiilor de control care asigurã interactiunea
corectã a celor trei subsisteme
Registre
Unitatea centrala
de prelucrare
Unitatea
aritmetica
Echipament logica Echipament
I E
periferic de Interfata Interfata periferic de
intrare intrare iesire iesire
Unitatea de
comanda
fluxul datelor
fluxul informatiilor de control care asigurã interactiunea
corectã a celor trei subsisteme
Calculator numeric cu transfer programat:
Memorie
Unitatea Subsistem
Memorie centrala de de I/E
prelucrare I/E
Unitatea Subsistem
Memorie centrala de de I/E
prelucrare I/E
Canal de I/E
1.3 Modelul funcţional al unui calculator numeric
• Memoria
n n
Matrice de
Adrese AM D
memorie
E
C
date
__
SM Unitate DM
de
__ control date
S/C
adrese adrese
___ ___
SM SM
date _
S/C
date
tAC
date disponibile
Memorii ROM
• UAL
Selectie operatie
UAL
n
rezultat
magistrala date
T1 T2
Selectie operatie
UAL
n
Magistrala de date
Acumulator
Selectie operatie
UAL
n
• Unitatea de comandă
•
Fazele execuţiei unei instrucţiuni
Nu Da
instructiune
cu operanzi?
Da Nu
operanzi
in memorie?
calculeaza adrese si
aduce operand actual in pregateste operanzi
UCP
se executa instructiunea
Nu instructiune cu Da
rezultat in
memorie?
memoreaza rezultat
instructiunea urmatoare
Setul de instrucţiuni
Orice calculator este controlat de un program, care este format dintr-o secvenţă
de instrucţiuni. Fiecare instrucţiune specifică o operaţie care urmează să fie executată
de către unitatea centrală de prelucrare. În general instrucţiunile unui calculator pot să
fie clasificate în câteva clase de bază :
1°. Instrucţiuni pentru transferul datelor. Sursa şi respectiv destinaţia unui astfel
de transfer pot să fie constituite de o locaţie de memorie, un registru, sau elemente ale
subsistemului de intrare/ieşire.
2°. Instrucţiuni aritmetice. Aceste instrucţiuni execută operaţii aritmetice asupra
unor date. În acest caz sursa operanzilor şi destinaţia rezultatului pot să fie memoria
sau registrele din unitatea centrală de prelucrare. Complexitatea operaţiilor care
formează setul instrucţiunilor aritmetice diferă mult pentru diferite calculatoare.
3°. Instrucţiuni logice şi de deplasare. Aceste instrucţiuni execută operaţii logice
(de tip ŞI, SAU, NU, SAU EXCLUSIV) asupra unor date. Ca şi la instrucţiunile aritmetice
sursa operanzilor şi destinaţia rezultatului pot să fie memoria sau registrele din unitatea
centrală de prelucrare.
4°. Instrucţiuni pentru controlul execuţiei programelor. Aceste instrucţiuni permit
schimbarea dinamică a secvenţei în care se execută instrucţiunile din program
producând un salt necondiţionat sau condiţionat la o adresă din program specificată în
instrucţiune.
Nivelul programelor
- corespunde descrierii resurselor software ale sistemelor de calcul.
- distingem patru subniveluri:
• subnivelul setului de instrucţiuni; operează cu:
➢ componente: formatul instrucţiunii, moduri de adresare, registre;
➢ structura: descrie modul logic de interpretare a setului de instrucţiuni. Se
utilizează limbajul de descriere ISP (“Instruction Set Processor”).
• subnivelul limbajelor : descrie componentele limbajelor de programare;
• subnivelul sistemelor de operare: descrie resursele hardware şi sotfware;
• subnivelul aplicaţiilor: descrie caracteristicile programelor de aplicaţie pentru
diverse domenii de activitate.
2.2 Limbajul de descriere a structurilor numerice AHPL
unde :
< nume modul > - specifică numele modulului ce urmează să fie
descris în AHPL
< declaraţii> - specifică elementele modulului la nivel de
memorie, intrări, ieşiri, conexiuni cu exteriorul.
< secvenţa de control > - specifică acţiunile ce se desfăşoară la
diverse momente de timp, asociate paşilor AHPL.
END SEQUENCE - specifică terminarea secvenţei de control.
< conexiuni> - specifică conexiuni şi transferuri ce nu sunt asociate
< transferuri > unui moment de timp (ele au loc tot timpul).
END - specifică sfârşitul descrierii modulului.
Structura unei funcţii este următoarea:
Declaraţiile din cadrul modulului ajută la specificarea elementelor din care este constituit
acesta.
Limbajul AHPL recunoaşte următoarele declaraţii:
➢ MEMORY:<lista de variabile>
- specifică prin lista de variabile asociată toate elementele de memorie
(bistabili, registre, memorii) utilizate în modulul respectiv.
➢ INPUTS:<lista de variabile>
- specifică prin lista de variabile asociată toate semnalele de intrare
în modulul respectiv.
➢ OUTPUTS:<lista de variabile>
- specifică prin lista de variabile asociată, semnalele de ieşire din
modul.
➢ BUSES:<lista de variabile >
- specifică prin lista de variabile asociată magistralele din cadrul
modulului.
➢ COMBUSES:<lista de variabile>
- specifică prin lista de variabile asociată magistralele (bidirecţionale)
de comunicaţie cu exteriorul.
➢ ONE SHOTS:<lista de variabile>
- specifică prin lista de variabile asociată toate elementele de tip
monostabil din cadrul modulului.
În cadrul procedurilor ce descriu un modul se pot utiliza ieşirile unităţilor logice
combinaţionale specificate prin funcţii.
Tipuri de operanzi în AHPL
Operanzii reprezintă variabile ce pot lua diverse valori numerice sau alfanumerice
şi sunt asociaţi unor operatori ce aparţin limbajului.
Operanzii cu care operează AHPL sunt de trei tipuri:
✓ Scalari, reprezentaţi prin litere mici: x,y,z;
✓ Vectori, reprezentaţi prin litere mari: X,Y,Z;
✓ Matrice, reprezentate prin litere mari aldine: X,Y,Z;
Prin scalari se reprezintă variabile independente, fără să li se asocieze o
structură oarecare.
Exemplu: bistabili individuali din unitatea de comandă sau execuţie.
Vectorul este un ansamblu de operanzi scalari structuraţi sub forma unui tablou
unidimensional. Numărul de componente ale unui vector formează dimensiunea
acestuia şi poate fi determinata cu operatorul dimensiune ρ <nume_vector >.
Registrele unui calculator sunt reprezentate prin vectori. De exemplu un registru
RA de 16 biţi are dimensiunea ρRA=16, iar componentele sale se notează:
M0 M
0
M
0
2M −1
0 1
1 1 1
M=
M 0 M 1 M 2M −1
1M−1 1M −1 1M −1
M0 M 1 M 2M−1
Tipuri de operatori
SL(SYN(starta))
generează un semnal sincron cu semnalul de ceas şi de o durată egală cu
perioada semnalului de ceas, indiferent de durata semnalului starta.
✓ operatori de selecţie:
j ; i:j selectează biţi dintr-un registru sau zone de memorie.
Exemple:
Aj - selectează bitul j din registrul A
Ai:j =(Ai, Ai+1, ..., Aj ) - selectează grupul de biţi ai registrului A între poziţiile i şi j
Mi:j - selectează zona de memorie cuprinsă între adresele i şi j
✓ operatori de concatenare:
, concatenare pe linii
! concatenare pe coloane
Exemplu:
Fie a şi b doi scalari, A şi B doi vectori iar M o matrice
A = a,b reprezintă un vector care are ca şi componente pe a şi b
M = A!B reprezintă o matrice care are ca linii componetele A şi B
De notat faptul că dacă vectorii concatenaţi pe coloane nu au aceeaţi dimensiune
se face aliniere la dreapta.
✓ operator de codificare:
n T m; realizează codificarea binară a valorii reprezentată de numărul m
într-un vector care are n componente binare. Rezultatul codificării este un vector.
Exemplu:
4 T 5 generează vectorul (0,1,0,1)
8 T 7 generează vectorul (0,0,0,0,0,1,1,1)
✓ operatori de decodificare
⊥ sau DCD; realizează funcţia inversă a codificării adică interpretează
componentele vectorului căruia i se aplică la intrare cifre binare şi generează o
valoare numerică. În general această valoare reprezintă o adresă.
Exemplu:
⊥ (0,1,0,1) generează valoarea 5
DCD (0,0,0,0,0,1,0,1) generează valoarea 5
✓ operatori de atribuire
✓ operatori relaţionali
x R y, unde: R { < ; ; = ; ; > ; } stabileşte relaţia între cei doi operanzi şi
generează valoarea adevărat (1 logic) dacă relaţia este îndeplinită, şi generează
valoarea fals (0 logic) în caz contrar. În general relaţia R este implementată cu
ajutorul funcţiilor, prin unităţi logice combinaţionale.
Instrucţiuni AHPL
Instrucţiuni de atribuire
(A f) (B g) (C h)
ceea ce poate fi scris şi sub forma:
A0 A1 B0 B1
f1
Pas 10.
D
Q
Clock f2
_
> CLK Q
_____ CL
Reset
Bus
Instrucţiuni de transfer
PR A0
A1 Y1 D
A2 Y2 Q
A3 Y3
_
A4 Y4 > CLK Q
CL
B0 B1
B1 B2
B3
B4
_
A/B PR A1
f G D
MUX 2:1 Q
PR _
D > CLK Q
Q CL
Clock
_
> CLK Q
_____ CL
Reset
B0 PR
D A0
Q
PR _
D > CLK Q
Q CL
Clock
_
> CLK Q B1 PR A1
_____ CL D
Reset Q
f _
> CLK Q
CL
Specificarea semnalului de tact
CK = semnal_de_tact
când toate resursele din pasul AHPL respectiv vor fi comandate de un semnal de
tact extern, sau
CK [nume_resursa] = semnal_de_tact
B0 PR
D Q A0
_
> ClLK Q
PR CL
D Q
Clock _
> ClLK Q
CL
B1 PR A1
_____ D Q
Reset _
> ClLK Q
CL
A0
f1 Z0
A1
Z1
B0
f2
B1
Exemplu: .....
END SEQUENCE
AB
.....
Transfer dupa END SEQUENCE
PR B0 PR
D D A0
Q Q
_ _
> CLK Q > CLK Q
CL CL
PR B1 PR A1
D D
Q Q
_ _
> CLK Q > CLK Q
Clock CL CL
Instrucţiuni de salt
nume_funcţie(lista_de_parametri_efectivi).
x y tin
SUMEC
0
sum SUMEC 0
1
tout SUMEC 0
Tabela de adevăr şi ecuaţiile logice: Descriere in AHPL:
x
su 0
y SUMEC
m 0
tin
tout 1
SUMEC
0
SUMEC
Sumator paralel pe 16 biţi
Pentru a descrie un sumator paralel pe 16 biţi se va considera un vector de
funcţii SUMEC obţinându-se astfel o matrice cu 2 linii reprezentând suma şi transportul
pe fiecare rang.
Operanzii sumatorului paralel sunt:
X = ( X0, X1 ,..., X15 )
Y = ( Y0, Y1 ,..., Y15 )
Suma şi transportul din rangul cel mai semnificativ vor fi:
ADD = (ADD0, ADD1 ,...,ADD16 )
Descrierea AHPL a sumatorului pe 16 biţi este:
UNIT: ADD (X; Y; t16 )
INPUTS: X[16]; Y[16];t16
OUTPUTS: ADD [17]
1. T = SUMEC10:15 ( X; Y; T1:15,t16 )
2. S = SUMEC00:15 ( X; Y; T1:15,t16 )
3. ADD = T0 ,S0:15
END
Sumator paralel pe 16 biţi
S0 S1 S15 SUMEC0
t AC DM
X Y
T1 t
6
ADD
0 dacă ⊥A i
DCDi = 1dacă ⊥A = i
DCD(A)
A DCD
n 2n
Operaţiile de citire / scriere cu memoria în AHPL
0 0
1 1
D
F M AM C M
D
2nxm 2nxm
2n-1 n-1
0 m-1 0 m-1
DM DM
DMBUSFN ((M;DCD(AM))
0:n-1 0:n -1
AM DCD
F BUSFN
M 0:m -1
M
BUSFN 0:m -1
Exemplu:
Fie o memorie de 4 cuvinte a 8 biţi. Unitatea logică combinaţională ce asigură
citirea din această memorie are următoarea descriere:
UNIT BUSFN (M,F)
INPUTS: M [4,8], F [4]
M0
F0
OUTPUTS: BUSFN [8]
1. NIVS = M F
2. NIV = NIVS0 ! ( NIVS1:3 NIV0:2 ) F1
NIVS0 NIV0
M1
3. BUSFN=NIV3
END
NIVS1
NIVS2
M3
F3 NIV2
NIVS3
NIV3
BUSFN(M;F)
3. REPREZENTAREA ŞI PRELUCRAREA
INFORMAŢIEI ÎN CALCULATOARELE NUMERICE
. Reprezentarea în binar
Codul binar corespunde reprezentării binare a informaţiei numerice, în Zecimal Binar
care fiecare cifră are o anumită pondere în funcţie de poziţia pe care o ocupă 0 0000
în reprezentarea numărului
1 0001
în general:
2 0010
N = xnxn-1xn-2...x0
3 0011
Valoarea numărului fiind:
n 4 0100
V = x *2
i
n i
i =0 5 0101
6 0110
7 0111
8 1000
Zecimal Binar Gray
0 0000 0000
1 0001 0001
Reprezentarea în cod Gray 2 0010 0011
În cazul transformării din cod binar în cod Gray, Nb →Ng, relaţia 12 1100 1010
dintre cifre este:
13 1101 1011
gi = bi bi+1 considerând bn+1 = 0
14 1110 1001
În cazul transformării din cod Gray în cod binar, Ng → Nb,
relaţia dintre cifre este: 15 1111 1000
bi = gi gi+1 ... gn
Exemplu:
Pentru un convertor din Binar în Gray şi invers rezultă următoarele ecuaţii logice:
Conversia Binar - Gray:
g0 = b0 b1
g1 = b1 b2
g2 = b2 b3
g3 = b3
Conversia Gray - Binar:
b0 = g0 g1 g2 g3
b1 = g1 g2 g3
b2 = g2 g3
b3 = g3
Implementarea funcţiilor logice => circuite logice combinaţionale.
Reprezentarea în BCD ( zecimal codificat binar)
În această reprezentare, fiecare cifră zecimală este exprimată în cod binar prin 4
cifre binare. Întrucât cu 4 cifre binare putem reprezenta 16 valori, există mai multe
posibilităţi de punere în corespondenţă a celor 10 cifre zecimale cu codificarea binară
pe 4 biţi. Felul în care se face corespondenţa între cifrele zecimale şi reprezentarea
binară pe 4 biţi poate conduce la simplificarea circuitelor logice de calcul şi de comandă
ale unei structuri numerice.
Reprezetarea în cod BCD este adecvată în majoritatea sistemelor dedicate cu
afişare directă.
10 1010 1010=7
13 1101 1101=7
14 1110 1110=8
15 1111 1111=9
In continuare va fi discutata pe scurt conversia din binar in BCD.
Algoritmul de conversie rezulta din echivalenta dintre o deplasare la stanga a
unei valori binare si inmultirea cu 2. Astfel, se considera doua grupuri de biti,
corespunzatoare la doua registre in cazul unei implementari hardware: grupul binar si
grupul BCD (impartit in decade de cate 4 biti corespunzatoare cifrelor zecimale).
Se initializeaza grupul binar cu valoarea binara de convertit, iar grupul BCD cu 0.
Se executa deplasari succesive cu cate o pozitie spre stanga atat in grupul binar cat si
in grupul BCD, cu trecerea cate unui bit din grupul binar in grupul BCD, incepand cu
bitul c.m.s. Inainte de fiecare deplasare se executa corectii in acele decade din grupul
BCD care au o valoare > 4 (prin deplasare stanga, echivalent cu o inmultire cu 2, se
obtine o valoare > 9, deci care nu este cifra BCD).
Corectia consta din adunarea valorii 3 in fiecare decada cu valoare > 4 inainte de
deplasare. Conversia se incheie in momentul in care toti bitii din grupul binar au fost
transferati in grupul BCD.
Exemplu.
Se considera numarul in binar N(2) = 111110010. Sa se converteasca in BCD prin
metoda deplasarilor succesive prezentata mai sus.
Grup BCD Grup binar
0000 0000 0000 111110010
0000 0000 0001 11110010
0000 0000 0011 1110010
0000 0000 0111+ 110010
11
────
0000 0000 1010 110010
0000 0001 0101+ 10010
11
────
0000 0001 1000 10010
0000 0011 0001 0010
0000 0110+0010 010
11
────
0000 1001+0010 010
0001 0010 0100 10
0010 0100 1001+ 0
11
────
0010 0100 1100 0
0100 1001 1000
S-a obtinut rezultatul 498(10) in BCD pe 3x4 biti.
Conversia BCD - binar are la baza echivalenta dintre deplasarile succesive spre
dreapta si impartirile la 2.
In acest caz se initializeaza grupul BCD cu valoarea BCD de convertit, iar grupul
binar cu 0. Se executa deplasari succesive spre dreapta cu o pozitie atat in grupul BCD
cat si in grupul binar, efectuand corectii la acele decade in care, dupa deplasare, se
obtine bitul c.m.s egal cu 1.
Corectia consta in scaderea valorii 3 (echivalent cu adunarea complementului
sau, 13) din fiecare decada cu valoarea ≥ 8 (care a primit prin deplasare in pozitia
c.m.s un bit 1).
Necesitatea corectiei rezulta din faptul ca prin deplasare la dreapta cand un bit 1
trece din pozitia c.m.p.s. a unei decade in pozitia c.m.s. a decadei inferioare alaturate,
valoarea sa, relativ la decada inferioara, scade de la 10 la 8, in loc sa scada de la 10 la
5 (prin impartire la 2). Deci se executa corectia la decada inferioara in care a aparut
bitul 1 in pozitia c.m.s., scazand valoarea 3 (sau adunand 13).
Exemplu.
Sa se reprezinte in BCD numarul N(10)=503 si sa se converteasca in binar prin
metoda deplasarilor succesive.
Grup BCD Grup binar
0101 0000 0011 000000000
0010 1000+0001 1
1101
────
0010 0101 0001 1
0001 0010 1000+ 11
1101
────
0001 0010 0101 11
0000 1001+0010 111
1101
────
0000 0110 0010 111
0000 0011 0001 0111
0000 0001 1000+ 10111
1101
────
0000 0001 0101 10111
0001 0000 1010+ 110111
1101
────
0000 0000 0111 110111
....... (nu se modifica configuratia de biti)
0000 0000 0000 111110111
S-a obtinut valoarea N(2) = 111110111 (503(10)).
V = x *2
i
x i
i= 0
- numere subunitare: poziţia virgulei fiind interpretată înainte de cifra cea mai
semnificativă x-1
x = ,x-1x-2 ... x-n+1x-n
iar valoarea numărului
n
V = x *2
-i
x -i
i= 0
- numere reale: poziţia virgulei fiind interpretată în cadrul reprezentării. Există un
grup de biţi care specifică partea întreagă şi un număr de biţi care specifică partea
fracţionară. Această reprezentare combină cele două reprezentări anterioare. În
practică se utilizează numai în structuri numerice dedicate, în care se conoaşte foarte
bine domeniul de valori al datelor.
x = xkxk-1 ... x1x0,x-1x-2 ... x-m
iar valoarea numărului
k m
V x = x i * 2 + x -i * 2
i -i
i =0 i =1
In continuare se va discuta reprezentarea numerelor in virgula fixa. Se considera
un numar x reprezentat in calculator pe n biti, sub forma:
unde xs reprezinta bitul de semn, 0 pentru numar pozitiv si 1 pentru numar negativ, iar
ceilalti biti reprezinta modulul numarului.
daca x 0
xd =
0 xn − 2 xn − 3 ...x1 x0
1xn − 2 xn − 3 ...x1 x0 daca x 0
Exemple.
Sa se reprezinte in cod direct numerele x = 21 si y = -20 pe 6 biti.
[x]d = 010101
[y]d = 110100
0 xn − 2 xn − 3 ...x1 x0 daca x 0
0000 ...000
xi = sau daca x = 0
1111 ...111
1x n − 2 x n − 3 ...x1 x 0 daca x 0
unde
x k = 1 − xk
Se poate stabili o relatie importanta pentru numerele strict negative reprezentate
in cod invers. Astfel, daca x<0, atunci:
x + xi = 0 xn−2 xn−3 ...x1 x0 + 1x n−2 x n−3 ...x1 x 0 = 1111...111 = 2n − 1
Exemple.
Sa se reprezinte in cod invers numerele x = 21 si y = -20 pe 6 biti.
[x]d = [x]i = 010101
Reprezentarea numerelor pozitive in cod invers este identica cu reprezentarea in
cod direct. Numerele negative se reprezinta insa diferit. Pentru y se scrie mai intai
reprezentarea in cod direct, apoi se inverseaza (se complementeaza fata de 1) fiecare
bit al modulului.
[y]d = 110100
[y]i = 101011
1~
xn−2 ~
xn−3 ...~
x1 ~
x0 = 2 n − x
Se poate stabili o relatie importanta pentru reprezentarea numerelor negative in
cod complementar. Daca x<0. atunci:
Exemple.
Sa se reprezinte in cod complementar numerele x = 21 si y = -20 pe 6 biti.
[x]d = [x]i = [x]c = 010101
Din nou, reprezentarea numerelor pozitive in cod complementar este identica cu
reprezentarea in cod direct.
Pentru a obtine reprezentarea unui numar negativ in cod complementar, se scrie
mai intai numarul in cod direct, apoi se inverseaza bitii modulului pentru a obtine codul
invers si in final se aduna o unitate, in rangul cel mai putin semnificativ (c.m.p.s.),
conform relatiei stabilite mai sus.
[y]d = 110100
[y]i = 101011 +
1
────────
[y]c = 101100
Regula practica pentru scrierea codului complementar (numai pentru numerele
negative !): se parcurge reprezentarea numarului in cod direct de la dreapta spre
stanga, se lasa toate zerourile neschimbate pana la prima unitate, care de asemenea
ramane neschimbata, iar apoi se inverseaza toti ceilalti biti ai modulului.
unde xs si ys sunt bitii de semn ai celor doi operanzi. Aceasta relatie poate fi
obtinuta daca se studiaza toate cele opt combinatii posibile la adunarea / scaderea a
doua numere pozitive / negative. Se disting doua cazuri:
1) opfin = 0. In acest caz se aduna modulele celor doi operanzi, iar semnul
rezultatului este dat de semnul primului operand.
Este necesar sa se verifice ca la adunarea modulelor nu rezulta un
transport de la rangul cel mai semnificativ (c.m.s.), o astfel de situatie
insemnand depasire, deci rezultatul obtinut nu este corect (rezultatul este
prea mare in modul pentru a se putea reprezenta pe lungimea respectiva de
biti).
2) opfin = 1. In acest caz se scade modulul operandului mai mic din modulul
operandului mai mare, iar semnul rezultatului este dat de semnul operandului
mai mare in modul.
Exceptie: in cazul op = 1 (scadere) si |y|>|x|, semnul rezultatului este
Exemplu pt 1:
Sa se efectueze operatia x-y=z, unde x = 11, y = -14, pe 6 biti (in continuarea
exemplele vor fi de asemenea cu numere reprezentate in virgula fixa, pe 6 biti si nu se
va mai preciza acest lucru).
[x]d = 001011
[y]d = 101110
Se calculează:
(s-a considerat op=1, pentru scadere). Semnul rezultatului este zs=xs=0, iar
modulul se calculeaza:
|x|+ 01011+
|y| 01110
─── => ─────
|z| 11001
deci, s-a obtinut [z]d = 011001 (z = 25).
Exemplu pt. 2:
Sa se efectueze operatia x+y=z, unde x = -29, y = 17.
[x]d = 111101
[y]d = 010001
Se calculează:
(s-a considerat op=0, pentru adunare). Deoarece |x|>|y|, semnul rezultatului este
zs=xs=1, iar modulul se calculeaza:
|x|- 11101-
|y| 10001
─── => ─────
|z| 01100
deci, s-a obtinut [z]c = 101100 (z = -12 ).
xs OP1 ys OP2
COMPARATOR
0 OP1<=OP2
1 OP1> OP2
1 0 0 1
MUX s s MUX
OP1 OP2
0 1
MUX s SO
ADD
C out C in
OP1 OP2
0 1
MUX s SO
ADD
Z = /REZULTAT
• D depăşire, este poziţionat în unu, când cele două numere care se adună sunt
pozitive şi există transport spre bitul de semn, sau dacă operanzii sunt negativi şi
nu există transport spre bitul de semn.
Considerând xs, ys semnele celor doi operanzi şi ts transportul spre bitul
de semn, care atunci când apare modifică pe zs, semnul rezultatului astfel că
valoarea lui D se stabileşte cu ecuaţia:
D = x s ys z s x s ys z s
• T transport, se poziţionează pe 1 în cazul în care există un transport din bitul de
semn spre stânga.
• P paritate, se poziţionează pe 1 în cazul în care rezulatul are un număr par de
unităţi.
- înmulţirea directă;
- metoda von Newmann;
- metodele lui Robertson;
- metoda Booth;
- înmulţirea în complement faţă de 2;
- metoda înmulţirii scurte;
- înmulţirea rapidă cu salvarea transportului;
2.4 Inmultirea directa
x•y=z
Etape:
0 daca yk = 0
x yk 2 k =
x 2 daca yk = 1
k
0 daca yk = 0
x y− k 2 − k = −k
x 2 daca yk = 1
[x] = 0.10100
[y] = 1.10011
Etape:
1) Semnul rezultatului:
z s = xs y s = 0 1 = 1
2) Modulul rezultatului:
|z| = |x| • |y|
.10100•
.10011
───────────
.0000010100+ |x| • y-5 • 2-5 = |x| • 2-5
.0000101000 |x| • y-4 • 2-4 = |x| • 2-4
.0000000000 |x|•y-3•2-3=0
.0000000000 |x|•y-2•2-2=0
.0101000000 |x|•y-1•2-1=|x|•2-1
───────────
.0101111100
Rezultat exact!
=> [z] = 1.0101111100
z = - (0•2-1+1•2-2+0•2-3+1•2-4+1•2-5+1•2-6+1•2-7+1•2-8+0•2-9+0•2-10 ) =
= - (0•29+1•28+0•27+1•26+1•25+1•24+1•23+1•22+0•21+0•20)/210 =
= - (256+64+32+16+8+4)/1024 = - 380/1024
(corect !)
3) Trunchiere si rotunjire:
.01011 11100
↓
.01011+
1
───────
.01100
Rezultatul aproximativ [z] = 1.01100 => z = -12/32 (s-a obtinut rezultatul -
0.375, fata de cel exact 0.37109375).
OP1 OP2
MD registrul ce păstrează primul
operand (OP1)
0 n 0 n 0 1 n
MQ registrul ce păstrează al MD AC MQ
NB MD AC MQ Observaţii:
Fie :
x = xsx-1x-2...x-n
y = ysy-1y-2...y-n
două numere în virgulă fixă, subunitare, reprezentate în cod complementar.
Pentru a realiza z = x * y este acelaşi lucru cu a realiza z = x * Vy
Booth a propus ca cifrele de reprezentare ale înmulţitorului, în cod
complementar, să se înlocuiască cu diferenţa a două cifre adiacente:
y-j ← y-j-1 - y-j 1 ≤ j ≤ n
unde y-n-1 se consideră 0.
În acest caz:
z = x * ((y-1-ys)+(y-2-y-1)*2-1+(y-3-y-2)*2-2+...+(y-n-1-y-n)*2-n)
z = x * (-ys + y-1*2-1 + y-2*2-2 +...+y-n*2-n)
z = x * Vy
z=x*y
ceea ce ne arată că înlocuirea propusă de Booth conduce de altfel la realizarea directă
a produsului, unde numerele sunt reprezentate în cod complementar.
Astfel dacă
n+1
n+1
0 n 0 n 0 1 n n+1
MD AC MQ
ADD
0 m
NB Unitate de comanda
Metode pricipale:
- metoda comparaţiei;
- metoda refacerii restului parţial (metoda regenerării);
- metoda în care nu se reface restul parţial.
Metodele comparaţiei şi regenerării se aplică numai numerelor reprezentate în cod
direct iar ultima metodă se aplică oricărei forme de reprezentare necesitând totuşi nişte
corecţii.
În cazul împărţirii apar două probleme:
- abandonarea efectuării operaţiei de împărţire dacă împărţitorul este egal cu 0,
sau dacă deîmpărţitul este mai mare decât împărţitorul, pentru reprezentare în virgulă
fixă, numere subunitare sau dacă deâmpărţitul este mai mic decât împărţitorul, pentru
reprezentare în virgulă fixă, numere întregi;
- rotunjirea rezultatului.
Împărţirea în virgulă fixă prin metoda comparaţiei
Numere subunitare !
In ultima relatie de mai sus se inmultesc ambii membri cu 2-m, inlocuindu-se succesiv
fiecare r(k) din relatia precedenta in functie de r(k-1).
2-m•|r(m)|=
=-2-m•q-m•|y|+2-m•2•(2•...•(2•|x|-q-1•|y|)...-q-m+1•|y|)=
=2-m•2m•|x|-|y|•(q-1•2-1+q-2•2-2+...+q-m•2-m)=
=|x|-|y|•|q|
=>
|x| = |y|•|q| + 2-m•|r(m)|
rest corect 2-m•|r(m)|.
Exemplu. x : y, x = 20/32 si y = 25/32.
[x] = 0.10100
[y] = 0.11001
Impartirea se executa in cinci (n-1) pasi (1,2,...5):
Pas |y| |r(k)| q
───────────────────────────────────────────────
0 .11001 .10100 |r(0)|<|y| => OK!
───────────────────────────────────────────────
1 .11001 1.01000- |r(1)|≥|y| => q-1=1
.11001
────────
.01111
───────────────────────────────────────────────
2 .11001 .11110- |r(2)|≥|y| => q-2=1
.11001
────────
.00101
───────────────────────────────────────────────
3 .11001 .01010 |r(3)|<|y| => q-3=0
───────────────────────────────────────────────
4 .11001 .10100 |r(4)|<|y| => q-4=0
───────────────────────────────────────────────
5 .11001 1.01000- |r(5)|≥|y| => q-5=1
.11001
────────
.01111
=>
[q] = 0.11001 (q = 25/32) si [r] = 0.0000001111 (r = 15/1024).
Verificare: x = q • y + r (20/32 = 25/32 • 25/32 + 15/1024).
OP2 OP1
0 n 0 n 0 1 n
MD AC MQ
COMPARATOR
ADD
NB Unitate de comanda
2. dacă MD = 0
atunci împărţire prin zero, gata operaţie.
dacă AC MD
atunci depăşire, gata operaţie
dacă AC = 0 şi MQ ≤ MD
atunci rezultat zero, gata operaţie.
3. deplasează AC,MQ la stânga cu o poziţie cu introducere MQn ← 0
AC,MQ ← 2(AC,MQ),0
4. atât timp cât NB < n
dacă AC MD
atunci AC ← AC - MD
AC,MQ ← 2(AC,MQ),1 deplasează cu introducere 1
altfel AC,MQ ← 2(AC,MQ),0 deplasează cu introducere 0
incrementează contorul de biţi NB ← INC(NB)
5. stabileşte semn rezultat MQs = ACs MDs
Se obţine în registrul MQ câtul împărţirii iar în registrul AC restul.
0 n 0 n 0 1 n
MD AC MQ
ADD
NB Unitate de comanda
1.
• se citeşte împărţitorul în registrul MD;
• se citeşte deîmpărţitul în registrul AC;
• se încarcă eventual registrul MQ cu extensia deîmpărţitului dacă acesta este pe
lungime dublă;
• se iniţializează registrul contor de biţi NB ← 0;
bitul de semn al operanzilor nu participă decât la stabilirea semnului
2. dacă MD = 0
atunci împărţire prin zero, gata operaţie.
dacă AC MD
atunci depăşire, gata operaţie
dacă AC = 0 şi MQ ≤ MD
atunci rezultat zero, gata operaţie.
3. deplasează AC,MQ la stânga cu o poziţie cu introducere MQn ← 0
AC,MQ ← 2(AC,MQ),0
4. atât timp cât NB < n
AC ← AC - MD
dacă rezultat pozitiv
atunci AC,MQ ← 2(AC,MQ),1 deplasează cu introducere 1
altfel AC ← AC + MD reface restul parţial
AC,MQ ← 2(AC,MQ),0 deplasează cu introducere 0
incrementează contorul de biţi NB ← INC(NB)
5. stabileşte semn rezultat MQs = ACs MDs
Se obţine în registrul MQ câtul împărţirii iar în registrul AC restul.
Exemplu:
Să considerăm:
AC = -5/16 deîmpărţitul reprezentat în cod direct pe 5 biţi
= 10101
MD = -6/16 împărţitorul reprezentat în cod direct pe 5 biţi
= 10110
Verificare:
Algoritmul de împărţire prin metoda fara refacerea restului parţial este următorul:
1.
• se citeşte împărţitorul în registrul MD;
• se citeşte deîmpărţitul în registrul AC;
• se încarcă eventual registrul MQ cu extensia deîmpărţitului dacă acesta este pe
lungime dublă;
• se iniţializează registrul contor de biţi NB ← 0;
2. dacă MD = 0
atunci împărţire prin zero, gata operaţie.
dacă AC MD
atunci depăşire, gata operaţie
dacă AC = 0 şi MQ ≤ MD
atunci rezultat zero, gata operaţie.
3. deplasează AC,MQ la stânga cu o poziţie cu introducere MQn ← 0
AC,MQ ← 2(AC,MQ),0
4. atât timp cât NB < n
dacă ACs MDs = 0
atunci AC ← AC - MD
AC,MQ ← 2(AC,MQ),1 deplasează cu introducere 1
altfel AC ← AC + MD
AC,MQ ← 2(AC,MQ),0 deplasează cu introducere 0
incrementează contorul de biţi NB ← INC(NB)
5. Dacă operanzii sunt reprezentaţi în alt cod decât cod direct se face o corecţie.
stabileşte semn rezultat MQs = ACs MDs
Se obţine în registrul MQ câtul împărţirii iar în registrul AC restul.
Exemplu:
Să considerăm:
AC = -5/16 deîmpărţitul reprezentat în cod complementar pe 5 biţi
= 11011
MD = -6/16 împărţitorul reprezentat în cod complementar pe 5 biţi
= 11010
Verificare:
AC/MD = 01101 rest 11111110
Se observă că se respectă relaţia fundamentală a împărţirii:
|x| = |y| * |q| + r
1.1011 = 1.1010 * 0.1101 + 1.11111110
4.2 Operaţii aritmetice în virgulă mobile
Mantisa:
1/baza ≤ m < 1 (baza 2 => ½ ≤ m < 1 ~ primul bit, c.m.s. este 1).
Exponentul:
caracteristica = exponent + 2numar de biti exponent – 1
Chiar daca s-au eliminat erorile de conversie din zecimal in binar prin alegerea unor
numere care se convertesc exact, pe parcursul calculelor au aparut erori la anumite
operatii:
- la aducerea operanzilor la acelasi exponent, prin deplasarea spre dreapta a
mantisei operandului B cu doua pozitii s-au pierdut biti 1, deci valoarea lui B s-a
modificat;
- la deplasarea spre dreapta a mantisei rezultatului s-a mai pierdut un bit 1, deci
valoarea lui C s-a modificat.
=> Concluzia: operatiile cu numere in virgula mobila furnizeaza in general
rezultate aproximative !
Pentru impartirea a doua numere reale reprezentate in virgula mobila A:B=C sunt
necesare urmatoarele etape:
1) Verificarea operanzilor: se verifica daca impartitorul este nul (eroare) sau daca
deimpartitul este nul (rezultat zero).
2) Se scad cei doi exponenti, realizand si corectia prin adunarea unui
deplasament (2numar biti exponent –1 ).
3) Se determina semnul rezultatului pe baza regulii semnelor de la impartirea din
matematica (se calculeaza prin sau-excusiv dintre bitii de semn ai celor doi operanzi).
4) Se impart mantisele celor doi operanzi.
Deoarece 1/2 ≤ mA, mB < 1 rezulta ca 1/2 < mC < 2. Daca exista depasire la
rezultat, se deplaseaza mantisa o pozitie spre dreapta si se incrementeaza exponentul.
In organigrama urmatoare sunt prezentate operatiile elementare pentru
efectuarea impartirii a doua numere in virgula mobila
Exemplu. Sa se efectueze operatia de impartire A : B = C, unde A = (28/32)•25 si B = (-
17/32) •211.
Se reprezinta cei doi operanzi in virgula mobila pe 11 biti:
A = 0 10101 11100
B = 1 11011 10001
Se calculeaza exponentul rezultatului:
10101+ eA+
10000 deplas
─────── ───────
100101- (deplas+eA)-
11011 eB
─────── ───────
01010 eC
Se calculeaza semnul rezultatului:
Se impart mantisele celor doi operanzi (in acest exemplu se prezinta o metoda directa
de impartire, asemanatoare cu cea din zecimal):
AIE
MAG
UE
RA T1 T2
S
E RB
L
RC
IS UAL M
RG
XA AM
XB
BA
BB
RI CP
IND
UC
Interpretor
Generare comenzi
cod
instructiune
verificare stari
RG x x x x x x x
M x x x x x x x x x
T1 x
T2 x
RI x
CP x x x x
I/E x x
AIE x
UAL x x x x x x x
AM
IND x
Format Funcţie
instrucţiune
POP destinaţie POP transferă cuvântul din vârful stivei indicat de IS la operandul
destinaţie apoi incrementează pe IS pentru a indica noul vârf al stivei.
POP permite transferarea datelor temporare din stivă în registre sau
memorie. POP nu afectează indicatorii.
PUSHF PUSHF decrementează indicatorul stivei IS, apoi transferă toţi indicatorii
în cuvântul din vârful stivei indicat de IS. Conţinutul indicatorilor nu se
schimbă.
POPF POPF transferă biţii corespunzători din cuvântul aflat în vârful stivei în
indicatorii de condiţii înlocuind vechile valori ale acestora. IS este
incrementat pentru a indica noul vârf al stivei.
OUT port OUT transferă un cuvânt din RA la portul de ieşire specificat prin adresa
"port".
Indicator Funcţie
T (transport) 1. este setat (pozitionat în "1" ) dacă în urma unei adunări rezultă un transport dinspre
rangul cel mai semnificativ, altfel T este şters (trecut în "0"). Transportul T este setat
dacă în urma unei scăderi rezultă un împrumut în cel mai semnificativ bit al rezultatului,
altfel este şters.
2. poate fi interpretat ca depăşire în operaţiile cu numere întregi fără semn.
3. poate fi utilizat în instrucţiunile ADC şi SBB pentru a efectua operaţii aritmetice în
precizie multiplă (32 de biţi sau 64 biţi).
4. poate fi testat cu instrucţiuni de salt condiţionat.
Z 1. este setat dacă în urma unei operaţii aritmetice sau logice se obţine rezultat egal cu 0,
altfel Z este şters.
(zero)
2. poate fi testat cu instrucţiuni de salt condiţionat pentru a dirija secvenţa de execuţie a
instrucţiunilor în funcţie de valoarea rezultatului.
P (paritate) 1. indicatorul de paritate P este setat dacă în urma execuţiei unei operaţii aritmetice sau
logice rezultatul conţine un număr par de biţi egali cu 1, altfel P este şters.
2. poate fi testat cu instrucţiuni de salt condiţionat.
D (depăşire) 1. indicatorul de depăşire D este setat dacă în urma execuţiei unei operaţii aritmetice
rezultatul este un număr pozitiv prea mare sau un număr negativ prea mic pentru a
putea fi reprezentat în operandul destinaţie (exclusiv bitul de semn); altfel D este şters.
2. poate fi interpretat ca depăşire în operaţiile cu numere întregi cu semn şi poate fi testat
cu instrucţiuni de salt condiţionat.
3. poate fi ignorat în operaţiile aritmetice cu numere întregi fără semn.
Formatul instrucţiunilor aritmetice şi funcţiile efectuate la execuţia acestora:
ADD destinaţie, sursă Suma celor doi operanzi trece în locul operandului destinaţie. Operanzii pot fi
numere binare cu semn sau fără semn. ADD pozitionează indicatorii T, S, Z, P, D.
ADC destinaţie, sursă ADC adună cei doi operanzi şi mai adună 1 dacă T=1 iar rezultatul îl trece în locul
operandului destinaţie. Operanzii pot fi numere binare cu sau fără semn. ADC se
utilizează pentru operaţii în precizie multiplă. ADC poziţionează toţi indicatorii de
condiţii.
INC destinaţie INC adună 1 la operandul destinaţie considerat ca un număr pe 16 biţi fără semn.
INC poziţionează bistabilii de condiţii cu excepţia lui T.
SUB destinaţie,sursă Operandul sursă este scăzut din operandul destinaţie şi rezultatul este trecut în
locul operandului destinaţie. Operanzii pot fi numere binare cu sau fără semn. SUB
pozitionează toţi indicatorii de condiţii.
SBB destinaţie,sursă SBB scade operandul sursă din operandul destinaţie şi mai scade 1 dacă T=1.
Rezultatul trece în locul operandului destinaţie. Operanzii pot fi numere binare cu
sau fără semn. SBB se utilizează pentru operaţii în precizie multiplă. SBB
pozitionează toţi indicatorii de condiţii.
DEC destinaţie DEC scade 1 din operandul destinaţie considerat ca un număr pe 16 biţi fără semn.
DEC poziţionează indicatorii cu excepţia lui T.
NEG destinaţie Operandul destinaţie se scade din 0 şi rezultatul trece în locul operandului
destinaţie. Aceasta operaţie inversează semnul unui întreg, trecându-l sub formă
de complement faţă de doi. Dacă se încearcă negarea lui -32768, operandul
rămâne neschimbat şi se setează indicatorul de depăşire, D=1. NEG poziţionează
toţi indicatorii de condiţii. T este întotdeauna setat exceptând situaţia în care
operandul este zero.
CMP destinaţie,sursă CMP scade operandul sursă din operandul destinaţie dar rezultatul nu se reţine.
Operanzii rămân neschimbaţi iar indicatorii de condiţii sunt poziţionaţi
corespunzător şi pot fi testati cu instrucţiuni de salt condiţionat.
5.3.3 Instrucţiuni logice şi de deplasare
În acest grup au fost incluse instrucţiunile care operează asupra biţilor unui
cuvânt prin funcţii logice şi de deplasare. Instrucţiunile logice afectează indicatorii astfel:
T şi D sunt întotdeauna zero în urma unei operaţii logice iar Z, S şi P sunt poziţionaţi în
funcţie de rezultatul operaţiei şi pot fi testaţi cu instrucţiunile de salt condiţionat, ca şi în
cazul instrucţiunilor aritmetice.
Instrucţiuni logice şi de deplasare:
NOT destinaţie NOT inversează (complementul faţă de 1) biţii cuvântului dat de operandul
destinaţie.
AND destinaţie,sursă AND efectuează "ŞI" logic între biţii celor doi operanzi şi trece rezultatul în locul
operandului destinaţie.
OR destinaţie,sursă OR efectuează "SAU" logic între biţii celor doi operanzi şi trece rezultatul în locul
operandului destinaţie.
XOR destinaţie,sursă XOR efectuează "SAU-exclusiv" între biţii celor doi operanzi şi trece rezultatul în
locul operandului destinaţie.
TEST destinaţie,sursă TEST efectuează "ŞI" logic între cei doi operanzi şi nu se reţine rezultatul. Cei doi
operanzi rămân neschimbaţi iar indicatorii sunt pozitionaţi corespunzător, putând fi
testaţi cu instrucţiunile de salt condiţionat.
Bistabilii de condiţii sunt afectaţi de instrucţiunile de deplasare în felul următor: S, Z, P
sunt poziţionaţi în mod obişnuit, ca şi în cazul instrucţiunilor logice. T conţine
întotdeauna bitul deplasat în afara operandului destinaţie iar D este setat dacă în urma
operaţiei de deplasare bitul cel mai semnificativ (semn) şi-a schimbat valoarea, altfel D
este şters.
Formatul instrucţiunilor de deplasare
SHR destinaţie SHR deplasează logic la dreapta biţii operandului destinaţie introducînd
zero în bitul cel mai semnificativ.
CALL nume-procedura CALL transferă controlul la procedura definită în cadrul programului şi salvează în stivă
informatiile necesare revenirii în programul principal (chemător). Revenirea se face la
instrucţiunea imediat următoare instrucţiunii CALL, prin executarea, în procedura
chemată, a unei instrucţiuni RET. Indiferent de modul în care se calculează adresa
procedurii, unitatea centrală decrementează registrul IS şi salvează apoi în stivă adresa
instrucţiunii următoare lui CALL. Valoarea calculată, reprezentând adresa procedurii
înlocuieşte apoi conţinutul registrului CP şi secvenţa continuă cu execuţia procedurii
RET RET transferă controlul dintr-o procedură înapoi în programul chemător, la instrucţiunea
imediat următoare instrucţiunii care a activat, prin CALL, procedura. RET extrage
conţinutul celulei indicată de IS (vârful stivei) şi-l introduce în registrul CP apoi
incrementează pe IS.
IRET IRET transferă controlul dintr-o procedură de tratare a unei întreruperi înapoi în
programul întrerupt prin următoarea secvenţă de operaţii, conţinutul celulei din vârful
stivei, indicată de IS, este transferat în registrul CP, se incrementează IS şi conţinutul
celulei indicată de IS (actualizat) este transferat în registrul de indicatori după care IS se
incrementează din nou şi programul continuă cu instrucţiunea de la adresa aflată în
registrul CP. IRET poziţionează indicatorii de condiţii conform conţinutului din stivă.
JMP destinaţie JMP transferă controlul la locaţia indicată de destinaţie. JMP nu salvează nimic în
stivă, execuţia programului continuă cu instrucţiunea indicată de adresa calculată
(adresa destinaţie).
Jcond destinaţie Instrucţiunile de salt condiţionat transferă controlul la altă secvenţă numai dacă se
îndeplineşte condiţia de test specificată în instrucţiune. Dacă nu este îndeplinită
condiţia de salt se continuă execuţia programului cu instrucţiunea următoare. Adresa
"destinaţie" trebuie să fie cuprinsă în limitele - 128 şi +127 . Saltul se face relativ la
contorul program : CP + " destinaţie ".
HLT HLT trece unitatea centrală de prelucrare într-o stare de aşteptare a unei întreruperi
sau reiniţializare a secvenţei de comandă. Altfel spus din starea de HALT se poate ieşi
numai în urma unei întreruperi (continuându-se cu instrucţiunea următoare lui HLT) sau
cu un reset (care introduce 0 în CP ).
5.4 Formatul instrucţiunilor calculatorului didactic
Instrucţiunile calculatorului didactic pot manipula operanzi aflaţi în registrele
unităţii centrale, operanzi continuţi în instrucţiuni sau operanzi aflaţi în memorie,
adresele efective ale acestor operanzi fiind calculate în diferite moduri, asigurând o
mare supleţe în adresare.
Instrucţiunile au lungimi variabile de 1, 2 sau 3 cuvinte de câte 16 biţi, lungimea
fiind dictată de tipul operaţiei codificate, de numărul de operanzi, de modul de adresare,
etc.
Structura instrucţiunii calculatorului didactic:
0 6 7 8 9 10 12 13 15
II) Deplasament/Data
Figura 5.2
III) Data
Câmp Descriere
COP reprezintă codul operaţiei, are 7 biţi şi reprezintă funcţia ce trebuie efectuată
D specifică destinaţia rezultatului ţinând seama de faptul că cei doi operanzi ai instrucţiunii sunt indicaţi
cu ajutorul câmpurilor REG şi RM.
d = 0 , RM RM COP REG
d = 1 , REG REG COP RM
REG specifică registrul care conţine operandul, sau se foloseste ca extensie a câmpului COP, ocupă 3 biţi
RM indică registrul care conţine un operand sau registrul folosit pentru calculul adresei efective.
Al doilea cuvânt al instrucţiunii (II) conţine deplasamentul (depls) folosit în
calculul adresei efective sau data ca operand imediat, în cazul instrucţiunilor fără
deplasament sau fără adresare la memorie.
Al treilea cuvânt al instrucţiunii (III), în cazul în care există, specifică data ca
operand imediat.
AE MEMORIE
Figura 5.3 OPERAND
2. Adresare indirectă
Adresa efectivă se citeşte din memorie, din locaţia a cărei adresă este conţinută în al
doilea cuvânt al instrucţiunii.
AE = [Depls]
Exemplu: mov RA,[adresa]
0 6 7 8 9 10 12 13 15 0 15
MEMORIE
AE
Figura 5.4
MEMORIE
AE
OPERAND
XA
AE = XB
BA
BB
XA
AE MEMORIE
Figura 5.5 XB
OPERAND
BA
BB
4. Adresare indirectă prin sumă de registre
Adresa efectivă se obţine ca sumă a conţinutului unui registru de bază cu
conţinutul unui registru index.
BA+XA
AE = BA+XB
BB+XA
BB+XB
RG RG
BA XA
BB XB
Figura 5.6 +
MEMORIE
AE
OPERAND
BA+XA+ BA+XA
AE = BA+XB+ ceea ce este echivalent cu : AE = BA+XB
BB+XA+ BB+XA
BB+XB BB+XB
+
;XA XA + 1
;XB XB + 1
Incrementarea registrului index XA sau XB are loc după participarea la calculul
adresei efective.
Exemplu: mov RA,[BA][XA+]
0 6 7 8 9 10 12 13 15
0 1 x x x 0 x x
RG RG
BA XA+
BB XB+
Figura 5.7 +
MEMORIE
AE
OPERAND
AE = BA+XA- BA+XA
BB+XA- ceea ce este echivalent cu: XA XA -1 şi AE =
BB+XA
0 6 7 8 9 10 12 13 15
0 1 x x x 1 0 x
RG
RG
BA
XA-
BB
Figura 5.8 +
MEMORIE
AE
OPERAND
7. Adresare bazată
Adresa efectivă se obţine prin adunarea conţinutului celui de-al doilea cuvânt al
instrucţiunii cu unul din registrele bază.
AE = BA + deplasament
BB
1 0 x x x 1 1 x
RG
BA
BB
Figura 5.9 +
MEMORIE
AE
OPERAND
8. Adresare indexată
Adresa efectivă se obţine prin adunarea conţinutului celui de-al doilea cuvânt al
instrucţiunii cu unul din registrele index.
AE = XA + deplasament
XB
1 0 x x x 1 0 x
RG
XA
XB
Figura 5.10 +
MEMORIE
AE
OPERAND
1 0 x x x 0 x x
RG
BA
BB
XA
XB
Figura 5.11
MEMORIE
AE
OPERAND
10. Adresare imediată
Operandul se găseşte în al doilea cuvânt al instrucţiunii sau al treilea cuvânt al
instrucţiunii.
AE = CP + 1
CP + 2
0 6 7 8 9 10 12 13 15 0 15
sau
0 6 7 8 9 10 12 13 15 0 15
AE
0 15
operand
Figura 5.12
0 6 7 8 9 10 12 13 15 0 15
OPERAND RA
RB
AE
RC
IS
OPERAND BA
Figura 5.13 BB
XA
XB
5.6 Clasificarea instrucţiunilor
0 6 7 8 9 10 12 13 15 0 15
0 6 7 8 9 10 12 13 15 0 15
0 6 7 8 9 10 12 13 15 0 15
0 15
data(operand imediat)
0 7 8 15
COP
0 3 4 7 8 15
b) J cond
MOD(RI8,RI9)
RM(RI13:15) 00 01 10 11
000 [BA+XA] [ BA+XA+Depls RA* 0
BA+XA+]
001 [BA+XB] [BA+XB+] BA+XB+Depls RB* 1
2 3
Registru Adresă
RA 0
RB 1
RC 2
IS 3
XA 4
XB 5
BA 6
BB 7
26. → (RI1)/(57)
/* se separă instrucţiunile cu două adrese de celelalte
27. → (RI3)/(54)
/* se separă instrucţiunile cu o adresă reprezentand operatii (54) de cele de transfer
date şi ramificaţie.
/* Execuţia instrucţiunilor MOV; CALL; JMP; PUSH; POP (organigrama din Fig. 5.20)
28. → (RI4,RI5)/(48,38)
/* se separă instrucţiunile CALL;JMP (pas48) şi PUSH;POP (pas 38) de instrucţiunile
MOV care se tratează în continuare
/* Execuţia instrucţiunilor MOV
29. → (RI2)/(33)
/* se tratează separat instrucţiunea MOV cu operand imediat de cea cu operand de la
adresă efectivă;
ţinând seama de sensul bitului d=RI7 şi modul de adresare prezentate în formatul
instrucţiunilor, operandul sursă al instrucţiunii MOV poate fi într-un registru general
specificat de biţii REG sau RM sau într-o celulă de memorie specificată de adresa
efectivă.
dacă d=0 sursa este în RG specificată de REG iar destinaţia este în RG specificata
de RM (MOD=11) sau în memorie la adresa efectivă (MOD≠11)
dacă d=1 sursa este în RG specificată de RM sau în memorie la adresa efectivă iar
destinaţia în RG specificată de REG
/* Execuţia instrucţiunilor PUSH şi POP
38. → (RI6)/(43)
/* se separă instrucţiunea POP. Se citeşte în T1 operandul ce trebuie dus în stivă
40. T2 BUSFN(RG;DCD(ADRIS))
/* se decrementează IS şi se duce şi în registrul de adrese al memoriei
[Link]*DCD(ADRIS) ADD(0FFFFH;T2;0)
AM ADD(0FFFFH;T2;0)
42. M*DCD(AM) T1
→ (32)
/* se salvează operandul sursă în stivă şi se merge la formarea adresei instrucţiunii
următoare
/* se execută POP
43. AM BUSFN(RG;DCD(ADRIS))
44. T2 BUSFN(M;DCD(AM))
/* se citeşte din stivă
45. AM T1
/* se reface adresa efectivă din registrul de adrese al memoriei
46. T1 BUSFN(RG;DCD(ADRIS))
/* se incrementează
47. RG*DCD(ADRIS) ADD(T1;0;1)
→ (37)
11 =11
MOD=11
54 54
55 T1 operatie(T1)
Depunere rezultat
56
11 =11
MOD=11
M⊥AM T1 RG⊥R/M T1
57
1
RI2
61:64
58
0
T1 dest T2 Data(M⊥CP+1)
59
65
T2 sursa T1 dest
60
T1*RI3 T1 operatie T2
1 operand imediat
RI2
0
depune rezultat in depune rezultat
M⊥AM; RG⊥REG; RG⊥R/M 31 56
/* depunerea rezultatului se face diferit pentru instructiune cu operand imediat
/* execuţia instrucţiunilor cu doi operanzi, dintre care unul este imediat
/*Exec. instr. fără calcul de adresă efectivă IN;OUT;PUSHF;POPF;RET;IRET; HLT
66 85
1
RI3
conditie
0
coind
indepl
67
68 00 RET,IRET,HLT 84 da
RI4:5
IN,OU 10 11
AIE RI8:15 T PUSHF,POPF 01 72 CP M⊥IS DEAD
73:75 76:78 ISIS+1 END
0 1
RI6 86:88
69 PUSHF POPF
0
ISIS-1 IND M⊥IS RI6
0 1 CP CP+RI8:15
RI6 M⊥IS IND ISIS+1
1
IN OUT 82:83
70 71
IND M⊥IS
IRET RET
RA Port ⊥AIE
Port ⊥AIE
RA ISIS+1
Formarea 2 Citirea
[Link] 32 adresei instructiunii
urmatoare urmatoare
66. → RI3/(85)
/* se separă instrucţiunile de salt condiţionat
67. → (RI 4 RI 5 , RI 4 RI 5 , RI 4 RI 5 )/(72,79,8 4)
/* se separă instrucţiunile PUSHF; POPF (pas 72), instrucţiunile RET; IRET (pas 79) şi
instrucţiunea HLT (pas(84)
/* Execuţia instrucţiunilor IN, OUT
68. AIE RI8:15
69. → RI6/(71)
/* se separă instrucţiunea OUT
70. RG*DCD(ADRRA) BUSFN(PORT;DCD(AIE))
→ (32)
/* se execută instrucţiunea IN
71. PORT * DCD(AIE) BUSFN(RG;DCD(ADRRA))
→ (32)
/* se execută instrucţiunea OUT
/* Execuţia instrucţiunilor PUSHF; POPF
72. → (RI6)/(76)
/* se separă POPF
/* în continuare se execută PUSHF
73. T1 BUSFN(RG;DCD(ADRIS))
74. RG*DCD(ADRIS) ADD(T1;OFFFFH;0);
AM ADD(T1;0FFFFH;0)
75. M*DCD(AM) IND
→ (32)
/* s-a executat instrucţiunea PUSHF
76. AM BUSFN(RG;DCD(ADRIS))
T1 BUSFN(RG;DCD(ADRIS))
77. IND BUSFN(M;DCD(AM))
78. RG*DCD(ADRIS) ADD(T1;0;1)
→ (32)
/* s-a executat instrucţiunea POPF
/* Execuţia instrucţiunilor RET;IRET
79. AM BUSFN(RG;DCD(ADRIS))
T1 BUSFN(RG;DCD(ADRIS))
80. CP BUSFN(M;DCD(AM))
/* se reface contorul program
81. RG*DCD(ADRIS) ADD(T1;0;1)
AM ADD(T1;0;1)
T1 ADD(T1;0;1)
→ RI 6 /(2)
/* se separă RET a cărei execuţie s-a terminat
82. IND BUSFN(M;DCD(AM))
/* se execută IRET
83. RG*DCD(ADRIS) ADD(T1;0;1)
→ (2)
/* Execuţia instrucţiunii HLT
84. DEAD END
/* Execuţia instrucţiunilor de salt condiţionat
/* Condiţie neîndeplinită, salt la instrucţiunea următoare
86. T1 CP
87. T2 RI8:15
/* transferul se face cu extensia semnului RI8 pe biţii 0:7)
88. CP ADD(T1;T2;0)
→ (2)
Mnemonică Funcţie
93. T2 BUSFN(RG;DCD(ADRRC))
94. RG * DCD(ADRRC) ADD(0FFFFH;T2;0);
T2 ADD(0FFFFH;T2;0)
95. → (( /T2 ) RI 4 Z )/(32)
96. T1 CP
97. T2 RI8:15
98. CP ADD (T1;T2;0)
→ (2)
7.1 Generalităţi
Legatura unităţii centrale cu mediul extern se realizează prin intermediul subsistemului
de intare/ieşire (I/E).
În funcţie de domeniul de utilizare a sistemului de calcul, subsistemul de I/E este
proiectat pentru:
-a conversia informaţiei ce caracterizează mediul extern într-un format acceptat
de către unitatea centrală;
-conversia rezultatelor prelucrărilor în formatul specific mediului extern.
Pentru a proiecta un subsistem de I/E trebuie examinate aspecte privind:
structura informaţiilor de I/E;
operaţiile de bază implicate într-un transfer de I/E;
modalităţi de transfer a datelor de I/E;
interacţiunea şi sincronizarea unităţii centrale de prelucrare cu echipamentele
periferice.
Structură ierarhică hardware-software a sistemului de calcul, care
arată cum este văzut SIE de utilizatorul de operaţii de I/E:
• Sistemul de programe care asigură transferul, prelucrarea şi
structurarea informaţiilor în funcţie de aplicaţie; MEMORIE
Suport exterior
Activeaza EP
Sistem
operare Citire stare EP
Rutina Nu
tratare EP operational
eroare
Da
Eventuale
Comanda citire prelucrari
Citire stare EP
Nu
EP operational
Da
Nu
Date
disponibile?
Da
Nu
Transfer
corect?
Rutina pentru citire cuvant Da
Preluare date
Nu
Transfer
bloc terminat?
Da
Dezactiveaza EP
transferul unui bloc de date prin citirea ciclică a stării, operaţia de scriere cuvânt
Activeaza EP
Sistem
operare Citire stare EP
Rutina Nu
tratare EP operational
eroare
Da
Pregatire nou
cuvant din
bloc
Transfer date
Comanda scriere
Eventuale
Citire stare EP prelucrari
Nu EP
operational?
Da
Nu
Operatie
tereminata?
Da
Nu
Transfer
corect?
Rutina apentru scriere cuvant
Da
Nu
Transfer bloc
terminat?
Da
Dezactiveaza EP
transferul unui bloc de date prin citirea ciclică a stării, operaţia de scriere cuvânt
Activeaza EP
Sistem
operare Citire stare EP
Rutina Nu
tratare EP operational
eroare
Da
Pregatire nou
cuvant din
Nu
bloc
Operatie
terminata?
Da
Eventuale
Nu Transfer prelucrari
corect?
Da
Rutina pentru scriere cuvant
Transfer date
Comanda scriere
Nu
Transfer
bloc terminat?
Da
Dezactiveaza EP
transferul unui bloc de date în întreruperi; citirea unui bloc de date
Activeaza EP
Sistem Sistem
Citire stare EP
operare operare
Nu
Rutina EP
tratare operational? Rutina
eroare tratare
Da
eroare
Comanda citire
Salvare context
Nu
EP
operational?
Da
Transfer
corect?
Da
Preluare date
Transfer
bloc terminat?
Comanda citire
Dezactivare EP
actualizare date
Intrerupere de la EP
Refacere context
transferul unui bloc de date în întreruperi; scrierea unui bloc de date
Activeaza EP
Sistem Sistem
Citire stare EP
operare operare
Nu
Rutina EP
tratare operational? Rutina
eroare Da
tratare
eroare
Transfer date
Comanda scriere
Salvare context
Nu
EP
operational?
Da
Nu
Transfer
corect?
Da
Nu
Transfer
bloc terminat?
Pregatire
nou cuvant Da
din bloc
Transfer date Dezactivare EP
Comanda scriere
Intrerupere de la EP
Refacere context
7.4 Modalităţi de transfer al datelor de I/E
Din punctul de vedere al modului în care unitatea centrală de prelucrare şi
echipamentele periferice interacţionează pentru efectuarea transferurilor de I/E
distingem următoarele modalităţi de transfer al datelor :
• transfer programat;
• acces direct la memorie (DMA);
• canal de intrare/ ieşire;
• procesor specializat pentru intrare / ieşire.
Transfer programat
Fiecare cuvânt transferat implică participarea unităţii centrale de prelucrare, prin
executarea unei secvenţe de instrucţiuni reprezentând programul de I/E specific.
Prin intermediul interfeţelor de I/E, unitatea centrală de prelucrare şi
echipamentele periferice, interacţionează la fiecare cuvânt transferat. Interacţiunea:
• cuvânt de stare citit în mod ciclic;
• prin întreruperi.
Transferul programat este uşor de implementat:
• interfaţa;
• programul ce controlează transferul de date.
Dezavantaj: ineficient din punctul de vedere al utilizării unităţii centrale de prelucrare.
Utilizare: echipamente cu debitul de transfer şi cantitatea de informaţii transferate relativ
scăzute.
Canalul de I/E:
• poate transfera mai multe blocuri de date fară intervenţia UCP;
• functionare "inteligenta" în cazul apariţiei unor evenimente în cursul transferului
(ex: erori de poziţionare a capetelor la disc, porţiuni de suport magnetic
deteriorat, erori de citire tranzitorii, etc.) rezolvând fară intervenţia UCP aceste
situaţii;
• la terminare sau la apariţia unor erori fatale (iremediabile) se invocă intervenţia
UCP.
În general, un canal controlează transferul cu mai multe echipamente periferice =>
două tipuri de canale de I/E:
• de tip selector, care controlează un singur periferic la un moment dat;
• de tip multiplexor, care controlează mai multe periferice simultan.
Interfaţarea imprimantei
Imprimanta: echipament periferic de ieşire (tipărirea caractere ASCII).
Caracteristicile interfeţei pentru imprimantă sunt :
• viteza de scriere este de 200 linii/minut;
• lungimea liniei este de maxim 132 caractere. Dacă se transmit mai mult de 132
caractere fară a se comanda întoarcerea carului de tipărire (transmiterea
caracterului CR = 0DH) şi trecerea la o linie nouă (transmiterea caracterului LF =
0AH) caracterele se supraimprimă în ultima poziţie;
• interfaţa trebuie să identifice caracterele de control CR, LF şi să genereze pentru
imprimantă, comenzi de întoarcere car respectiv avans rând.
• interfaţa este prevăzută cu o memorie tampon circulară de 256 celule, Fig. 7.6,
de tip FIFO (FIRST IN-FIRST OUT) primul introdus - primul extras, pentru a
asigura o adaptare între viteza de lucru a unităţii centrale de prelucrare şi
imprimanta. Unitatea de comandă a memoriei FIFO acordă prioritate operaţiei de
scriere din partea unităţii centrale de prelucrare.
Resursele memoriei tampon de tip FIFO sunt:
MT - memorie de tip RAM de 256 cuvinte a 8 biţi ;
RSMT - registrul de adrese pentru operaţia de scriere în memoria
tampon, ce indică adresa celulei în care unitatea centrală de
prelucrare înscrie un nou caracter ;
RCMT - registrul de adrese pentru operaţia de citire din memoria tampon,
ce indică adresa celulei de unde interfaţa preia un caracter pentru
a-l transfera imprimantei ;
RDATE - registrul de date al memoriei tampon în care se citeşte caracterul
ce se va transfera imprimantei.
MT
RSMT
RDATE
MAG
Semnalele de legatură între unitatea centrală de prelucrare, interfaţă imprimantă şi
imprimantă
tipc - tipăreşte caracter - semnal ce comandă tipărirea caracterului al carui cod se află pe
liniile DATE. Este activ pe "0".
avansr -avans rând - semnal ce comandă avansul cu un rând al capului de scriere.
Acest semnal este asociat cu codul caracterului LF = 0AH; este activ
pe "0".
retcar -reântoarcerea - semnal ce comandă întoarcerea carului de tipărire la început de
carului de tipărire rând. Acest semnal corespunde identificării caracterului CR = 0DH .
Este activ pe "0".
opterm -operaţie terminată - semnal ce specifică terminarea unei operaţii de avans rând,
întoarcere cap tipărire, tipărire caracter. Este activ pe "0".
defal -defect alimentare - semnal asociat cu un defect de alimentare (siguranţă alimentare
generală defectă ; siguranţe cap scriere). Este activ pe "1".
cdes -capac deschis - semnal ce indică poziţia capacului de la imprimantă. Datorită
incidentelor ce pot apărea dacă capacul este deschis, în general o
imprimantă nu poate lucra cu capacul deschis (în special cele cu
lanţ sau tambur). Este activ pe “1”.
0 7 8 15
DATE
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
operational actint
hl resint
rl
edis
defal
cdes
hl
rl operational
defal D Q
cdes
TACT CLK
0FAH - port de ieşire pentru transfer date între unitatea centrală de prelucrare şi
imprimantă,
0FBH - port de ieşire pentru transfer comenzi între unitatea centrală de prelucrare şi
imprimantă,
0FBH - port de intrare pentru citirea registrului de stare al imprimantei,
se poate utiliza următoarea rutină de tipărire a unui caracter la imprimantă (caracterul
se presupune în registrul RB):
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
_______ _______
cmdma smdma
________
atmdma
___
atie
Semnalele ce se transmit pe liniile de date sunt sub forma unor nivele de tensiune în
logică negativă.
Astfel:
"1" logic este considerat între –6V şi –12V
"0" logic este considerat între +6V şi +12V.
Avantajele unei astfel de alegeri a tensiunilor faţă de logică TTL sunt:
• tensiunea de referinţă este 0V;
• un defect de alimentare diferit de oricare din cele două nivele de tensiune pentru
"0" şi "1“;
asigură imunitatea la zgomot .
Semnale
GND(101,102) 1,7 1,7 GND(101,102) transmisie/receptie
TxD(103) 2 3 RxD(104) date
RxD(104) 3 2 TxD(103)
DSR(107) 6 20 DTR(108)
DTR(108) 20 6 DSR(107)
DISP 1 DISP 2
START BIT1 BIT2 BIT3 BIT4 BIT5 BIT6 BIT7 BIT8 BITP STOP STOP
5 biti
6 biti
7 biti
8 biti
+12V
MC1488 MC1489
TxD(TTL) RxD(TTL)
linie de tansmisie
7404 7404
-12V
START BIT1
preluare bit 1
Proiectarea unei interfeţe seriale pentru calculatorul didactic
RxD TxD
Unitate
RRS RTRS
Comanda
SIN
RDT
RDR
CSSIN
AIE
MAG16
RRS - registrul de recepţie serială. Are dimensiunea de 9 biţi şi este utilizat pentru
recepţionarea serială a biţilor de date bit1-bit8 şi a bitului start .
RDR - registrul de date recepţionate. Păstrează ultimul cuvânt recepţionat până la
formarea unui nou cuvânt în registrul RRS.
RTRS - registrul de transmisie serială. Are dimensiunea 10 biţi şi este utilizat pentru
transmiterea serială a biţilor de start, date şi paritate.
RDT - registrul de date pentru transmisie. Primeşte informaţia paralel de la unitatea
centrală de prelucrare şi o transferă în registrul RTRS pentru transmisie. Este utilizat
pentru a mări disponibilitatea unităţii centrale de prelucrare .
CSSIN - registrul de comenzi/stări al interfeţei seriale SIN.
DSR 6 20 DTR
RTS 4 5 CTS
CTS 5 4 RTS
Interfata
seriala
standard
SIN
Programul AHPL de descriere a interfeţei seriale:
MODULE: UCSIN
MEMORY:
RDR[8];RRS[9];RDT[8];RTRS[10];NRM16[4];NTM
16[4];
NRBIT[4];CSSIN[16]
INPUTS: AIE[8]; sie ;cie; RxD; DSR; CTS; TxC; RxC
OUTPUTS: cerint; TxD; DTR; RTS
COMBUS: MAG[16]
1. → (2,5,17)
/* se activează cele trei secvenţe paralele ale
UCSIN*/
/* la pas 2 se tratează activitatea cu unitatea
centrală de prelucrare */
/* la pas 5 se tratează secţiunea de recepţie */
/* la pas 17 se tratează activitatea de transmisie */
8. SISTEMUL DE MANIPULARE A
ÎNTRERUPERILOR
Cererile de întreruperi pot fi, după sursa de generare a acestora, de două tipuri:
• interne, cauzate de evenimente la nivelul unităţii centrale de prelucrare precum ar fi:
• întreruperi programate (iniţiate în program);
• executarea unor instrucţiuni privilegiate de un program care nu are acest
drept;
• depăşire în unitatea aritmetică şi logică;
• eroare de paritate la memorie;
• adresarea unui subansamblu inexistent;
• încercarea de a executa operaţii nepermise: împărţire prin zero, etc.
• externe, primite din mediu extern prin intermediul interfeţelor de intrare/ieşire.
După modul în care se face activarea secvenţei (a rutinei) de tratare a unei întreruperi
se disting următoarele tipuri de sisteme de întreruperi:
• nevectorizat;
• vectorizat.
Sistemele de întreruperi nevectorizate: toate cererile de întrerupere forţează
transferarea controlului la o locaţie fixă denumită celulă capcană, unde se află punctul
de intrare (sau legătura cu rutina de tratare) în programul de tratare a tuturor
întreruperilor. Sursa de întrerupere şi activarea rutinei specifice se determină prin citirea
unui registru de stare, denumit registrul cererilor de întrerupere (sau a mai multor
registre).
Sistemele de întreruperi vectorizate: legătura dintre cereri şi rutinele de tratare se
realizează prin intermediul unui vector de adrese (denumite şi celule capcană) cu o
componentă directă pentru fiecare nivel. Fiecare componentă conţine adresa, sau
informaţii privind calculul adresei rutinei de tratare astfel că printr-un salt indirect prin
această locaţie se iniţiază execuţia rutinei de tratare.
8.2. Proiectarea unui sistem de întreruperi pentru
calculatorul didactic
Proiectarea unui sistem de întreruperi (SI) pentru calculatorul didactic implică
rezolvarea următoarelor aspecte:
• specificarea sistemului de întreruperi;
• modificarea arhitecturii calculatorului didactic, prin includerea funcţiilor necesare
gestiunii întreruperilor;
• proiectarea detaliată a sistemului de întreruperi;
0 Neutilizată
intr. da
interna
nu
inm da
nu SI activat
da
intr I
ai 1 Salveaza IND
1
nu
0
Dezactiv
intreruperile
Salveaza CP
salt la rutina
tratare
ai 0
EI
cintr,cinm ADD (ca urmare a executiei instructiunii ADD se pozitioneaza indicatorul de depasire D)
Initiaza tratare
intrerupere id
Recunoastere intrerupere inm.
Rutina tratare
inm
Reface CP
IRET
Reface IND
Reface CP
Recunoastere intr. I=1 IRET
Reface IND
Salveaza IND
I0
Salveaza CP
I=0
Rutina tratare
intr
Reface CP
IRET
Reface IND
instructiuni PP
Proiectarea detaliată a sistemului de întreruperi pentru calculatorul
didactic.
Schimbul de informaţie între unitatea centrală de prelucrare, sistemul de
întreruperi şi interfeţele de I/E (semnificaţia semnalelor, exceptând actadri, a fost
prezentată anterior):
__ __ AIE
sie cie
__
cie _____ ai
cerint0 ____
__ cintr
UCSI
sie _____
cerint1
Unitatea ___ ____
centrală de cintr cintr
prelucrare a
calculatorului MAG16 ____
cintr0
didactic Sistemul de ip
întreruperi _____ Logica
AIE8 cerint7 de id
RCI prioritati RICS ADRI
inm
____ PRI
cintr7
ai
ip
id
actadri
MAG
cinm cinm
da
PRIA0 = 1
A0
nu
da
PRIA1 = 1
A1
nu
da
PRIA2 = 1
A2
nu
da
PRIA6 = 1
A6
nu
da
PRIA7 = 1
A7
nu
Această unitate logică combinaţională va avea ca intrări, RCI RMI.
Secţiunea de generare a unei cereri de întrerupere cintr (CINTR) va analiza conţinutul
registrului RICS şi ieşirile PRIA.
Dacă cererea din RCI cu prioritatea cea mai mare, indicată de PRIA, poate
întrerupe cererile în curs de servire (are o prioritate mai mare decât acestea), se va
genera o cerere de întrerupere pe linia cintr.
Programul AHPL de descriere a secţiunii CINTR este descris pe baza
organigramei:
0 1
RICS0
1 ___ 0
PRIA0(RCI RMI)
0 1
RICS1
1 ___ 0
PRIA1(RCI RMI)
0 1
RICS6
1 ___ 0
PRIA6(RCI RMI)
0 1
RICS7
1 ___ 0
PRIA7(RCI RMI)
____
cintr
Descrierea unităţii logice combinaţinale ADRI
După primirea unei cereri de întrerupere interne, externe nemascabilă sau
externe mascabile, unitatea centrală de prelucrare va asigura legătura cu rutina de
tratare a întreruperii pe baza adresei furnizate de sistemul de întreruperi prin intermediul
unităţii logice combinaţionale ADRI.
Organigrama unităţii logice combinaţionale ADRI este prezentată în fig:
da
ADRI = 0001 ip
nu
da
ADRI =0010 id
nu
da
ADRI = 0011 inm
nu
da
ADRI = 0100 RICS0
nu
da
ADRI = 0101 RICS1
nu
da
ADRI = 0110 RICS2
nu
da
ADRI = 0111 RICS3
nu
da
ADRI = 1000 RICS4
nu
da
ADRI = 1001 RICS5
nu
da
ADRI = 1010 RICS6
nu
da
ADRI = 1011 RICS7
nu
Descrierea unităţii de comandă a sistemului de întreruperi UCSI
UCSI trebuie să realizeze funcţiile de dialog cu unitatea centrală de prelucrare şi
controlul transferurilor între registrele sistemului de întreruperi. Se vor asocia sistemului
de întreruperi următoarele porturi de intrare ieşire:
0FCH - port de intrare/ieşire pentru citirea, respectiv înscrierea registrului de maşti RMI;
0FDH - port de intrare/ieşire pentru citirea registrului de cereri în curs de servire RICS,
şi ştergerea ultimului bit trecut în 1 din RICS.
Organigrama generală de funcţionare a UC a SI este prezentată în figura:
\