0% au considerat acest document util (0 voturi)
38 vizualizări191 pagini

AC

Documentul prezintă structura și arhitectura sistemelor numerice, inclusiv componentele principale ale unui calculator numeric și modelul său funcțional și structural. Sunt descrise unitățile funcționale ale unui calculator numeric, precum și operațiile aritmetice și de intrare/ieșire.

Încărcat de

Cociorba Andrei
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
38 vizualizări191 pagini

AC

Documentul prezintă structura și arhitectura sistemelor numerice, inclusiv componentele principale ale unui calculator numeric și modelul său funcțional și structural. Sunt descrise unitățile funcționale ale unui calculator numeric, precum și operațiile aritmetice și de intrare/ieșire.

Încărcat de

Cociorba Andrei
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Arhitectura Calculatoarelor

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]

1.1 Calculator Numeric - Sistem de prelucrare a informaţiilor

Aplicaţii specifice calculatoarelor:


- Calcule ştiintifice: experimentele stiinţifice şi de laborator -> culegerea,
validarea şi prelucrarea datelor preluate de la diferiţi senzori sau aparate
(domenii tipice: telemetrie, radiolocaţie, spectrografie, etc.)
- Proiectare asistată: proiectarea măştilor pentru VLSI, proiectarea circuitelor
imprimate, proiectarea fuzelajelor şi aripilor de avion, a caroseriilor de automobil,
etc.
- Conducerea proceselor: comanda maşinilor unelte, controlul proceselor de
difuzie şi încapsulare într-o fabrică de circuite integrate, conducerea roboţilor din
celulele flexibile de fabricaţie, etc.
- Simulare: un nou nivel de cercetare, prin simulare -> util pentru situaţiile în care
experimentele pot să fie prea costisitoare în condiţii reale, periculoase sau chiar
imposibil de realizat (Ex: studiul efectului erupţiei unui vulcan)
- Instruire asistată: creşterea eficienţei procesului de
predare - învăţare - verificare, pentru stimularea gândirii creative, logice.

1.2 Modelul structural al unui calculator numeric

Modelul general al unui calculator numeric:

I CN E
Modelul structural al unui calculator numeric

Subsistem Subsistem Subsistem


I de intrare de de iesire E
prelucrare

fluxul datelor
fluxul informatiilor de control care asigurã interactiunea
corectã a celor trei subsisteme

Structura unui calculator numeric:


Calculator
Unitatea numeric
Memorie centrală

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

Schema bloc a unui sistem de calcul:


Calculator numeric
Unitatea centrala
Memorie

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

I Subsistem Unitate Subsistem E


intrare centrala de iesire
prelucrare

Calculator numeric cu transfer prin acces direct la memorie:

Unitatea Subsistem
Memorie centrala de de I/E
prelucrare I/E

Modul comanda acces


direct la memorie

Calculator numeric cu transfer prin canal de 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

NIVELUL 1. - Dispozitivele şi circuitele electronice reflectă atât gradul de integrare


tehnologică cât şi clasa de performanţe în care se încadrează calculatorul.
NIVELUL 2. - Unităţile funcţionale reflectă într-o bună măsură modularitatea sistemului,
poziţionarea şi implementarea funcţiilor primitive în unităţi funcţionale avînd în vedere
criterii funcţionale, constructive, şi aspecte privind testabilitatea. La acest nivel încă nu
este posibilă programarea calculatorului.
NIVELUL 3. - Maşina fizică reprezintă, împreună cu echipamentele de I/E, partea de
hardware propriu-zisă a calculatorului. Acest nivel reflectă structura şi organizarea
internă a calculatorului, modul de interconectare şi interacţiunile dintre unităţile
funcţionale, fluxul datelor de I/E.
NIVELUL 4. - Nucleul sistemului de operare este format dintr-o colecţie de programe
orientate pe maşina fizică şi care oferă programatorului de sistem o maşină de bază
mai evoluată, uniformă şi stabilă în timp, primind modelul de acces la funcţiile primitive.
Acest nivel asigură în principal funcţiile de I/E de bază (BIOS la PC) şi funcţii de acces
direct la resursele fizice pentru testarea şi punerea la punct a programelor.
NIVELUL 5. - Executivul sistemului de operare reprezintă o colecţie de programe de
bază care asigură pe de o parte o maşină cât mai eficientă şi comodă de utilizat pentru
programator şi o utilizare cât mai eficientă a resurselor hardware şi software, pe de altă
parte. Principalele funcţii ale unui sistem de operare sunt:
-controlul încărcării şi execuţiei programelor;
-operaţii de I/E mai evoluate, bazate pe funcţiile oferite de maşina de bază;
-gestiunea fişierelor;
-gestiunea memoriei;
-facilităţi de dezvoltare a programelor.
NIVELUL 6. Limbaje de programare. La acest nivel am situat limbajele de programare
indiferent că sunt de nivel ridicat sau scăzut, deoarece prin intermediul acestora
programatorul are la dispoziţie un mod esenţial de comunicare cu calculatorul.
Propoziţiile dintr-un limbaj pot fi uşor traduse în propoziţii dintr-un alt limbaj.
Operaţia de conversie a unui program dintr-un limbaj în altul se numeşte translatare.
NIVELUL 7 - nivelul aplicaţiilor reprezintă nivelul cel mai important pentru utilizator.
Bibliotecile de programe de la acest nivel reflectă modul în care poate să utilizeze direct
calculatorul în diferite aplicaţii şi uşurinţa cu care pot fi create noi programe de aplicaţii
în domenii conexe sau total noi.
NIVELUL 8 - nivelul supervizorului: interpretorul limbajului de comandă reprezintă
interfaţa şi modul de interacţiune dintre utilizatori şi sistemul de calcul.
1.4 Unităţile funcţionale ale unui Calculator Numeric

• Memoria

Structura bloc a unui subsistem de memorie

n n
Matrice de
Adrese AM D
memorie
E
C

date

__
SM Unitate DM
de
__ control date
S/C

tCC (ciclu de citire) tCS (ciclu de scriere)

adrese adrese
___ ___
SM SM

date _
S/C
date
tAC

date disponibile

a. diagrama de timp pentru citire b. diagrama de timp pentru scriere


Circuite de memorie
SRAM:
DRAM
Tipuri de DRAM: - FPM DRAM (Fast Page Mode DRAM)
- EDO DRAM (Extended Data Output DRAM)
- SDRAM (Synchronous DRAM)
- DDR SDRAM (Double Data Rate SDRAM)
Placute: - SIMM (Single Inline Memory Module)
- DIMM (Dual Inline Memory Module)

Memorii ROM

Tipuri de ROM: ROM


PROM (Programmable ROM)
EPROM (Erasable PROM)
EAPROM (Electricaly Alterable PROM)
EEPROM (Electricaly Eraseble PROM)
memoria FLASH
operand 1 operand 2

• 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

se aduce cuvîntul aflat în memorie la adresa


conţinută în CP se actualizează CP

recunoastere tip instrucţiune

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.

• Subsistemul de intrare ieşire

Rolul subsistemului de intrare / ieşire este de a conecta echipamentele periferice la


calculator. Prin intermediul acestor echipamente periferice se realizează de fapt
schimbul de informaţii cu lumea externă care poate să fie reprezentată de operatori
umani, alte procesoare, memorii externe, etc.
Se observă că aceste echipamente sunt caracterizate de forme foarte diferite de
reprezentare a informaţiei şi de viteze diferite de transfer a informaţiei. De asemenea,
unele echipamente periferice pot să transfere la un moment dat blocuri mari de date, în
timp ce altele pot să transfere la un moment dat un singur caracter.
2. DESCRIEREA STRUCTURII SISTEMELOR
NUMERICE

2.1 Modalităţi de descriere a structurii sistemelor numerice de


prelucrare a datelor

Nivelurile de descriere a structurilor numerice privite sub formă ierarhică sunt:


• Nivelul elementelor de circuit;
• Nivelul proiectării logice:
➢ subnivelul circuitelor de comutaţie (ASM);
➢ subnivelul transferurilor între registre (AHPL);
• Nivelul interconectării resurselor (PMS);
• Nivelul programelor:
➢ subnivelul setului de instrucţiuni (ISP);
➢ subnivelul limbajelor;
➢ subsistemul sistemelor de operare;
➢ subsistemul aplicaţiilor.

Nivelul elementelor de circuit


- corespunde nivelului inferior de descriere. La acest nivel se operează cu:
• componente: rezistenţe, condensatori, tranzistori, etc.
• structura: scheme realizate cu aceste componente care au fost reprezentate grafic
sau descrise analitic prin ecuaţii pe bucle şi noduri.
- acest nivel nu este specific sistemelor de calcul, fiind utilizat în special în studiul
circuitelor electrice.

Nivelul proiectării logice


- corespunde descrierii la nivelul circuitelor logice. În cadrul acestui nivel distingem :
a) subnivelul circuitelor de comutaţie:
o care se referă la circuitele combinaţionale şi la cele secvenţiale:
o componente: circuite logice elementare : ŞI, SAU, NU, DCD,
MULTIPLEXOARE, BISTABILI, REGISTRE, etc.
o structura: scheme logice sau sisteme de ecuaţii logice, diagrame Karnaugh
sau ASM (limbaj de descriere a maşinilor algoritmice de stare).
b) subnivelul transferurilor între registre:

o care descrie comportarea sistemului la nivelul unităţii de execuţie şi a


unităţii de comandă.
o În cadrul descrierii unităţii de execuţie se operează cu:
➢ componente: unităţi logice combinaţionale, registre, memorii;
➢ structura: interconectarea componentelor prin instrucţiuni de conexiune
specifice.
o În cadrul descrierii unităţii de comandă se operează cu:
➢ componente: algoritmi de comandă, microsecvenţiator;
➢ structura: descrierea paşilor de comandă prin instrucţiuni de transfer
specifice, microinstrucţiuni şi microprogram.

Nivelul interconectarii resurselor


- corespunde descrierii sistemelor de calcul la nivelul subansamblelor. Se operează cu:
• componente : P (Processor), M (Memory), S (Switch), L (Link), K (Control), D
(Data-operation), T (Transducer).
• structura : calculatoare numerice, sisteme multiprocesor, reţele de calculatoare.
- acest nivel scoate în evidenţă interconectarea componentelor şi atributele intrinseci ale
acestora.

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

K. Iverson a propus limbajul APL (A Programming Language) care îndeplineşte în


mare măsură cerinţele descrierii arhitecturii sistemelor numerice şi într-o oarecare
măsură, şi cerinţele de descriere a unităţii de execuţie.
Pornind de la un subset APL şi completîndu-l cu o serie de facilităţi specifice
reprezentării operaţiilor la nivelul unităţii de comandă a unui subansamblu numeric, s-a
dezvoltat un limbaj de descriere denumit AHPL (A Hardware Programming Language).
Operaţiile reprezentate de AHPL au un echivalent direct în implementarea fizică.

2.3 Descrierea sistemelor numerice în AHPL

În AHPL un sistem numeric este descris cu ajutorul procedurilor şi funcţiilor.


Procedurile descriu module ce conţin elemente de memorie şi secvenţe de
control.
Funcţiile descriu unităţi ce conţin elemente combinaţionale.
Structura unei proceduri este următoarea:
MODULE: < nume modul >
< declaraţii >
< secvenţa de control >
END SEQUENCE
< conexiuni >
< transferuri >
END

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ă:

RA = ( RA0, RA1,...,RA ρ RA-1 ),


unde prin RAi se specifică bitul din poziţia i a registrului RA.
Matricea este un ansamblu de operanzi structuraţi într-un tablou bidimensional.
Matricea are deci două dimensiuni şi în mod corespunzător există doi operanzi
dimensiune ρ1 şi ρ2.
ρ1M =numărul de linii;
ρ2M =numărul de coloane.
Astfel o matrice M de dimensiunea (ρ1M, ρ2M) se prezintă:

 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

Prin operatori se specifică prelucrările ce se aplică asupra operanzilor. În funcţie


de numărul operanzilor, operatorii pot fi unari sau binari iar în funcţie de tipul
operanzilor, operatorii pot fi primitivi, dacă se aplică asupra unor variabile scalare sau
operatori micşti, dacă se aplică asupra unor combinaţii de variabile de tip scalar,
vectorial sau matriceal.
Operatori AHPL
✓ operatori logici:  ,  , ¯ sau ·, + , ¯ care realizează funcţiile logice ŞI, SAU,
NU între operanzii specificaţi.
Exemple: Fie: A = ( A0, A1, ... , An )
B = ( B0, B1, ... , Bn )
doi vectori şi a , b doi scalari
a  b;
A + B = ( A0+B0, A1+B1, ..., An+Bn )

✓ operatori de reducere: / ; /; +/ realizează funcţia specificată între


componentele vectorului asupra căruia acţionează. Rezultatul este un scalar.
Exemple:
/A = A0  A1 A2  ...  An
✓ operatori de sincronizare:
SYN <nume_semnal_asincron>
SL <nume_semnal>
Operatorul SYN sincronizează semnalul specificat ca parametru
(nume_semnal_asincron), cu semnalul de ceas al sistemului.
Operatorul SL generează un semnal de o durată egală cu perioada semnalului
de ceas indiferent de durata semnalului specificat ca parametru (nume_semnal).
Exemplu:

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

✓ operator de selecţie prin comprimare:


X/Y elimină componentele din Y corespunzătoare componentelor egale cu 0 din X
Exemplu:
Fie A = (0, 1, 1, 0, 1, 0, 0, 1 )
B = (B0, B1, B2, B3, B4, B5, B6, B7 )
A / B = (B1, B2, B4, B7 )

✓ operator de selecţie prin comprimare şi reducere:


M*F realizează eliminarea liniilor din matricea M corespunzătoare
componentelor egale cu 0 din vectorul F
Exemplu:
Fie
 0
M 1 
M = M 
 2
M 
şi
F = [0,0,1]
rezultă:
M*F selectează linia 2, adică M2

✓ 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

a) de conexiune = realizează conectarea resurselor specificate


b) de transfer  realizează transferul informaţiei de la sursă la
destinaţie. Resursa destinaţie trebuie să fie element cu posibilitate de
memorare.
Exemplu:
a = b conectează semnalul b la semnalul a
Z = A conectează registrul A la ieşirile Z ale unui modul
BA conţinutul registrului A se transferă în registrul B
✓ operator de dimensionare
ρ, aplicat unui vector, generează numărul de componente ale acestuia
(lungimea vectorului). Fie A= ( A0, A1, ..., An ) atunci ρA generează valoarea n+1.

✓ 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

Secvenţa de control a unei unităţi de comandă se specifică cu ajutorul paşilor


AHPL.
Un pas AHPL specifică toate acţiunile ce au loc în perioada de timp în care
secvenţa de control se găseşte în starea respectivă. Durata unui pas AHPL este egală
cu perioada semnalului de ceas (de tact).
Un pas AHPL poate deci specifica mai multe instrucţiuni care au loc în acelaşi
moment de timp. Instrucţiunile AHPL sunt separate prin caracterul (;).
Un pas AHPL poate fi prezentat în mai multe linii sursă ce specifică instrucţiuni
sau comentarii. Fiecare pas AHPL specifică atât acţiunile ce au loc în pasul respectiv
cât şi adresa următoarei instrucţiuni din secvenţa de control.
Pasul AHPL următor poate fi specificat în mod explicit prin instrucţiune de salt
sau în mod implicit ca fiind următorul în textul programului.
Fiecare instrucţiune poate conţine comentarii formate din şiruri de caractere
încadrate de delimitatori: /* comentariu */.
Instrucţiunile AHPL pot fi împărţite în două mari categorii:
- instrucţiuni de atribuire;
- instrucţiuni de salt.
Sfârşitul secvenţei de paşi AHPL este marcat cu declaraţia END SEQUENCE.,
iar sfârşitul unui program AHPL este marcat cu declaraţia END.

Instrucţiuni de atribuire

Formatul unei instrucţiuni de atribuire este:


<destinaţie> <operator_de_atribuire> <expresie>
Valoarea obţinută prin evaluarea expresiei este atribuită variabilei destinaţie.
Dacă vectorii destinaţie şi sursă nu au aceeasi dimensiune, se face alinierea dreapta.
Expresiile pot fi formate utilizând:
• operatori logici: ( ; ; - );
• operatori de sincronizare: (SL ; SYN (semnal_asincron));
• operatori de selecţie: (Aj; Am:n ; Mj ; Mm:n );
• operator de selecţie prin comprimare: ( X / Y );
• operator de selecţie prin comprimare şi reducere: (M * F);
• operatori de concatenare: (A,B ; A!B);
• operator de codificare: ( n T p);
• operatori de decodificare: (⊥X ; DCD );
• operatori relaţionali.
Pentru scrierea expresiilor trebuie să se ţină seama de următoarele:
• indicii superiori şi inferiori trebuie specificaţi prin valori constante (nu se admit
expresii de indici);
• expresiile (sau subexpresiile) din paranteze se evaluează cu prioritate;
• pentru a evita proliferarea parantezelor se vor avea în vedere priorităţile
operatorilor astfel:
1) Negaţie şi SYN (prioritatea cea mai mare);
2) Operatori de selectie;
3) ŞI logic;
4) SAU şi SAU EXCLUSIV;
5) Concatenare
Ca operanzi pentru scrierea expresiilor se pot utiliza:
- intrări provenite din alte module;
- funcţii logice combinaţionale;
- elemente de memorie (vectori, matrice);
- magistrale de date sau comenzi;
- constante binare.
Instrucţiunile de atribuire sunt împărţite în două categorii în funcţie de operatorul
care se foloseşte:
- instrucţiuni de conexiune (operatorul de conexiune = );
- instrucţiuni de transfer (operatorul de transfer ).
Prin operaţiile de conexiune valoarea expresiei se atribuie variabilei doar pe
durata pasului AHPL în care este specificată conexiunea respectivă. Deci acţiunea are
un caracter temporar.
Prin operaţiile de transfer, valoarea expresiei se atribuie variabilei din partea
stânga, când secvenţa de control a ajuns în pasul AHPL respectiv, şi este memorată în
variabila destinaţie care păstrează aceasta valoare până la o nouă atribuire. Acţiunea
are un caracter permanent specific funcţionării circuitelor secvenţiale.
Instrucţiuni de conexiune

Dacă se notează cu:


MAG - o magistrală predeclarată
Z - un vector de ieşire;
VLCO - un vector de funcţii logice combinaţionale;
MLCO - o matrice de vectori logici combinaţionali VLCO;
F - un vector de constante binare sau funcţii logice
instrucţiunile de conexiune pot fi specificate prin una din următoarele forme:
Z = VLCO
MAG = VLCO
Z = MLCO*F
MAG = MLCO*F
În primele două instrucţiuni are loc o conexiune necondiţionată a ieşirilor VLCO
la intrările Z sau MAG.
Fiecare componentă a vectorului VLCO poate fi o funcţie logică combinaţională a
cărei ieşire va fi conectată la intrarea corespunzătoare a vectorului destinaţie.
Ultimele două instrucţiuni specifică o conexiune condiţionată în sensul că, prin F
se specifică linia din matricea de vectori de funcţii logice MLCO, care se va conecta la Z
sau MAG. Operaţia MLCO*F este echivalentă cu operaţiile de comprimare şi reducere.
Astfel dacă:
F=(f,g,h) iar MLCO = (A!B!C),
operaţia MLCO*F este echivalentă cu

(A  f)  (B  g)  (C  h)
ceea ce poate fi scris şi sub forma:

(A0f,A1f,..,Anf)  (B0g,B1g,..,Bng)  (C0h,C1h,..,Cnh)


În general astfel de expresii se utilizează pentru specificarea operaţiilor de
multiplexare (când +/F=1), dar se poate ca şi (+/F > 1) să fie utilă în diferite situaţii.
Pentru exemplificare se considera pasul AHPL următor:
[Link]=(A!B) * (f1 ,f2 ) unde A=(A0 ,A1 ) şi B= (B0, B1)
Implementarea fizică:

A0 A1 B0 B1

f1

Pas 10.
D
Q
Clock f2
_
> CLK Q
_____ CL
Reset
Bus

Tema: sa se modifice schema pentru evitarea situatiei cand ambele semnale f1 si f2


sunt 1.

Instrucţiuni de transfer

Variabila destinaţie este un bistabil sau un vector ce are ca echivalent un registru


sau un cuvânt de memorie. Înscrierea valorii expresiei în operandul destinaţie se face
sincronizat cu un semnal de tact. Acest semnal de tact poate fi specificat explicit printr-o
conexiune sau implicit ca fiind tactul unităţii de comandă.
Forma generală a unei instrucţiuni de transfer este:
VD VLCO
VD  MLCO*F
MD*FVLCO

unde: VD este un vector destinaţie iar


MD este o matrice destinaţie
Prima instrucţiune specifică un transfer necondiţionat.
Cea de a doua formă poate fi descompusă în următoarele operaţii elementare:
conexiune la intrările vectorului destinaţie a vectorului rezultat prin evaluarea expresiei
şi apoi înscrierea acestuia în VD.
Cea de a treia formă este echivalentă cu: valoarea lui VLCO se transferă în toate
liniile matricei rezultate prin comprimarea şi reducerea cu vectorul de selecţie F.
Exemplu: 10. A*fB se va implementa astfel:
a) transferul este condiţionat pe intrări:

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

b) transferul este condiţionat pe tact

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

Se observă că în ambele implementări tactul propriu-zis este dat de


trecerea în 1 a bistabilului 10 care marchează execuţia programului la acest pas
(trecere care este sincronă cu semnalul de tact al modulului).
Uneori este necesar ca transferul (condiţionat sau necondiţionat) să se
execute sincronizat cu unul din fronturile semnalului de tact (clock) sau cu un tact
extern ceea ce permite transferuri asincrone în raport cu semnalul de ceas al
modulului.
Acesta se poate realiza prin specificarea, la pasul respectiv, a unei
conexiuni de tipul:

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

pentru a evidenţia că numai intrările de tact ale resursei specificate sunt


conectate la "semnal_de_tact".
Astfel considerînd că toţi bistabilii şi registrele comută pe front crescător
se consideră următoarele exemple:

15. AB /* transferul are loc pe frontul crescător al semnalului de tact al


modulului (CLOCK) */
16. CK[A] = TACT;
AB /* transferul are loc pe frontul crescător al unui tact extern (TACT) */
_______
17. CK[A] =CLOCK ; CK[C]=TACT
________
AB; /* transferul are loc pe frontul crescător al semnalului CLOCK */
CB; /* transferul are loc pe frontul crescător al semnalului TACT */
DB; /* transferul are loc pe frontul crescător al semnalului CLOCK */
______
18. CK = CLOCK;
AB;
CB;
DB; /* toate transferurile, la acest pas, sunt efectuate pe frontul
descrescător al lui CLOCK*/
În toate aceste cazuri intrarea de tact va fi condiţionată de valoarea expresiei din
instrucţiunea CK = expresie
Astfel instrucţiunea:
_____
18. CK = CLOCK;
AB
Se va implementa:

B0 PR
D Q A0
_
> ClLK Q
PR CL
D Q
Clock _
> ClLK Q
CL
B1 PR A1
_____ D Q
Reset _
> ClLK Q
CL

Transferuri şi conexiuni după END SEQUENCE

Transferurile şi conexiunile specificate în secvenţa de control sunt acţiuni care au loc la


pasul respectiv, când execuţia secvenţei de comandă ajunge în acel punct.
Există situaţii în care este necesară o conexiune cu caracter permanent, nu
numai pe o perioadă a semnalului de tact. De asemenea, în anumite situaţii este
necesar ca un transfer să se execute la fiecare perioadă de tact. Astfel de transferuri şi
conexiuni se specifică după declaraţia END SEQUENCE şi bineînţeles, înainte de END.
Exemplu:
Conexiunea Z = (A!B)*(f1 ,f2 )
unde A=(A0 ,A1 ) şi B=(B0 ,B1 ) specificată după END SEQUENCE se va implementa ca
în figura urmatoare. Se observă că nu apare condiţionarea cu vreun pas AHPL,
conexiunea are loc tot timpul indiferent de punctul în care se găseşte execuţia secvenţei
de control.
Conexiune după END SEQUENCE

A0

f1 Z0

A1
Z1
B0

f2

B1

Exemplu: .....
END SEQUENCE
AB
.....
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

Cu ajutorul instrucţiunilor de salt se pot implementa structuri de control de tip: ramificaţii


în program, cicluri, secvenţe paralele.
Formatul instrucţiunilor de salt este:
1. → (Si) Salt necondiţionat
2. → (F)/(S) Salt condiţionat, unde ρ F = ρ S
3. → (S) Salt multiplu (necondiţionat), ρ S > 1
unde:
Si este un număr reprezentând pasul AHPL cu care se va continua secvenţa de
control, şi trebuie specificat printr-o constantă.
F este un vector de funcţii logice reprezentând condiţiile de test.
S este un vector de constante reprezentând numerele de paşi AHPL la care se
poate continua secvenţa, funcţie de valoarea vectorului F.
Pentru saltul condiţionat se evaluează expresiile pentru F şi prin comprimarea lui
S cu F, se obţin numerele paşilor AHPL cu care se continua execuţia.
Există următoarele cazuri:
ρ((F)/(S)) = 0 Se continuă cu pasul următor.
ρ((F)/(S)) = 1 Se execută ca şi saltul necondiţionat.
ρ((F)/(S)) > 1 Se iniţiază secvenţe paralele începând cu paşii AHPL
selectaţi.
Saltul prezentat la cazul 3 reprezintă un salt multiplu necondiţionat, ce iniţiază
deci secvenţe paralele.
În secvenţele de comandă care nu au o structură ciclică sau în cazul secvenţelor
paralele se poate specifica terminarea execuţiei unei secvenţe prin instrucţiunea: DEAD
END, care va trece unitatea de comandă într-o stare terminală. În această stare nu se
mai execută nici o acţiune dintre cele specificate în secvenţa de comandă până la o
nouă iniţializare. DEAD END poate apare oriunde în secvenţa de comandă.
Pentru a facilita scrierea programelor în care au loc mai multe acţiuni în aceeaşi
perioadă de tact, limbajul AHPL permite specificarea execuţiei mai multor paşi AHPL în
aceeaşi perioadă de timp. Astfel dacă la un pas AHPL se specifică declaraţia: NO
DELAY, toate acţiunile din acest pas se desfăşoară în perioada de tact
corespunzătoare pasului precedent din care provine (ultimul care nu conţine declaraţia
NO DELAY).
Dacă fiecare pas AHPL dintr-o secvenţă de comandă conţine declaraţia NO
DELAY, iar în cazul secvenţei se specifică numai conexiuni se obţine o schemă logică
combinaţională. O astfel de secvenţă se poate scrie şi după END SEQUENCE.

2.4 Descrierea în AHPL a schemelor logice combinaţionale

Pentru a facilita scrierea secvenţelor de descriere a circuitelor logice


combinaţionale oferind şi o flexibilitate de utilizare a acestora în diferite module, limbajul
AHPL permite descrierea separată ca module de program distincte sub forma:

UNIT: nume_funcţie <lista de parametri>


<declaraţii>
<conexiuni>
END

Apelul unei unităţi logice combinaţionale se face prin:

nume_funcţie(lista_de_parametri_efectivi).

Sumatorul elementar complet

Sumatorul elementar complet realizează operaţia de adunare a unor operanzi de


lungime un bit, ţinând seama de transportul de intrare şi generează pe lângă sumă şi
eventualul transport.

x y tin

SUMEC

0
sum SUMEC 0

1
tout SUMEC 0
Tabela de adevăr şi ecuaţiile logice: Descriere in AHPL:

Schema sumator elementar complet

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

X0 Y0 X1 Y1 X14 Y14 X15 Y15 t16

SUMEC SUMEC SUMEC SUMEC

S0 S1 S15 SUMEC0

T0 T1 T2 T14 T15 SUMEC1

ADD0 ADD1 ADD2 ADD15 ADD16


Utilizarea sumatorului paralel

t AC DM

X Y

T1 t
6
ADD

Cu schema din figură se pot efectua următoarele operaţii:

Unitate logică combinaţională pentru decodificator

Un decodificator primeşte la intrare un vector binar oarecare de n biţi şi


generează la ieşire un vector de 2n biţi astfel că un singur bit are valoarea 1, ceilalţi
având valoarea 0.
Schema bloc a unui decodificator de la n la 2n :

0 dacă ⊥A  i
DCDi = 1dacă ⊥A = i
DCD(A)
A DCD
n 2n
Operaţiile de citire / scriere cu memoria în AHPL

Se consideră o memorie M [2n ,m] şi un vector de selecţie F cu ρF = 2n


componente astfel ca +/F=1 (o singură componentă este egală cu 1).
Presupunem că datele se citesc şi se scriu în memorie printr-un registru de date
DM[m]. Schema generală pentru acces la memorie:

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

Scrierea datelor din DM în M se va face cu instrucţiunea: M*F ← DM


În schema vectorul de selectie F a fost înlocuit cu o schemă logică
combinaţională care primeşte la intrare un vector de n biţi, registrul de adrese AM, şi
generează un vector decodificat de 2n biţi care are o singură componentă egală cu 1 în
orice moment. Această schemă logică este realizată de DCD (AM).

Instrucţiunea de scriere în memorie va fi deci: M*DCD(AM) DM


Pentru citire din memorie se va utiliza o funcţie specială denumită BUSFN, care
are ca parametri memoria şi adresa de la care se doreşte citirea.
Formatul instrucţiunii de citire din memorie este:

DMBUSFN ((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

Implementarea unităţii BUSFN: F2 NIV1


M2

NIVS2

M3
F3 NIV2

NIVS3

NIV3
BUSFN(M;F)
3. REPREZENTAREA ŞI PRELUCRAREA
INFORMAŢIEI ÎN CALCULATOARELE NUMERICE

3.1 Reprezentarea informaţiei în calculatoarele numerice


▪ reprezentarea informaţiei numerice (a datelor numerice);
▪ reprezentarea informaţiei alfanumerice.

Reprezentarea informaţiei numerice.


Pentru a reprezenta datele numerice se ţine seama de următoarele:
▪ codul de reprezentare;
▪ reprezentarea virgulei;
▪ reprezentarea semnului.
Din punctul de vedere al codului de reprezentare, în structurile numerice se
utilizează:
▪ reprezentarea în codul binar;
▪ reprezentarea în codul Gray;
▪ reprezentarea în codul BCD (zecimal codificat binar)

. 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

Codul de reprezentare Gray are proprietatea că două numere 3 0011 0010


adiacente diferă printr-un singur bit. Se consideră ca fiind un cod
reflectat (tabelul). 4 0100 0110

Fie 5 0101 0111

Nb = bnbn-1...b0 un număr reprezentat în binar şi 6 0110 0101


Ng = gngn-1...g0 acelaşi număr reprezentat în cod Gray. 7 0111 0100
unde bi şi gi  { 0,1 } 8 1000 1100
Se pune problema dacă cunoaştem o reprezentare cum putem
9 1001 1101
să o determinăm pe cealaltă.
Nb →Ng 10 1010 1111

sau Ng →Nb 11 1011 1110

Î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ă.

Zecimal Binar Cod 8-4-2-1 Cod 2-4-2-1 Cod exces 3

0 0000 0000=0 0000=0

1 0001 0001=1 0001=1

2 0010 0010=2 0010=2

3 0011 0011=3 0011=3 0011=0

4 0100 0100=4 0100=4 0100=1

5 0101 0101=5 0101=2

6 0110 0110=6 0110=3

7 0111 0111=7 0111=4

8 1000 1000=8 1000=5

9 1001 1001=9 1001=6

10 1010 1010=7

11 1011 1011=5 1011=8

12 1100 1100=6 1100=9

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)).

Reprezentarea în virgulă fixă

În virgulă fixă numerele se pot reprezenta în funcţie de poziţia virgulei în trei


moduri:
- numere întregi: poziţia virgulei fiind interpretată după cifra cea mai putin
semnificativă x0
x = xnxn-1 ... x1x0,
iar valoarea numărului
n

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.

Reprezentarea in cod direct

Codul direct permite reprezentarea explicita a numerelor prin semn si modul.

daca x  0
xd = 
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

Reprezentarea in cod invers (sau in complement fata de 1)

0 xn − 2 xn − 3 ...x1 x0 daca x  0
 0000 ...000

xi =  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 + xi = 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

Reprezentarea in cod complementar (in complement fata de 2)

unde, prin definitie,

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.

Reprezentarea informaţiei alfanumerice

Intr-un sistem de calcul o parte a informatiei prelucrate este nenumerica. Pentru


reprezentarea acesteia se utilizeaza diferite coduri, dintre care cel mai utilizat este codul
ASCII (”American Standard Code for Information Interchange”).
Codul ASCII standard utilizeaza 7 biti pentru reprezentarea literelor mari si mici
ale alfabetului latin, cifrelor zecimale, caracterelor speciale si a cateva caractere de
control (in total 128 de caractere). Caracterele sunt grupate astfel (codurile fiind
furnizate in hexazecimal):
0-1Fh : caractere de control, ca LF (0Ah), CR (0Dh), BEL (07h),...;
20h-2Fh : caractere speciale, ca spatiu, !, ”, #, $,...;
30h-39h : cifrele zecimale 0(30h), 1(31h),...,9(39h);
3Ah-40h : caractere speciale :, ;, <, =, ...;
41h-5Ah : literele mari ale alfabetului A(41h), B(42h), ..., Z(5Ah);
5Bh-60h : caractere speciale [, \, ...;
61h-7Ah : literele mici ale alfabetului a(61h), b(62h), ..., z(7Ah);
7Bh-7Fh : caractere de control si speciale, cum sunt DEL(7Fh), {(7Bh), }(7Dh),...
Pe langa acest cod se utilizeaza si codul ASCII extins, in care caracterele sunt
reprezentate pe 8 biti (deci se reprezinta in total 256 de caractere).
4. OPERAŢII ARITMETICE ÎN
CALCULATOARELE NUMERICE

4.1 Operaţii aritmetice în virgulă fixă


4.1.1 Adunarea şi scăderea în virgulă fixă

Adunarea şi scăderea în cod direct


In cazul operatiilor in cod direct se trateaza separat semnele si separat modulele
operanzilor. Se considera operatia x op y = z, unde se codifica cu op operatia de
realizat, 0 pentru adunare si 1 pentru scadere. Operatia finala de efectuat intre
modulele celor doi operanzi este data de relatia :

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

SLC 0/1 Suma / Scadere


SUMATOR/SCAZATOR
So

Unitate aritmetică pentru adunare/scadere în cod direct


Adunarea si scaderea in cod invers

Adunarea si scaderea in cod invers se reduc la operatia de adunare (in cazul


operatiei de scadere, se aduna la descazut opusul scazatorului).
Operanzii se prelucreaza impreuna cu semnele lor. Astfel, se aduna cei doi
operanzi bit cu bit, inclusiv bitii de semn, iar eventualul transport care rezulta de la
rangul de semn se aduna in rangul c.m.p.s (reprezinta o corectie) si se obtine rezultatul
corect in cod invers. Se disting urmatoarele cazuri:
1) x>0, y>0, x+y<2n-1 (pentru a nu avea depasire). Operatia de adunare este
asemanatoare cu cea din cod direct, dar in plus se aduna si bitii de semn (0+0).
[x]i+[y]i = |x|+|y| = (pentru ca operanzii au acelasi semn)
= |x+y| = [x+y]i
2) x>0, y<0, |x|>|y|. La adunare apare un transport de la rangul de semn, care se
aduna in rangul c.m.p.s. (corectie).
[x]i+[y]i = |x|+2n -1- |y| = (2n si -1 se reduc, corectie)
= |x|-|y| = (semne diferite si |x|>|y|)
= |x+y| = [x+y]i
Exemplu. Sa se efectueze operatia x + y = z, unde x = 25, y = -9, in cod invers.
[x]i = 011001
[y]d = 101001 => [y]i = 110110
[x]i+ 011001+
[y]i 110110
──── ──────
[z]i 1<-001111+
1
──────
010000
Deci, [z]i = 010000 (z = 16).
3) x>0, y<0, |x|<|y|. La adunare nu apare transport de la rangul de semn.
[x]i+[y]i = |x|+2n -1- |y| = 2n -1-(|y|-|x|) = (semne diferite si |x|<|y|)
= 2n -1-|y+x| = (x+y este negativ)
= [x+y]i
Exemplu. Se efectueaza operatia x + y = z, unde x = 5, y = -29, in cod invers.
[x]i = 000101
[y]d = 111101 => [y]i = 100010
[x]i+ 000101+
[y]i 100010
──── ──────
[z]i 100111
Deci, [z]i = 100111, [z]d = 111000 (z = -24).
4) x<0, y<0, |x+y|<2n-1. La adunare apare un transport de la rangul de semn, care
se aduna in rangul c.m.p.s. (corectie).
[x]i+[y]i = 2n -1- |x|+2n -1- |y| = (2n si -1 se reduc, corectie)
=2n -1- |x| - |y| = (x si y au acelasi semn)
= 2n -1- |x+y| = (x + y este negativ)
= [x+y]i
Exemplu. Se efectueaza operatia x + y = z, unde x = -11, y = -19, in cod invers.
[x]d = 101011 => [x]i = 110100
[y]d = 110011 => [y]i = 101100
[x]i+ 110100+
[y]i 101100
──── ──────
[z]i 1<-100000+
1
──────
100001
Deci, [z]i = 100001, [z]d = 111110 (z = -30).

OP1 OP2

0 1
MUX s SO

ADD
C out C in

Unitatea aritmetică logică pentru


adunare/scădere în cod invers
Adunarea si scaderea in cod complementar

Adunarea si scaderea in cod complementar se reduc la operatia de adunare (in


cazul operatiei de scadere, se aduna la descazut opusul scazatorului). Operanzii se
prelucreaza impreuna cu semnele lor. Se aduna cei doi operanzi bit cu bit, inclusiv bitii
de semn, iar eventualul transport care rezulta de la rangul de semn se neglijeaza
(reprezinta o corectie) si se obtine rezultatul corect in cod complementar. Se observa
urmatoarele cazuri:
1) x>0, y>0, x+y<2n-1 (pentru a nu avea depasire). Operatia de adunare este
asemanatoare cu cea din cod direct, dar in plus se aduna si bitii de semn (0+0).
[x]c+[y]c = |x|+|y| = (pentru ca operanzii au acelasi semn)
= |x+y| = [x+y]c
2) x>0, y<0, |x|>|y|. La adunare apare un transport de la rangul de semn, care se
neglijeaza (corectie).
[x]c+[y]c = |x|+2n - |y| = (2n se neglijeaza, corectie)
= |x|-|y| = (semne diferite si |x|>|y|)
= |x+y| = [x+y]c
Exemplu. Se efectueaza operatia x + y = z, unde x = 22, y = -18, in cod
complementar.
[x]c = 010110
[y]d = 110010 => [y]c = 101110
[x]c+ 010110+
[y]c 101110
──── ──────
[z]c 1<-000100
Deci, [z]c = 000100 (z = 4).
3) x>0, y<0, |x|<|y|. La adunare nu apare transport de la rangul de semn.
[x]c+[y]c = |x|+2n - |y| = 2n -(|y|-|x|) = (semne diferite si |x|<|y|)
= 2n -|y+x| = (x+y este negativ)
= [x+y]c
Exemplu. Se efectueaza operatia x + y = z, unde x = 20, y = -28, in cod
complementar.
[x]c = 010100
[y]d = 111100 => [y]c = 100100
[x]c+ 010100+
[y]c 100100
──── ──────
[z]c 111000
Deci, [z]c = 111000, [z]d = 101000 (z = -8).
4) x<0, y<0, |x+y|<2n-1. La adunare apare un transport de la rangul de semn, care se
neglijeaza (corectie).
[x]c+[y]c = 2n - |x|+2n - |y| = (2n se neglijeaza, corectie)
= 2n - |x| - |y| = (x si y au acelasi semn)
= 2n - |x+y| = (x + y este negativ)
= [x+y]c
Exemplu. Se efectueaza operatia x + y = z, unde x = -4, y = -13, in cod
complementar.
[x]d = 100100 => [x]c = 111100
[y]d = 101101 => [y]c = 110011
[x]c+ 111100+
[y]c 110011
──── ──────
[z]c 1<-101111
Deci, [z]c = 101111, [z]d = 110001 (z = -17).

OP1 OP2

0 1
MUX s SO

ADD

Unitate aritmetică pentru adunare/scădere


în cod complementar
Indicatorii de condiţii asociaţi unităţii de adunare scădere cu numere reprezentate
în complement faţă de doi:

• S semn, reprezintă valoarea bitului de semn al rezultatului.


• Z zero, este poziţionat în unu dacă rezulatul este zero, şi este poziţionat în zero
când rezultatul este diferit de zero:

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.

4.1.2 Înmulţirea în virgulă fixă


Pentru realizarea operaţiei de înmulţire cele mai utilizate metode se bazează pe
adunarea repetată. Există o serie de algoritmi care au la bază adunarea repetată dintre
care cei mai cunoscuţi sunt:

- î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:

1) Determinarea semnului rezultatului:


z s = xs  y s
2) Calcularea modulului rezultatului:
a) Numere intregi.
n−2 n−2
x  y = x   yk  2 = k
 x  yk  2 k
k =0 k =0

0 daca yk = 0
x  yk  2 k = 
x 2 daca yk = 1
k

Unde |x|2k ~ |x| deplasat spre stanga k pozitii.


b) Numere subunitare.
n −1 n −1
x  y = x   y− k  2 − k =  x  y− k  2 − k
k =1 k =1

0 daca yk = 0
x  y− k  2 − k =  −k
x 2 daca yk = 1

Unde |x|2-k ~ |x| deplasat spre dreapta k pozitii.

3) Trunchierea si rotunjirea rezultatului (numai pentru numere subunitare).


Exemplu: x • y = z in virgula fixa, x =20/32 si y = -19/32.

[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

doilea operand (OP2)


AC registrul ACUMULATOR ce
păstrează produsul parţial ADD

NB registrul ce contorizează numărul


de biţi
Rezultatul se obţine în : AC1:n,MQ NB Unitate de comanda

Unitate aritmetică pentru înmulţire în cod direct


Algoritmul de înmulţire în cod direct este următorul:
1. se citeşte deînmulţitul în registrul MD;
• se citeşte înmulţitorul în registrul MQ;
• se iniţializează registrul acumulator AC  0;
• se iniţializează registrul contor de biţi NB  0;
2. dacă MD=0 sau MQ=0
• atunci rezultat 0 , gata operaţie;
3. atât timp cât NB < n
• dacă MQn = 1 atunci AC  AC + MD;
• deplasează dreapta cu o poziţie AC, MQ;
• incrementează NB;
4. stabilire semn :ACs = MDs  MQs ;
Exemplu:
Să considerăm:
MD = -5/16 deînmulţitul reprezentat în cod direct pe 5 biţi
= 10101
MQ = -6/16 înmulţitorul reprezentat în cod direct pe 5 biţi

NB MD AC MQ Observaţii:

1 1 bitul de semn nu participă

000 0101 00000 0110 0 deplasare AC,MQ

001 0101 00000 0011 1 adunare AC ¬ AC + MD


00101 deplasare AC,MQ
00101

010 0101 00010 1001 1 adunare AC ¬ AC + MD


00101 deplasare AC,MQ
00111

011 0101 00011 1100 0 deplasare AC,MQ

100 0101 00001 1110 stabilire semn AC0=MD0Å MQ0

00001 1110 Rezultatul se obţine în AC,MQ


AC,MQ = 000011110= 30/256

Înmulţirea prin metoda BOOTH

Pentru a realiza operaţia de înmulţire a unor numere reprezentate în complement


faţă de 2, prin adunări repetate, este necesar să evaluăm înmulţitorul. Evaluarea
înmulţitorului reprezentat în complement faţă de 2 se realizează utilizând formula lui
Booth.
Dacă

y = ysy-1y-2...y-n este un număr în complement faţă de 2 valoarea reprezentată de


acest număr este:
n
Vy = - y s +  y −i * 2-i
i =1
formula lui Booth

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ă

După ultima operaţie, în care participă şi bitul de semn, nu se mai efectuează


operaţia de deplasare.
OP1 OP2

n+1
n+1

0 n 0 n 0 1 n n+1
MD AC MQ

ADD

0 m
NB Unitate de comanda

Unitate aritmetică pentru înmulţire prin metoda Booth

MD registrul ce păstrează primul operand (OP1)


MQ registrul ce păstrează al doilea operand (OP2)
AC registrul ACUMULATOR ce păstrează produsul parţial
NB registrul ce contorizează numărul de biţi
Rezultatul se obţine în : AC,MQ
Algoritmul de înmulţire prin metoda Booth este următorul:
1. se citeşte deînmulţitul în registrul MD;
• se citeşte înmulţitorul în registrul MQ;
• se iniţializează registrul acumulator AC ← 0;
• se iniţializează registrul contor de biţi NB ← 0;
• se iniţializează bitul MQn+1 ← 0 ;
2. dacă MD=0 sau MQ=0
• atunci rezultat 0 , gata operaţie;
3. atât timp cât NB < n + 1
• dacă MQn,MQn+1 = 01 atunci AC ← AC + MD;
• dacă MQn,MQn+1 = 10 atunci AC ← AC - MD;
• deplasează dreapta cu o poziţie AC,MQ;
• incrementează NB;
4. după ultima operaţie nu este necesară deplasarea
Exemplu:
Să considerăm operanzii :
MD = -5/16 reprezentat în cod complementar pe 5 biţi 11011
MQ = -6/16 reprezentat în cod complementar pe 5 biţi 11010

4.1.3 Împărţirea în virgulă fixă

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 !

Se trateaza separat semnele si separat modulele operanzilor.

Conditie: deimpartitul < impartitorul.

x : y => catul q si restul r.


(cei n-1 biti ai modulului fiecarui operand se noteaza cu indici negativi –1, –2, –3, ... –m
(m = n–1), pentru ai pune in corespondenta cu puterile negative ale bazei 2
reprezentand ponderile).
Algoritmul:
citeste x,y
daca |x| ≥ |y| atunci
│ scrie „Eroare!”
altfel
│ qs = xs ys
│ rs = xs
│ |r| =|x| //initializare rest partial
│ pentru i=1,m executa
│ │ |r| = |r|•2 //deplaseaza o pozitie stanga
│ │ daca |r| ≥ |y| atunci
│ │ │ q-i = 1 //bitul curent al catului
│ │ │ |r| = |r| - |y|
│ │ altfel
│ │ │ q-i = 0 //bitul curent al catului
└ └ └ |r| = |r|
|r| = |r|•2-m //rest final
scrie q, r
Corectie: restul x 2-m. Justificare (r(k) restul partial la pasul k):
|r(0)| = |x|
|r(1)| = 2•|r(0)| - q-1•|y|
|r(2)| = 2•|r(1)| - q-2•|y|
........
|r(m)| = 2•|r(m-1)| - q-m•|y|
unde

1 daca 2  r ( k −1)  y
q− k = 

0 altfel

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

Unitate aritmetică pentru împărţire prin metoda comparaţiei

MD registrul ce păstrează împărţitorul


MQ registrul ce păstrează câtul
AC registrul ACUMULATOR ce păstrează iniţial deîmpărţitul şi restul parţial curent
NB registrul ce contorizează numărul de biţi
Rezultatul se obţine în : MQ câtul, AC restul

Algoritmul de împărţire prin metoda comparaţiei 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;
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
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.

Metoda de împărţire cu refacerea restului partial


Această metodă poate fi considerată ca un caz special al metodei comparaţiei.
Compararea se poate face prin scădere.
Dacă diferenţa este pozitivă (echivalent cu faptul că restul parţial este mai mare
decât împărţitorul) se obţine drept cifră a câtului 1 şi procesul continuă cu o deplasare la
stânga cu o poziţie.
Dacă diferenţa este negativă (echivalent cu faptul că restul parţial este mai mic
decât împărţitorul) se obţine drept cifră a câtului 0. Deoarece în acest caz nu trebuia să
scădem împărţitorul din restul parţial, trebuie să procedăm la refacerea restului parţial
prin adunarea împărţitorului la acesta.
OP1 OP2

0 n 0 n 0 1 n
MD AC MQ

ADD

NB Unitate de comanda

Unitate aritmetică pentru împărţire prin metoda refacerii

MD registrul ce păstrează împărţitorul


MQ registrul ce păstrează câtul
AC registrul ACUMULATOR ce păstrează iniţial deîmpărţitul şi restul parţial curent
NB registrul ce contorizează numărul de biţi
Rezultatul se obţine în : MQ câtul, AC restul
Algoritmul de împărţire prin metoda refacerii 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;
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:

AC/MD = 01101 rest 00000010


Se observă că se respecta relaţia fundamentală a împărţirii:
|x| = |y| * |q| + r
0.0101 = 0.0110 * 0.1101 + 0.00000010
Metoda împărţirii prin refacerea restului parţial elimină comparatorul, în schimb
necesită un timp destul de lung datorită procesului de refacere a restului parţial.

Metoda de împărţire fără refacerea restului partial

Analizând metoda refacerii restului parţial se observă că fiecare operaţie de


refacere a restului parţial este urmată de o scădere a împărţitorului în ciclul următor.
Ultimele două operaţii adunarea împărţitorului ( operaţia de refacere) şi scăderea
(la ciclul următor) împărţitorului din restul parţial deplasat la stânga cu o poziţie, pot fi
combinate într-o singură operaţie de adunare a împărţitorului la ciclul următor (în loc de
scădere)
2*(ri + |y|) -|y| echivalent cu 2*ri + |y|
Metoda de împărţire în care restul parţial nu se reface constă în a scădea sau
aduna împărţitorul din restul parţial curent în funcţie de semnele împărţitorului şi restului
parţial.
Dacă aceste semne sunt identice se efectuează o scădere şi se introduce drept
cifră a câtului valoarea 1, iar dacă semnele sunt diferite se face o adunare şi se ia ca
cifră a câtului valoarea 0.

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

Reprezentarea numerelor in virgula mobila

- s bitul de semn al numarului (s=0 numar pozitiv si s=1 numar negativ);


- m mantisa numarului (cifrele semnificative);
- e exponentul (puterea la care trebuie ridicata o valoare numita baza si care inmulteste
cifrele semnificative ale numarului).
valoare = (-1)s • m • bazae , unde baza e 2, 10 sau 16).

Mantisa:
1/baza ≤ m < 1 (baza 2 => ½ ≤ m < 1 ~ primul bit, c.m.s. este 1).
Exponentul:
caracteristica = exponent + 2numar de biti exponent – 1

Exemplu. 7 biti pentru exponent =>128 valori distincte cu semn:


-64 ≤ exponent ≤ +63
caracteristica = exponent + 27-1
caracteristica = exponent + 64 => 0 ≤ caracteristica ≤ 127

Exemplu. Standardul IEEE 754 (IEEE – „Institute of Electrical and Electronics


Engineers”) pentru reprezentarea numerelor reale in virgula mobila pe lungime
(precizie) simpla (32 de biti):

daca 0 < e < 255 => valoarea = (-1)s • 1.m • 2e-127


daca e = 0 si m = 0 => valoarea = 0
daca e = 0, m ≠ 0 sau e = 255 => eroare

Reprezentarea pe lungime (precizie) dubla (64 de biti):

daca 0 < e < 2047 => valoarea = (-1)s • 1.m • 2e-1023


daca e = 0 si m = 0 => valoarea = 0
daca e = 0, m ≠ 0 sau e = 2047 => eroare
4.2.1 Adunarea şi scăderea în virgulă mobile

Operatia de scadere este inlocuita printr-o operatie de adunare: se aduna la descazut,


scazatorul cu semn schimbat. In continuare se va studia numai operatia de adunare in
virgula mobila. Se considera operatia:
A+B=C
unde A, B si C sunt numere reprezentate in virgula mobila.

Se parcurg urmatoarele etape:

1) Aducerea celor doi operanzi la acelasi exponent.


Se compara exponentii celor doi operanzi si eventual, se deplaseaza succesiv
dreapta mantisa numarului mai mic in modul cu un numar de pozitii egal cu
diferenta exponentilor. Daca diferenta exponentilor este mai mare decat numarul
de biti utilizati pentru reprezentarea mantisei, atunci rezultatul adunarii este egal
cu numarul mai mare in modul (caci prin deplasari se obtin numai biti zero pentru
mantisa numarului mai mic in modul).
2) Adunarea mantiselor.
Se aduna mantisele celor doi operanzi, conform regulilor de adunare in virgula
fixa.
3) Ajustarea rezultatului.
a) Daca la pasul precedent s-a realizat adunarea efectiva a mantiselor:
➢ este posibil sa apara un transport de la rangul c.m.s. :
▪ daca exponentul nu este maxim => acest transport va fi recuperat
printr-o deplasare dreapta a mantisei rezultatului cu o pozitie si
incrementarea exponentului;
▪ daca exponentul este maxim -> se pozitioneaza un indicator de
depasire superioara la exponent (eof = exponent overflow) =>
eroare.
b) Daca la pasul precedent s-a realizat scaderea mantiselor:
➢ daca mantisa obtinuta este nula -> se face „zero curat” (zero pentru toti
bitii rezultatului);
➢ daca mantisa nu este normalizata (primul bit c.m.s. al mantisei 0):
▪ daca exponentul nu este minim -> se fac deplasari succesive ale
mantisei spre stanga si se decrementeaza exponentul;
▪ daca exponentul este minim -> se pozitioneaza un alt indicator, de
depasire inferioara euf – „exponent underflow”, nu este situatie de
eroare, rezultatul fiind aproximat prin zero).
Exemplu. Sa se efectueze operatia de adunare A + B = C, unde A = (28/32)•28 si B =
(30/32) •26, numerele fiind reprezentate in virgula mobila pe 11 biti (un bit de semn, 5
biti pentru exponent si 5 biti pentru mantisa).
A = 0 11000 .11100
B = 0 10110 .11110
A fost reprezentat si punctul zecimal la mantisa, chiar daca in calculator nu se
reprezinta. Deoarece eA>eB se deplaseaza mantisa operandului B spre dreapta cu eA-eB
(=2) pozitii, egaland astfel exponentii. Noul B este:
B = 0 11000 .00111

Se aduna mantisele, iar exponentul rezultatului este exponentul comun:


mA+ .11100+
mB .00111
── ───────
mC 1.00011
eC = 11000 mC = 1.00011
S-a obtinut depasire la mantisa rezultatului, se deplaseaza mantisa o pozitie dreapta si
se incrementeaza exponentul:
eC = 11000+ mC = 1.00011
1 ------>
───────
eC = 11001 mC = .10001
Rezultatul final este:
C = 0 11001 .10001

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 !

4.2.2 Înmulţirea în virgulă mobile

Pentru inmultirea a doua numere (A • B = C) reprezentate in virgula mobila se


parcurg urmatoarele etape:
1) Se verifica daca vreunul din cei doi operanzi este nul, caz in care si
rezultatul este nul, fara nici o operatie.
2) Se determina semnul rezultatului pe baza regulii semnelor de la
inmultirea din matematica (se calculeaza prin sau-exclusiv dintre bitii de semn ai
celor doi operanzi).
3) Se aduna exponentii. Se executa o corectie prin scaderea unui
deplasament (2numar biti exponent-1) din exponentul rezultatului, deoarece:
eA = exp(A) + deplasament
eB = exp(B) + deplasament
eA + eB = exp(A) + exp(B) + 2 • deplasament
eC = exp(A) + exp(B) + deplasament
4) Se inmultesc mantisele operanzilor in virgula fixa. Este posibil ca
mantisa rezultatului sa nu fie normalizata (daca cele doua mantise care s-au
inmultit au avut valori apropiate de 1/2), caz in care se deplaseaza mantisa
rezultatului o pozitie spre stanga si exponentul se decrementeaza.
In organigrama urmatoare sunt reprezentate operatiile elementare executate
pentru inmultirea a doua numere in virgula mobila.
Exemplu. Sa se efectueze inmultirea A • B = C, unde A = (17/32)•2-9 si B = (19/32)•24.
Caracteristica operandului A este: eA = -9 + 25-1 = -9 +16 = 7. Cei doi operanzi
se reprezinta in virgula mobila:
A = 0 00111 10001
B = 0 10100 10011
sC = 0  0 = 0
Se aduna exponentii (din suma se scade un deplasament) si se inmultesc mantisele
celor doi operanzi, numere subunitare in virgula fixa:
00111+ .10001•
10100 .10011
───── ───────────
11011- .0000010001+
10000 .0000100010
───── .0000000000
01011 .0000000000
.0100010000
───────────
.0101000011

=> eC = 01011 mC = .0101000011

Deoarece mantisa rezultatului nu este normalizata se executa normalizarea printr-o


operatie de deplasare spre stanga a mantisei (mantisa se trunchiaza pentru a obtine
rezultatul pe 5 biti) si decrementarea exponentului
eC = 01011-1 = 01010; mC = .1010000110 => mC = .10100
 C = 0 01010 .10100
S-a obtinut rezultatul C = (20/32)•2-6.
=> Din nou rezultatul nu este exact (operatia de trunchiere a mantisei produsului,
se pierd biti semnificativi) !

4.2.3 Împărţirea în virgulă mobile

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):

Se obtine urmatorul rezultat (este necesara


o deplasare dreapta a mantisei si incrementarea
exponentului):
eC: 01010+ mC: 1.10100
1 ----->
─────
01011 .11010
==> C : 1 01011 .11010
Valoarea rezultatului obtinut este aproximativ –0.812•2-5, fata de valoarea
corecta –0.823•2-5.
=> calculele au fost afectate de erori (rezultatul nu este exact);
=> aproximatia nu este foarte buna (cauza: numar redus de biti utilizati
pentru reprezentarea numerelor).
5. STRUCTURA ŞI ARHITECTURA
CALCULATORULUI DIDACTIC

5.1 Primitivele funcţionale ale calculatorului didactic


Memoria M , 1M=16 ; 2M=65536
Memoria M [65536;16] este o matrice de elemente de memorare organizată într-un
spaţiu de adresare unic de 65536 cuvinte a câte 16 biţi fiecare.
Citirea şi scrierea se fac asincron sub controlul unităţii de comandă.
Registrul AM, AM=16
Registrul de adresare a memoriei, AM, păstrează adresa celulei de memorie la care se
face acces la un moment dat. Lungimea acestui registru se alege astfel ca 2AM ≥ 2M.
Adresa calculată (adresa efectivă) este memorată în AM selectând, prin decodificare,
cuvântul din memorie la care se va face accesul.
Registrele RG, 1RG=16 ; 2RG=8
Deoarece timpul de acces la memoria M este relativ mare se va prevedea o memorie
rapidă organizată sub forma a 8 registre de câte 16 biţi fiecare. Registrele RG conţin
unul sau ambii operanzi necesari pentru execuţia instrucţiunilor calculatorului didactic.
Unele din aceste registre vor fi utilizate şi pentru calculul adresei efective a operanzilor
din memorie.
-BA,BB sunt utilizate ca registre de bază;
-XA,XB sunt utilizate ca registre index;
-IS este utilizat ca indicator pentru adresarea unor structuri de date de tip stivă;
-RA, RB, RC sunt utilizate numai pentru păstrarea operanzilor.
Adresa registrului selectat este specificată în codul instrucţiunii.
Registrul CP, CP=16
Registrul contor program CP este utilizat pentru păstrarea adresei instrucţiunii ce
urmează să se execute după terminarea execuţiei instrucţiunii curente. Lungimea
registrului CP se alege astfel ca 2CP ≥ 2M. Registrul CP poate fi:
-iniţializat cu o valoare dată la iniţializarea sistemului;
- iniţializat cu o valoare oarecare prin execuţia instrucţiunilor de transfer control;
-incrementat în cazul execuţiei instrucţiunilor (operaţionale) ce nu specifică
transferul controlului la o altă secvenţă.
Unitatea aritmetică logică UAL, UAL=16
Unitatea aritmetică logică (UAL) realizează operaţiile aritmetice şi logice ale
calculatorului didactic şi este utilizată pentru prelucrarea datelor şi pentru calculul
adresei efective. Unitatea aritmetică logică este de tip paralel, prelucrează operanzi pe
16 biţi reprezentaţi în cod complementar. Unitatea aritmetică logică implementează
direct toate operaţiile elementare necesare execuţiei instrucţiunilor aritmetice şi logice
ale calculatorului didactic. Condiţiile în care s-a efectuat o operaţie în unitatea
aritmetică logică şi caracteristicile rezultatului sunt păstrate într-un registru de indicatori
IND.
Registrele T1,T2, T1=T2=16
Registrele temporare T1 şi T2 sunt utilizate pentru a păstra operanzii unei operaţii
executate în unitatea aritmetică logică , rezultate intermediare la calcularea adresei
efective şi nu sunt accesibile în mod explicit de programator.
Indicatorii de condiţii IND, IND = 16
Registrul de indicatori constituie o grupare a unor bistabili cu funcţii individuale,
pozitionaţi la execuţia instrucţiunilor în funcţie de rezultatul din unitatea aritmetică logică
. Registrul IND permite alegerea unei secvenţe de execuţie următoare unei operaţii
aritmetice/logice în funcţie de rezultatul acestei operaţii. Lungimea registrului IND este
de 16 deşi numai o parte din aceştia sunt utilizaţi în mod efectiv. Funcţiile acestor
bistabili indicator vor fi prezentate în paragraful 5.3.2.
Registrul RI, RI = 16
Registrul de instrucţiuni RI păstrează codul instrucţiunii în curs de execuţie. Conţinutul
său este decodificat şi transmis secţiunii de generare comenzi/verificare stări din
unitatea de comandă. În RI se păstrează şi informaţiile necesare pentru selecţia
registrelor generale în funcţie de instrucţiunea în curs de execuţie.
Magistrala MAG, MAG = 16
Interconectarea resurselor prezentate mai sus se realizează prin intermediul unei
magistrale multiplexate în timp, MAG, care constituie suportul fizic de comunicaţie între
aceste resurse. Dimensiunea magistralei este de 16 şi este formată din 16 linii de
interconectare, fiind astfel în totalitate pasivă. Fiecare resursă conectată la magistrală
va include şi circuitele de interfaţă necesare cuplării la magistrală. Transmisia pe MAG
se face astfel încât un singur cuvânt de informaţie circulă pe magistrală la un moment
dat.
5.2 Schema bloc şi fluxul informaţiei
Schema bloc a calculatorului didactic - principalele subansambluri ale
calculatorului didactic:
- unitatea de execuţie (UE);
- unitatea de comandă (UCdă);
- subsistemul de intrări /ieşiri (I/E).
Datele circulă în principal pe magistrala comună MAG iar comenzile circulă prin
conexiuni dedicate între unitatea centrală şi resursele UE şi subsistemului de
intrare/ieşire.
Datele preluate din exterior prin subsistemul de intrări/ieşiri sunt transferate prin
magistrala MAG în registrele generale sau în memorie. Având în vedere viteza de lucru
ridicată a registrelor generale RG în raport cu memoria M este de dorit ca prelucrările
să se efectueze, pe cât posibil, între operanzi memoraţi în RG. În procesul de
prelucrare operanzii sunt preluaţi din RG şi transferaţi în registrele de lucru T1, T2 ca
intrări pentru unitatea aritmetică logică UAL, iar rezultatul se depune în unul din
registrele sursă din RG. Datorită numărului redus de registre generale RG, apare
necesitatea transferului de operanzi între memorie şi acestea. Există şi posibilitatea
preluării ambilor operanzi din memorie sau a unui operand din memorie şi a celuilalt din
RG. Rezultatul este memorat în locul unuia din cei doi operanzi.
Registrul de indicatori este poziţionat direct de către unitatea aritmetică logică . Există
posibilitatea transferului direct, prin MAG, între IND şi memorie pentru
salvarea/restaurarea indicatorilor de condiţii. Registrul contor program CP poate fi
încărcat cu o valoare din RG sau memorie, iar conţinutul său poate fi transferat în
registrul AM sau în memorie.
Registrul de instrucţiuni RI este încărcat din memorie cu codul instrucţiunii
curente iar conţinutul său este accesibil unităţii de comandă pentru interpretare.
Fluxul informaţiilor în calculatorul didactic, pentru execuţia unui program:
Se citeşte din memorie instrucţiunea a cărei adresă se găseşte în registrul CP.
Primul cuvânt al instrucţiunii se citeşte în RI şi este utilizat de unitatea centrală pentru a
controla mai departe operaţiile ce urmează să se execute. Se citesc, dacă este cazul,
următoarele cuvinte ale instrucţiunii (instrucţiunile pot fi formate din 1,2 sau 3 cuvinte de
16) şi se citesc operanzii. Aceste operaţii formează faza de citire - interpretare a
instrucţiunii. Urmează apoi faza de execuţie care execută prelucrarea efectivă a
operanzilor conform cu codul operaţiei specificat în RI. Rezultatul este depus în
memorie sau în RG după cum este specificat în RI. Pentru execuţia operaţiilor de I/E
datele sunt transferate între registrul RA şi subsistemul de I/E.
I/E Subsistem de I/E

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

Magistrala comuna bidirectionala Comenzi si stari

Cai de acces paralele Acces individual la indicatori de conditie

Schema bloc a calculatorului didactic


Destinaţie

Sursă RG M T1 T2 RI CP I/E AIE UAL AM IND

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

Posibilităţi transfer date în calculatorul didactic

5.3 Setul de instrucţiuni


Pentru specificarea operaţiilor logice şi de calcul sunt necesare instrucţiuni aritmetice şi
logice care să permită realizarea unui set minim de operaţii cum ar fi: adunarea şi
scăderea (sau adunarea şi schimbarea semnului); conjuncţia, disjuncţia şi negaţia
(sistem complet de funcţii); deplasarea arimetică şi logică .
Pentru implementarea structurilor de control ale unui algoritm sunt necesare
instrucţiuni de transfer control cum ar fi: salt necondiţionat la o anumită secvenţă de
instrucţiune; testarea condiţiilor de terminare a operaţiilor aritmetice/ logice şi
ramificarea execuţiei programului în funcţie de aceste condiţii.
Pentru transferul datelor primare şi a rezultatelor între calculator şi mediul extern
sunt necesare instrucţiuni de intrare/ieşire.
Pentru structurarea datelor în memorie sau registrele generale sunt necesare
instrucţiuni de transfer a datelor între aceste resurse.
Setul de instrucţiuni pentru calculatorul didactic poate fi format din următoarele
tipuri de instrucţiuni: transfer date; aritmetice; logice; transfer control.
Instrucţiunile calculatorului didactic
Instrucţiunile calculatorului didactic sunt grupate în trei clase:
Instrucţiunile de transfer date vor fi utilizate atunci când este necesară o
transformare spaţială a datelor fără a modifica conţinutul informaţiilor transferate. Acest
grup include instrucţiuni de transfer între resursele interne ale unităţii de execuţie sau
între unitatea de execuţie şi subsistemul de intrări/ ieşiri.
Instrucţiunile aritmetice şi logice trebuie să permită efectuarea operaţiilor
aritmetice/logice uzuale.
Grupul de instrucţiuni de transfer control este necesar pentru implementarea
structurilor de control care asigură înlănţuirea secvenţelor de execuţie a instrucţiunilor
conform cu un algoritm dat, descris prin program.

5.3.1 Instrucţiuni de transfer date


Cu instrucţiunile de transfer date se poate specifica transferul datelor între memorie şi
registrele generale sau între registrul RA şi porturi de I/E. Instrucţiunile de manipulare a
stivei sunt incluse tot în acest grup. În tabelul 5.2 se prezintă instrucţiunile de transfer
date:

Instrucţiuni CU SCOP GENERAL MOV Transferă cuvânt


PUSH Transferă cuvânt în stivă
POP Transferă cuvânt din stivă

Instrucţiuni INTRARI / IEŞIRI IN intrare cuvânt


OUT ieşire cuvânt

Instrucţiuni TRANSFER PUSHF Transferă indicatori în stivă


INDICATORI
POPF Transferă indicatori din stivă
Funcţiile efectuate la execuţia acestor instrucţiuni:

Format Funcţie
instrucţiune

MOV MOV transferă un cuvânt specificat de operandul sursă la operandul


destinaţie,sursă destinaţie. Conţinutul indicatorilor nu se schimbă.

PUSH sursă PUSH decrementează indicatorul stivei IS apoi transferă un cuvânt


specificat de operandul sursă în vârful stivei, indicat de IS. PUSH
permite într-un mod convenabil memorarea temporară a datelor în stivă,
de exemplu transferul parametrilor la chemarea unei proceduri. PUSH
nu afectează indicatorii.

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.

IN port IN transferă un cuvânt de la portul de intrare specificat prin adresa "port"


în registrul RA. Adresele porturilor de I/E sunt cuprinse între 0 şi 255.

OUT port OUT transferă un cuvânt din RA la portul de ieşire specificat prin adresa
"port".

5.3.2 Instrucţiuni aritmetice


Instrucţiunile aritmetice ale calculatorului didactic operează asupra unor numere
reprezentate pe 16 biţi sub forma de numere binare fără semn sau numere binare cu
semn, numerele negative fiind reprezentate în cod complementar. Numerele sunt
considerate întregi, poziţia virgulei fiind implicit după cea mai puţin semnificativă cifră a
numărului. Astfel domeniul de valori pentru numerele fără semn este între 0 şi 65535,
iar pentru numerele cu semn între -32768 şi +32767.
Instrucţiuni ADUNARE ADD Adună cuvânt
ADC Adună cuvânt şi transport
INC Incrementează cuvânt
Instrucţiuni aritmetice:
Instrucţiuni SCADERE SUB Scade cuvânt
SBB Scade cuvânt cu împrumut
DEC Decrementează cuvânt
NEG Schimbă semnul la cuvânt
CMP Compară cuvânt

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.

S 1. la execuţia instrucţiunilor aritmetice şi logice indicatorul S este setat la valoarea bitului


cel mai semnificativ al rezultatului (bitul de semn). Pentru numere cu semn în absenţa
(semn)
depăşirii S=0 indică rezultat pozitiv iar S=1 indică rezultat negativ.
2. poate fi testat cu instrucţiuni de salt condiţionat. În cazul operaţiilor cu numere fără semn
S poate fi ignorat deoarece în acest caz specifică cel mai semnificativ bit al rezultatului.

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:

Format instrucţiune Descriere

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:

Instrucţiuni LOGICE NOT "NU" cuvânt


AND "ŞI" cuvânt
OR "SAU" cuvânt
XOR "SAU exclusiv" cuvânt
TEST "TEST" cuvânt

Instrucţiuni SHL/SAL Deplasare logică/aritmetică la stânga cuvânt


DEPLASARE SHR Deplasare logică la dreapta cuvânt
SAR Deplasare aritmetică la dreapta cuvânt

Formatul instrucţiunilor logice şi de deplasare şi funcţiile efectuate la execuţia acestora:

Formatul instrucţiunii Funcţie

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

Formatul instrucţiunii Funcţie

SHL/SAL destinaţie SHL/SAL realizează deplasarea la stânga cu o poziţie a operandului


destinaţie. În bitul cel mai puţin semnificativ se introduce zero. Deplasarea
logică şi aritmetică la stânga cu o poziţie produc acelaşi rezultat. S-au
prevăzut două mnemonice pentru a mări flexibilitatea de exprimare a
utilizatorului, în funcţie de contextul de prelucrare a datelor.

SHR destinaţie SHR deplasează logic la dreapta biţii operandului destinaţie introducînd
zero în bitul cel mai semnificativ.

SAR destinaţie SAR deplasează aritmetic la dreapta biţii operandului destinaţie.


Deplasarea se face cu extensia bitului de semn (bitul de semn rămîne
neschimbat iar bitul cel mai semnificativ de date preia conţinutul bitului de
semn).

5.3.3 Instrucţiuni de transfer control


Ordinea în care se execută instrucţiunile unui program pentru calculatorul
didactic este determinată de secvenţa de valori reprezentând conţinutul registrului CP.
Secvenţa normală de execuţie a unui program se obţine prin incrementarea
contorului program CP, la fiecare instrucţiune pentru a obţine instrucţiunea următoare.
Instrucţiunile de transfer control operează asupra contorului program. Incărcarea
registrului CP cu o valoare oarecare determină alterarea secvenţei normale de execuţie
a programului. Transferul controlului la o altă secvenţă se poate face necondiţionat sau
condiţionat de valorile indicatorilor de condiţii.
Instrucţiunea HLT a fost inclusă în acest grup deşi efectul execuţiei acestei instrucţiuni
este suspendarea execuţiei programului şi trecerea unitatăţii centrale a calculatorului
didactic într-o stare de aşteptare (se aşteaptă un reset sau o întrerupere ).
Instrucţiuni CALL Salt necondiţionat la o procedură
TRANSFER RET Revenire necondiţionată dintr-o procedură
NECONDIŢIONAT IRET Revenire necondiţionată dintr-o procedură de întrerupere
JMP Salt necondiţionat la o anumită adresă

Instrucţiuni Condiţia testată salt dacă


TRANSFER JA (T OR Z)=0 "above";d>s (d,s fără semn)
CONDIŢIONAT JAE T=0 "above or equal";d≥s(d,s fără semn)
JB T=1 "below";d<s (d,s fără semn)
JBE (T OR Z)=1 "below or equal";d≤s(d,s fără semn)
JC T=1 "carry"; transport
JE Z=1 "equal"; d=s
JG ((S XOR D)OR Z)=0 "greater";d>s (d,s cu semn)
JGE (S XOR D)=0 "greater or equal"; d≥s (d,s cu
semn)
JL (S XOR D)=1 "less"; d<s (d,s cu semn)
JLE ((S XOR D)OR Z)=1 "less or equal";d≤s (d,s cu semn)
JNC T=0 "not carry"; nu există transport
JNE Z=0 "not equal"; d diferit s
JNO D=0 "not overflow";nu există depăşire
JPO P=0 "parity odd";paritate impară
JNS S=0 "not sign";rezultat pozitiv
JO D=1 "overflow";depăşire
JPE P=1 "parity even";paritate pară
JS S=1 "sign";rezultat negativ

Nota s=sursă ; d=destinaţie


Formatul instrucţiunii Funcţie

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

I) COP d MOD REG RM

registrul ce contine unul din operanzi sau


registrul care participa la calculul adresei efective (in
functie de modul de adresare)

registrul ce contine unul din operanzi sau


extensie cod operatie

modul de calcul al adresei efective

d=0 registru/memorie  registru/memorie OP registru


R/M R/M OP REG
d=1 registru  registru OP registru/memorie
REG REG OP R/M 

codul operatiei al instructiunii respective

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

MOD arată modul de calcul al adresei efective a operandului şi necesită 2 biţi

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.

5.5 Moduri de adresare


Modul de adresare reprezintă modalitatea în care se calculează adresa efectivă
(AE) a operanzilor implicaţi în instrucţiunea curentă. Instrucţiunile calculatorului didactic
pot prelucra maxim doi operanzi. Aceştia se pot găsi :
• ambii în registrele generale RG ;
• unul în registrele generale RG şi altul în memorie ;
• unul în registrele generale RG şi altul în cadrul instrucţiunii respective (operand
imediat) ;
• unul în memorie şi altul imediat.
În funcţie de codificarea câmpurilor MOD şi RM se precizează modul în care se
calculează adresa efectivă (AE) a operandului. Tabelul 5.6 specifică modul în care se
calculează adresa efectivă şi codurile din câmpurile MOD, RM. Se observă că pentru
MOD = 11, operanzii se găsesc în registrele generale.
Pentru a asigura o mare flexibilitate în prelucrarea datelor alegem, pentru
calculatorul didactic, următoarele moduri de adresare:
1. Adresare directă
Adresa efectivă este prevăzută în instrucţiune, în cuvîntul al doilea.
AE = Depls
Exemplu: mov RA,adresă
0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM Deplasament

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

COP d MOD REG RM Deplasament

MEMORIE

AE

Figura 5.4

MEMORIE
AE
OPERAND

3. Adresare indirectă prin registru


Adresa efectivă se găseşte în unul din registrele XA, XB,BA, BB.

XA
AE = XB
BA
BB

Exemplu: mov RA,[BA]


0 6 7 8 9 10 12 13 15

COP d MOD REG RM

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

Exemplu: mov RA,[BA] [XA]


mov RA,[BA + XA]
0 6 7 8 9 10 12 13 15

COP d MOD REG RM

RG RG

BA XA

BB XB

Figura 5.6 +

MEMORIE
AE
OPERAND

5. Adresare indirectă prin sumă de registre cu autoincrementare a


registrelor index după calculul adresei efective.
Faţă de modul precedent de adresare apare deosebirea că registrele
index se incrementează după generarea adresei efective.

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

COP d MOD REG RM

0 1 x x x 0 x x
RG RG

BA XA+

BB XB+

Figura 5.7 +

MEMORIE
AE
OPERAND

6. Adresare indirectă prin sumă de registre cu autodecrementare a registrului


index înainte de calculul adresei efective.
În acest caz se foloseşte doar un singur registru index şi anume registrul XA.

AE = BA+XA- BA+XA
BB+XA- ceea ce este echivalent cu: XA  XA -1 şi AE =
BB+XA

Decrementarea registrului index XA are loc înainte de a participa la calculul


adresei efective.
Exemplu: mov RA,[BA][XA-]

0 6 7 8 9 10 12 13 15

COP d MOD REG RM

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

Exemplu: mov RA,[BA]+adresă


mov RA,adresa[BA]
mov RA,[BA+adresa]
0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM deplasament

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

Exemplu: mov RA,[XA]+adresa


mov RA,adresa[XA]
mov RA,[XA+adresa]
0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM deplasament

1 0 x x x 1 0 x
RG

XA

XB

Figura 5.10 +

MEMORIE
AE
OPERAND

9. Adresare bazată indexată


Adresa efectivă se obţine prin adresarea conţinutului celui de-al doilea cuvânt al
instrucţiunii cu suma dintre un registru de bază şi un registru index.
BA+XA
AE = BA+XB + deplasament
BB+XA
BB+XB

Exemplu: mov RA,[BA][XA]+adresa


mov RA,adresa[BA][XA]
mov RA,[BA+XA+adresa]
mov RA,[BA][XA].adresa
0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM deplasament

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

Exemplu: mov RA,7


AE

0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM operand

sau

0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM deplasament

AE

0 15

operand
Figura 5.12

11. Adresare directă la registru


Operandul se găseşte într-unul din registrele specificate în câmpurile REG sau
RM.
AE = REG Exemplu: mov RA,RB
RM

0 6 7 8 9 10 12 13 15 0 15

COP d MOD REG RM deplasament

OPERAND RA

RB
AE
RC

IS

OPERAND BA

Figura 5.13 BB

XA

XB
5.6 Clasificarea instrucţiunilor

Din punctul de vedere al adresării, putem clasifica instrucţiunile în următoarele mari


categorii:
a) - instrucţiuni cu calcul de adresă efectivă:
a1) - instrucţiuni cu o singura adresă efectivă (cu un singur operand):
INC; DEC; NEG; NOT; SHL/SAL; SHR; SAR; PUSH; POP; CALL; JMP
0 6 7 8 9 10 12 13 15

a) COP d MOD REG RM

0 6 7 8 9 10 12 13 15 0 15

b) COP d MOD REG RM deplasament

a2) - instrucţiuni cu 2 adrese efective (cu 2 operanzi)


a2.1) - cu 2 operanzi ale căror adrese sunt specificate în instrucţiune:
MOV; ADD; ADC; SUB; SBB; CMP; AND; OR; XOR; TEST
0 6 7 8 9 10 12 13 15

a) COP d MOD REG RM

0 6 7 8 9 10 12 13 15 0 15

b) COP d MOD REG RM deplasament

a2.2) - cu 2 operanzi dintre care unul este imediat:


MOV; ADD; ADC; SUB; SBB; CMP; AND; OR; XOR; TEST
0 6 7 8 9 10 12 13 15 0 15

a) COP d MOD REG RM data (operand imediat)

0 6 7 8 9 10 12 13 15 0 15

b) COP d MOD REG RM deplasament

0 15

data(operand imediat)
0 7 8 15

COP

a) PUSHF; POPF; RET; IRET;


HLT
0 7 8 15
b) - instrucţiuni fără calcul de adresă efectivă:
COP adresa port
PUSHF; POPF; RET; IRET; HLT; IN; OUT; Jcond
b) IN; OUT

0 3 4 7 8 15

COP cond. test deplasament relativ la CP

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

010 [BB+XA] [BB+XA+] BB+XA+Depls RC* 2

011 [BB+XB] [BB+XB+] BB+XB+Depls IS* 3

100 [XA] [BA+-XA-] XA+Depls XA* 4

101 [XB] [BB+-XA-] XB+Depls XB* 5

110 [BA] Depls BA+Depls BA* 6

111 [BB] [Depls] BB+Depls BB* 7

* registrul general conţine chiar operandul

5.7 Codificarea instrucţiunilor


clasificarea instrucţiunilor maşină ale calculatorului didactic => instrucţiunile din
aceeaşi categorie codificate cu coduri adiacente (simplifica faza de interpretare a
acestora).
Criterii generale :
-RI0 va separa grupul de instrucţiuni cu adresă efectivă de cele fără calcul de adresă
efectivă:
RI0=0 va caracteriza grupul de instrucţiuni cu calcul de adresă efectivă;
RI0=1 va caracteriza grupul de instrucţiuni fără calcul de adresă efectivă .
-În cadrul primului grup, RI1 va separa instrucţiunile cu o adresă de cele cu două
adrese:
RI1=0 caracterizează instrucţiunile cu o singură adresă;
RI1=1 caracterizează instrucţiunile cu două adrese.
-RI2 separă grupul de instrucţiuni cu operand imediat de celelalte:
RI2=0 caracterizează instrucţiunile fără operand imediat;
RI2=1 caracterizează instrucţiunile cu operand imediat.
-În cadrul grupului de instrucţiuni cu o singură adresă RI3 separă instrucţiunile de
transfer date sau transfer control de celelalte:
RI3=0 caracterizează instrucţiunile de transfer date/control;
RI3=1 caracterizează instrucţiunile operaţionale cu un singur operand.
-În cadrul grupului de instrucţiuni cu două adrese RI3=0 specifică instrucţiunile care nu
produc rezultat ci poziţionează numai indicatorii de condiţii (CMP, TEST).
-RI4:6 codifică individual instrucţiunile din fiecare subgrup.
-În cadrul clasei de instrucţiuni fără calcul de adresă efectivă RI3=1 separă instrucţiunile
de salt condiţionat de celelalte. Biţii RI4:6 codifică individual instrucţiunile iar în cazul
instrucţiunilor de salt condiţionat RI4:7 specifică condiţia de test.

RI0=0 cu adresă efectivă RI0=1 fără adresă efectivă


RI1=0 RI3=0 0=MOV 0=MOV 0=IN 0=
cu o transfer 1= 1= 1=OUT 1=
adresă date/contr 2=PUSH 2= 2=PUSHF 2=
3=POP 3= 3=POPF 3=
4=CALL 4= 4=RET 4=
5=JMP 5= 5=IRET 5=
6= 6= 6=HLT 6=
7= 7= 7= 7=
RI3=1 0=INC 0= Jcond[RI4:7] 0=
operaţii 1=DEC 1= Jcond[RI4:7] 1=
2=NEG 2= Jcond[RI4:7] 2=
3=NOT 3= Jcond[RI4:7] 3=
4=S HL/SAL 4= Jcond[RI4:7] 4=
5=SHR 5= Jcond[RI4:7] 5=
6=SAR 6= Jcond[RI4:7] 6=
7= 7= Jcond[RI4:7] 7=
RI2=0 [Link] RI2=1 op. imed
RI0=0 cu adresă efectivă RI0=1 fără adr. efectivă
RI1=1 cu RI3=0 0= 0= 0= 0=
două nu 1= 1= 1= 1=
adrese produc 2=CMP 2=CMP 2= 2=
rezultat
3= 3= 3= 3=
4=TEST 4=TEST 4= 4=
5= 5= 5= 5=
6= 6= 6= 6=
7= 7= 7= 7=
RI3=1 0=ADD 0=ADD 0= 0=
produc 1=ADC 1=ADC 1= 1=
rezultat 2=SUB 2=SUB 2= 2=
3=SBB 3=SBB 3= 3=
4=AND 4=AND 4= 4=
5=OR 5=OR 5= 5=
6=XOR 6=XOR 6= 6=
7= 7= 7= 7=
RI2=0 [Link] RI2=1 [Link]

Bit RI Instrucţiune Observaţii


0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 d MOV
0 0 0 0 0 1 0 x PUSH
0 0 0 0 0 1 1 x POP
0 0 0 0 1 0 0 x CALL
0 0 0 0 1 0 1 x JMP
0 0 0 1 0 0 0 x INC
0 0 0 1 0 0 1 x DEC
0 0 0 1 0 1 0 x NEG
0 0 0 1 0 1 1 x NOT
0 0 0 1 1 0 0 x SHL/SAL
0 0 0 1 1 0 1 x SHR
0 0 0 1 1 1 0 x SAR
0 0 1 0 0 0 0 x MOV cu operand imediat
0 1 0 0 0 1 0 d CMP
0 1 0 0 1 0 0 d TEST
0 1 0 1 0 0 0 d ADD
0 1 0 1 0 0 1 d ADC
0 1 0 1 0 1 0 d SUB
0 1 0 1 0 1 1 d SBB

Bit RI Instrucţiune Observaţii


0 1 0 1 1 0 0 d AND
0 1 0 1 1 0 1 d OR
0 1 0 1 1 1 0 d XOR
0 1 1 0 0 1 0 x CMP cu operand imediat
0 1 1 0 1 0 0 x TEST cu operand imediat
0 1 1 1 0 0 0 x ADD cu operand imediat
0 1 1 1 0 0 1 x ADC cu operand imediat
0 1 1 1 0 1 0 x SUB cu operand imediat
0 1 1 1 0 1 1 x SBB cu operand imediat
0 1 1 1 1 0 0 x AND cu operand imediat
0 1 1 1 1 0 1 x OR cu operand imediat
0 1 1 1 1 1 0 x XOR cu operand imediat
1 0 0 0 0 0 0 x IN
1 0 0 0 0 0 1 x OUT
1 0 0 0 0 1 0 x PUSHF
1 0 0 0 0 1 1 x POPF
1 0 0 0 1 0 0 x RET
1 0 0 0 1 0 1 x IRET
1 0 0 0 1 1 0 x HLT
1 0 0 1 condiţie x Jcond

5.8 Faza de citire interpretare a instrucţiunilor maşină

Faza de citire interpretare a instrucţiunilor maşină are ca obiective principale:


-citirea instrucţiunii curente;
-separarea instrucţiunilor în clase mari;
-calculul adresei efective dacă este cazul;
-pregatirea adresei efective în registrele AM şi T1.
Adresa registrelor generale implicate în transfer, prelucrare sau calcul de adresă
efectivă va fi generată cu ajutorul unei memorii denumită MAP.
3 3

RM A2 :4 D3:5 MAP3:5 Adresa celui de-al doilea


registru implicat in calculul
adresei (va fi adus in T2)

2 3

MOD A0 :1 D0:2 MAP0:2 Adresa primului registru


implicat in calculul adresei (va
fi adus in T1)

Registru Adresă
RA 0
RB 1
RC 2
IS 3
XA 4
XB 5
BA 6
BB 7

ADR MAP0:2 MAP3:5 ADR MAP0:2 MAP3:5


0 6 4 10 6 4
1 6 5 11 6 5
2 7 4 12 7 4
3 7 5 13 7 5
4 4 x 14 4 x
5 5 x 15 5 x
6 6 x 16 6 x
7 7 x 17 7 x
8 6 4 18 x x
9 6 5 19 x x
A 7 4 1A x x
B 7 5 1B x x
C 6 4 1C x x
D 7 4 1D x x
E x x 1E X x
F x x 1F X x
Programul AHPL pentru descrierea fazei de citire interpretare.
5.9 Faza de execuţie a instrucţiunilor maşină
Faza de execuţie a instrucţiunilor maşină este descrisă prin programul AHPL ( paşii
26...88 ) conform cu organigramele din Fig.5.20, 5.21, 5.22.

/* Faza de execuţie a instrucţiunilor cu calcul de adresă efectivă


/* Se separa instrucţiunile cu doua adrese ADD,ADC,etc de cele cu o adresă (cu un
operand) INC, DEC, etc, formîndu-se un grup separat cu cele de transfer date şi
chemare de subrutină sau salt necondiţionat deoarece aceste trei mari clase au părţi
comune în faza de execuţie.

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)

/* Execuţia instrucţiunilor CALL; JMP


48. → (RI6)/(53)
/* se separă instrucţiunea JMP
49. CP  INC(CP)
/* se formează adresa instrucţiunii următoare şi se salvează în stivă
50. T2  BUSFN(RG;DCD(ADRIS))
51. RG*DCD(ADRIS)  ADD(0FFFFH;T2;0)
AM  ADD(0FFFFH;T2;0)
52. M*DCD(AM)  CP
53. CP  T1
→ (2)
/* adresa efectivă se depune în contorul de program
/* Execuţia instrucţiunilor cu un operand
INC; DEC; NEG; NOT; SHL/SAL; SHR; SAR
54

11 =11
MOD=11
54 54

T1 M⊥AM T1 RG⊥R/M

55 T1 operatie(T1)
Depunere rezultat
56
11 =11
MOD=11

M⊥AM  T1 RG⊥R/M  T1

Adresa urmatoare Formarea adresei instructiunii urmatoare


32

/* Execuţia instrucţiunilor cu doi operanzi


ADD;ADC;SUB;SBB;AND;OR;XOR;CMP;TEST

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 ISIS+1 END
0 1
RI6 86:88
69 PUSHF POPF
0
ISIS-1 IND M⊥IS RI6
0 1 CP CP+RI8:15
RI6 M⊥IS IND ISIS+1
1
IN OUT 82:83
70 71
IND M⊥IS
IRET RET
RA Port ⊥AIE
Port ⊥AIE
 RA ISIS+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)

5.10 Completarea setului de instrucţiuni


Vom încerca să completăm setul de instrucţiuni maşină → aspecte:
- alegerea funcţiei şi a mnemonicei;
- stabilirea formatului instrucţiunii;
- codificarea instrucţiunii;
- modificarea fazei de citire interpretare în scopul recunoaşterii instrucţiunii;
- descrierea fazei de execuţie a instrucţiunii.
Vom introduce noi instrucţiuni:
- rotire stânga/dreapta cu sau fără transport;
- repetare a unei secţiuni de program;
- interschimbarea conţinutului a doi operanzi.
Alegerea funcţiei şi a mnemonicei

Mnemonică Funcţie

ROL -rotire stânga de un număr de ori

ROR -rotire dreapta de un număr de ori

RCL -rotire stânga prin indicatorul de transport de un număr de ori

RCR -rotire dreapta prin indicatorul de transport de un număr de ori

LOOP,LOOPZ -repetarea unei secţiuni de program de un număr de ori

XCHG -interschimbarea conţinutului a doi operanzi

Introducerea instrucţiunilor RCL, RCR, ROL, ROR


Formatul şi funcţiile instrucţiunilor RCL, RCR, ROL, ROR
Formatul instrucţiunilor RCL, RCR, ROL, ROR este :
COP c MOD --- RM
Instrucţiunea ROL realizează funcţia :
dacă c=0 atunci CONTOR = 1
altfel CONTOR = (RC)
atât timp cât CONTOR≠0 execută T,OPERAND0:15  OPERAND0:15,OPERAND0
CONTOR = CONTOR - 1
Instrucţiunea ROR realizează funcţia :
dacă c=0 atunci CONTOR = 1
altfel CONTOR = (RC)
atât timp cât CONTOR ≠ 0 execută
T,OPERAND0:15  OPERAND15,OPERAND15,OPERAND0:14
CONTOR = CONTOR - 1
Instrucţiunea RCL realizează funcţia :
dacă c=0 atunci CONTOR = 1
altfel CONTOR = (RC)
atât timp cât CONTOR ≠ 0 execută T,OPERAND0:15  OPERAND0:15,T
CONTOR = CONTOR - 1
Instrucţiunea RCR realizează funcţia :
dacă c=0 atunci CONTOR = 1
altfel CONTOR = (RC)
atât timp cât CONTOR ≠ 0 execută T,OPERAND0:15 
OPERAND15,T,OPERAND0:14
CONTOR = CONTOR - 1
Codificarea instrucţiunilor RCL, RCR, ROL, ROR
=> aceste instrucţiuni fac parte din clasa de instrucţiuni cu un singur operand.
Codul 0001111 din această categorie de instrucţiuni nu este utilizat. Vom
folosi acest cod pentru codificarea acestui grup de instrucţiuni iar biţii RI10:12 =REG, de
asemenea neutilizaţi, îi vom folosi pentru codificarea individuală .
Rezultă codurile: 0001111 c MOD 000 RM - ROL
0001111 c MOD 001 RM - ROR
0001111 c MOD 010 RM - RCL
0001111 c MOD 011 RM - RCR
Modificarea fazei de citire interpretare în scopul recunoaşterii acestor instrucţiuni
Pentru a lua în considerare grupul de instrucţiuni ROL, ROR, RCL, RCR se
introduce după pasul AHPL 54, care a citit operandul în registrul temporar T1, un pas
AHPL care separă aceste instrucţiuni şi face legătura cu secvenţa de execuţie a
acestora.
54.1 → DCD7(RI4:6) / (90)
Se consideră că execuţia acestor instrucţiuni începe la pasul AHPL 90.

Descrierea fazei de execuţie

90.T 2  (BUSFN(RG; DCD(ADRRC) )!16T1) * (RI 7 , RI 7 )


91. T,T1  ((T10,T11:15,T10)!(T115,T115,T10:14)!(T10,T11:15,T)!
(T115,T,T10:14))*DCD0:3(RI11:12)
92. T2  ADD(0FFFFH;T2;0);
→ (( / T 2), ( / T 2)) /(91,56)

Introducerea instrucţiunilor LOOP, LOOPZ

Instrucţiunile LOOP şi LOOPZ sunt utilizate pentru a realiza repetarea unei


secţiuni de program de un număr prestabilit de ori, altfel spus realizarea ciclurilor în
program.
Formatul şi funcţiile instrucţiunilor LOOP şi LOOPZ.
Instrucţiunile LOOP şi LOOPZ realizează un salt relativ la CP stabilit de
valoarea deplasamentului din cadrul instrucţiunii.
Aceste instrucţiuni se pot introduce în grupul instrucţiunilor de salt condiţionat. Fac parte
din categoria instrucţiunilor fără calcul de adresă efectivă.
Formatul general este :
COP Deplasament

Instrucţiunea LOOP realizează funcţia:


RC  RC - 1
dacă RC ≠ 0 atunci CP  CP + Deplasament
altfel CP  CP + 1
registrul RC este decrementat şi se relizează saltul relativ la CP cu o valoare specificată
de Deplasament dacă conţinutul registrului RC este diferit de zero, iar în caz contrar se
continuă cu instrucţiunea următoare.
Deplasamentul trebuie să aibă o valoare între -128 şi 127 şi reprezintă o
adresă relativă faţă de adresa instrucţiunii curente LOOP.
Instrucţiunea LOOPZ realizează funcţia:
RC  RC - 1
dacă (RC≠0) Λ (Z = 1) atunci CP  CP + Deplasament
altfel CP  CP + 1
registrul RC se decrementează şi se realizează saltul relativ la CP cu o valoare
specificată de Deplasament dacă conţinutul registrului RC este diferit de zero şi
indicatorul Z este unu, iar în caz contrar ( RC = 0 sau Z = 0 ) se continuă cu intrucţiunea
următoare. Deplasamentul trebuie să fie o valoare între -128 şi 127 şi reprezintă o
adresă relativă faţă de adresa instrucţiunii curente LOOPZ.

Codificarea instrucţiunilor LOOP şi LOOPZ


Aceste instrucţiuni fac parte din grupul instrucţiunilor de salt condiţionat =>
codificare adiacentă cu a acestora:

1 0 1 1 0 x x x Deplasament pentru instrucţiunea LOOP


1 0 1 1 1 x x x Deplasament pentru instrucţiunea LOOPZ
Modificarea fazei de citire interpretare în scopul recunoaşterii acestor instrucţiuni
Pentru a lua în considerare şi acest grup de instrucţiuni, pasul AHPL 85, care
realiza execuţia instrucţiunilor de salt condiţionat, se modifică astfel:
85. → (RI 2 , RI 2  conditie )/(93,32)
S-a ţinut seama că cele două grupuri de instrucţiuni diferă numai prin bitul RI 2 din codul
de operaţie. La pasul 32 se merge în cazul instrucţiunilor de salt condiţionat când
condiţia nu este îndeplinită. Pasul 86 constituie continuarea execuţiei instrucţiunilor de
salt condiţionat când condiţia este îndeplinită, iar pasul 93 reprezintă începutul
secvenţei de execuţie a instrucţiunilor LOOP şi LOOPZ.

Descrierea fazei de execuţ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)

Introducerea instrucţiunii XCHG


Instrucţiunea XCHG are rolul de a interschimba doi operanzi ce se găsesc, fie
ambii în registrele generale, fie unul într-un registru general şi cel de al doilea în
memorie.
Formatul şi funcţia instrucţiunii XCHG.
Instrucţiunea XCHG face parte din grupul instrucţiunilor cu două adrese. Formatul
general al instrucţiunii este:
0 6 7 8 9 10 12 13 15 0 15

b) COP d MOD REG RM deplasament

Funcţia îndeplinită de instrucţiunea XCHG este:


dacă MOD = 11 atunci RGDCD(REG) <--> RGDCD(RM)
altfel RGDCD(REG) <--> MDCD(AM)

Codificarea instrucţiunii XCHG


Făcând parte din grupul instrucţiunilor cu două adrese vom stabili o codificare
în clasa ADD, ADC, etc
Codificarea propusă este:
0 1 0 1 1 1 1 x MOD REG RM
Modificarea fazei de citire interpretare în scopul recunoaşterii acestei instrucţiuni
Pentru a lua în considerare această intrucţiune vom introduce înaintea
începutului execuţiei grupului de instrucţiuni ADD, ADC, SUB, SBB, etc, adică înaintea
pasului AHPL 58, un pas 57.1 care separă această instrucţiune de grupul respectiv.
57.1 → (DCD7(RI4:6))/(99)
S-a considerat ca la pasul AHPL 99 va începe execuţia instrucţiunii XCHG.

Descrierea fazei de execuţie

99.T1  (BUSFN(M; DCD(AM))! BUSFN(RG; DCD(RM))) * (RI 8  RI 9 , RI 8  RI 9 )


100.T2  BUSFN(RG;DCD(REG))
[Link] * DCD(REG)  T1
102.((M * DCD(AM))! (RG * DCD(RM))) * (RI 8  RI 9 , RI 8  RI 9 )  T2
→ (32)
7. SUBSISTEMUL
DE INTRĂRI / IEŞIRI AL CALCULATORULUI
DIDACTIC

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

• Unitatea centrală de prelucrare inclusiv memoria, ca suport de


UCP
execuţie a programelor;
• Unitatea de adaptare care asigură interfaţa între unitatea
Interfata
centrală şi echipamentele periferice; de
intrare/iesire
• Echipamentele periferice care realizează transformarea
informaţiilor din formatul extern în cel intern şi invers;
Echipament periferic
• Suportul informaţiilor.

Suport exterior

7.2 Structura informaţiilor în operaţiile de I/E


În funţie de particularităţile echipamentelor periferice se pot evidenţia
următoarele modalităţi de organizare a datelor în vederea transferurilor de I/E:
• un singur cuvânt;
• blocuri de lungime fixă;
• blocuri de lungime variabilă;
• un singur cuvânt sau blocuri de lungime fixă;
un singur cuvânt sau blocuri de lungime variabilă.

7.3 Operaţiile de bază în transferul de date


Operaţia de transfer implică, în general, urmatoarele acţiuni:
• analiza stării echipamentului periferic;
• activarea acestuia, dacă este operaţional;
• transferul propriu-zis de date;
• dezactivarea echipamentului periferic.
Unitatea centrală de prelucrare poate să obţină informaţiile despre starea
echipamentului periferic în două moduri :
• se citeşte, de către unitatea centrală de prelucrare, un cuvânt de stare din
interfaţă cu o structură cunoscută;
• în memoria UC se păstrează o variabilă asociată cu starea curentă a
echipamentului periferic, fiecare schimbare a stării sesizată printr-o cerere de
întrerupere generată de echipament şi actualizată de memorie.
transferul unui bloc de date prin citirea ciclică a stării, operaţia de citire cuvânt

Initializare transfer bloc date

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

Initializare transfer bloc date

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

Initializare transfer bloc date

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

PROGRAM Initializare transfer Rutina de tratare


PRINCIPAL bloc intrerupere

Activeaza EP
Sistem Sistem
Citire stare EP
operare operare
Nu
Rutina EP
tratare operational? Rutina
eroare tratare
Da
eroare
Comanda citire
Salvare context

Intrerupere de la EP Citire stare EP

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

PROGRAM Initializare transfer Rutina de tratare


PRINCIPAL bloc intrerupere

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

Intrerupere de la EP Citire stare EP

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.

Transferul prin acces direct la memorie (DMA)


Cuvintele de transferat nu mai trec prin UCP, ci sunt transferate direct între
memorie şi echipamentele periferice.
Iniţierea unui transfer: UCP -> DMA:
• adresa zonei de memorie implicată în transfer ;
• numărul de cuvinte din bloc, dacă blocurile sunt de lungime variabilă;
• caracteristicile transferului ( intrare/ieşire, activarea/dezactivarea
întreruperilor, modul de rezolvare a concurenţei la memorie etc.);
• cuvânt de comandă pentru iniţierea efectivă a transferului.
Transferul datelor este efectuat fară intervenţia UCP (DMA conţine toate
resursele necesare pentru efectuarea autonomă a transferului: registru de adresare a
memoriei, contor de cuvinte transferate, mecanismul de acces la memorie, întreruperi,
etc.).
Soluţia de rezolvare a concurenţei la memorie dintre UCP si DMA:
• transfer prin furt de ciclu;
• transfer în mod rafală.
Transfer prin canal de intrare / ieşire
Canal de I/E = procesor specializat capabil să execute "programe de canal"
scrise într-un limbaj maşină specializat în operaţii de I/E.
Canalul conţine o unitate de comandă proprie pentru controlul echipamentelor
periferice şi a accesului la memorie în mod independent.
Unitatea centrală de prelucrare interacţionează cu canalul de I/E prin construcţii
ale limbajului maşină asociat, denumite comenzi de canal (iniţializare, citire stare,
lansare program de canal, etc.)
Un program de canal trebuie să specifice:
• adresele zonelor de memorie implicate în transfer;
• numărul şi dimensiunile blocurilor de date care trebuie transferate;
• echipamentele periferice implicate şi caracteristicile transferului;
• directive privind modul de tratare, de către canal, a unor evenimente apărute în
cursul transferului;
• operaţiile care trebuie controlate de canal.

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.

Transfer prin procesor de I/E


Pentru aplicaţii complexe (mare putere de calcul şi un trafic intens de transferuri
de date cu echipamentele de I/E) => sistem de calcul cu două procesoare
interconectate printr-o legatură de mare viteză (un procesor realizează prelucrările, iar
celalalt este specializat în operaţii de I/E).
Procesorul de I/E:
• operaţii specifice manipulării informaţiilor de I/E;
• culegerea şi validarea datelor;
• gestiunea datelor pe suporturi magnetice;
• căutări în fişiere de date.

7.5 Interacţiunea şi sincronizarea unităţii centrale de prelucrare cu


echipamentele de I/E
Functii interfata de I/E:
• adaptarea caracteristicilor electrice UCP cu cele ale echipamentelor periferice;
• asigurarea compatibilităţii dialogului UCP – echipamente periferice;
• sincronizarea UCP cu echipamentul periferic (linii de date + linii de
comandă/stare);

7.6 Manipularea echipamentelor de I/E în calculatorul didactic


Instrucţiunile IN si OUT diferă de instrucţiunea MOV doar prin
caracteristici de ordin cantitativ cum ar fi:
• dimensiunea spaţiului de adresare;
• formatul instrucţiunilor şi modurile de adresare;
• registrele ce pot fi specificate în transfer.
Cele 256 porturi de I/E, ale calculatorului didactic, pot fi asimilate cu
256 de registre plasate într-un spaţiu de adresare separat de cel al
registrelor generale şi al memoriei, care pot fi citite sau înscrise individual
prin intermediul instrucţiunilor IN şi OUT.
Consideratii:
• echipamentele periferice fie de intrare fie de ieşire ;
• fiecarui echipament periferic i se asociază un registru de date (din
cele 256) în care UCP înscrie datele ce trebuie transmise către
echipamentul periferic de ieşire sau din care UCP preia datele
înscrise de un echipament periferic de intrare;
• fiecărui echipament periferic i se asociază un registru de comenzi în
care UCP înscrie comenzile transmise spre echipamentul periferic şi
un registru de stări în care echipamentul periferic înscrie starea ce va
fi preluată de UCP (din punctul de vedere al implementării este
convenabil să se considere 2 registre separate, unul de comenzi
selectat numai la execuţia instrucţiunilor OUT şi unul de stări selectat
numai la execuţia instrucţiunilor IN, cele două registre având aceeaşi
adresă);
• registrele de I/E sunt conectate la magistrala MAG a unităţii centrale
de prelucrare;
• fiecare interfaţă îşi recunoaşte adresele asociate.
• datele sunt structurate pe cuvinte;
• ca modalitate de transfer se alege transferul programat (transferul
prin modulul de acces direct la memorie se tratează ulterior) ;
• interacţiunea şi sincronizarea unităţii centrale de prelucrare cu
echipamentul periferic se realizează prin citirea ciclică a stării
echipamentului periferic utilizând instrucţiunile IN, TEST, Jcondiţie,
etc (interacţiunea prin întreruperi se tratează în capitolul 8);
• magistrala MAG trebuie prevăzută, pe lângă liniile de date, cu un set
minim de linii de comenzi şi stări care asigură un dialog corect între
unitatea centrală de prelucrare şi registrele de I/E;
• pentru echipamentele periferice complexe se pot prevedea mai multe
registre de I/E.

7.7 Exemple de proiectare a unei interfeţe de I/E

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

Caractere ce trebuiesc transferate


RCMT imprimantei

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”.

hl -hârtie lipsă - semnal ce indică faptul că imprimanta nu are hârtie pe care să


tiparească caracterele. Este activ pe "1".
rl -ribon lipsă - semnal ce indică faptul că ribonul nu este bine poziţionat sau
lipseşte. Este activ pe "1 ".
DATE -liniile de date - semnal prin care se transmite caracterul curent spre imprimantă

Structura cuvântului de date este transmis cu OUT 0FAH.

0 7 8 15

DATE

Structura cuvântului de comenzi / stări:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

operational actint
hl resint
rl
edis
defal
cdes

Bit0 - imprimantă operaţională (operaţional)


- este înscris de imprimantă şi citit de unitatea centrală de
prelucrare. Este constituit din suma cauzelor de oprire a
funcţionării imprimantei.
= 0 imprimanta este operaţională – conectată la reţea;
siguranţele capului de scriere în bună funcţionare, are hârtie,
are ribon, capacul este închis
= 1 imprimanta nu este operaţională. Una din condiţiile de
bună funcţionare nu este îndeplinită

hl
rl operational
defal D Q
cdes

TACT CLK

Bit1 - hârtie lipsă (hl)


-este înscris de echipamentul periferic şi citit de unitatea centrală de prelucrare
= 0 imprimanta are instalată hârtie pentru lucru
= 1 nu are hârtie
Bit2 - ribon lipsă (rb)
- este înscris de echipamentul periferic şi citit de unitatea centrală de prelucrare
= 0 imprimanta are ribon şi este corect instalat
= 1 imprimanta nu are ribon sau acesta nu este corect instalat
Bit3 - defect de alimentare(defal)
- este înscris de echipamentul periferic şi citit de unitatea centrală de prelucrare
= 0 imprimanta este conectată la reţea şi siguranţele capului de scriere sunt în bună
funcţionare
= 1 imprimanta nu este conectată la reţea sau siguranţele capului de scriere sunt
defecte.
Bit4 - capac deschis (cdes)
- este înscris de echipamentul periferic şi citit de unitatea centrală de prelucrare
= 0 imprimanta are capacul închis
= 1 imprimanta are capacul deschis şi nu este recomandat să se lucreze aşa

Bit7 - echipament disponibil (edis)


- este înscris de echipamentul periferic şi citit de unitatea centrală de prelucrare
= 0 memoria tampon a interfeţei mai poate primi un nou caracter
=1 memoria tampon a interfeţei nu mai poate primi un nou caracter
deoarece este plină cu caractere care nu au fost încă tipărite
Bit10 - şterge întrerupere (resint)
- este scris / citit de unitatea centrală de prelucrare
= 0 nu se şterge întreruperea eventual cerută de echipament
= 1 se şterge (anulează) cererea de întrerupere cerută de interfaţa imprimantei.
Anularea cererii de întrerupere se comandă după ce eventual s-a tratat cauza întreruperii
respective.
Bit11 - activare întrerupere (ctint)
- este scris / citit de unitatea centrală de prelucrare
=0 permite generarea unei cereri de întrerupere la schimbarea stării:
operaţional <-> neoperaţional, disponibil <-> nedisponibil
=1 nu permite generarea unei cereri de întrerupere

Presupunând că imprimanta are asociate porturile :

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):

;Rutina de scriere caracter la imprimantă RTIP


;Intrări :codul ASCII al caracterului de tipărit în registrul RB
;Ieşiri :se tipăreşte caracterul pe foaia de imprimantă
;Funcţie :tipăreşte caracter în modul de lucru transfer programat
(bucla de aşteptare)
;Afectează :registrul RA şi indicatorii de condiţie
RTIP:
RCSI EQU 0FBH
RDATI EQU 0FAH
AST: IN RCSI ;citeşte starea
TEST RA,8000H ;verifică dacă este operaţional
JNZ ERR ;salt la tratarea erorii
TEST RA, 100H ;dacă memoria tampon a
interfeţei
JNZ AST ;nu poate primi caracter
;atunci asteaptă
MOV RA, RB ;se transferă caracterul în RA
OUT RDATI ;se transmite în memoria tampon
RET
ERR: ; rutina de analiza a erorii
În programul care apelează rutina de transfer trebuie introdusă o secvenţă de iniţializare
a modului de lucru al interfeţei de imprimantă care constă în:
MOV RA,30H ;se comandă lucrul în transfer programat
OUT RCSI ;cu citirea ciclică a stării

Modul de lucru al interfeţei, pe baza căruia se va proiecta hardware-ul necesar:


• interfaţa aşteaptă comenzi, date de la UCP sau citirea stării de către UCP ;
• dacă nu este activă nici o operaţie cu UCP, se analizează dacă în memoria
tampon există caractere şi dacă da, se tipăresc şi se actualizează adresa de
citire din memoria tampon;
• pentru operaţia de citire stare pune pe magistrala MAG cuvântul de stare;
• pentru operaţia de transfer comenzi, preia comenzile trimise de UCP în bistabilii
de comandă;
• pentru operaţia de transfer date, înscrie data în memoria tampon, actualizează
adresa de scriere în memoria tampon şi verifică dacă nu s-a umplut memoria
tampon.
7.8 Proiectarea modulului de acces direct la memorie (DMA)
Structura modulului de acces direct la memorie
Schema bloc a calculatorului didactic cu posibilităţi de acces direct la memorie:
ADRESA DENUMIRE FUNCŢIE

Baza +0 CSEP0 Registrul de comenzi/stări pentru EP 0

Baza +1 CSEP1 Registrul de comenzi/stări pentru EP 1

Baza +2 CSEP2 Registrul de comenzi/stări pentru EP 2

Baza +3 CSEP3 Registrul de comenzi/stări pentru EP 3

Baza +4 CSDMA Registrul de comenzi/stări pentru modulul de acces


direct la memorie

Baza +5 AMDMA Registrul adresare memorie pentru modulul de acces


direct la memorie

Baza +6 RCDMA Registrul contor (lungime bloc) pentru modulul de acces


direct la memorie

Baza +7 ITDMA Registrul comenzi pentru iniţializarea modulului de


acces direct la memorie

Formatul registrului de comenzi/stări pentru modulul de acces direct la memorie:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

SEP0 activare/dezactivare transfer


sens transfer
SEP1
mod transfer
SEP2
activare/dezactivare intrerupere
SEP3
intrerupere programabila
DMA liber
intrerupere externa
terminare transfer bloc
Registrul de comenzi pentru iniţializarea modulului de acces direct la memorie, ITDMA,
adresabil cu adresa Baza+7, nu este un registru propriu-zis ci este format din bistabilii
ce aparţin registrului de comenzi/stări prezentat anterior.
Prin executarea unei instrucţiuni OUT Baza+7 (conţinutul registrului RA fiind
indiferent), au loc următoarele acţiuni:

Bit 6 ( DMA liber )  0


Bit 7 (terminare transfer bloc )  1
Bit 10 (int rerupere programabila )  1
Programul de I/E ce asigură iniţierea şi controlul transferului unui bloc de date.
Pentru exemplificare vom presupune că la modulul de acces direct la memorie
este conectat un singur echipament periferic de intrare care necesită un singur registru
de comenzi/stări CSEP1.
Adresa acestui registru este BAZA+1. Registrele CSEP0 şi CSEP2:3 sunt
neutilizate deocamdată.
Exemplu de rutină pentru transferul unui bloc de date prin DMA:
;Definirea constantelor
BAZA EQU 0D0H ;adresa de bază a registrelor DMA
BIT1 EQU 4000H ;SEP1
BIT6 EQU 200H ;DMA liber
BIT7 EQU 100H ;Terminare transfer
CCDMA EQU 0234H ;DMA ocupat, dezactivare întreruperi,
;întrerupere programabilă inactivă
;transfer prin furt de ciclu
;sens transfer=scriere, activare transfer
CCEP EQU --H ;se defineşte în funcţie de EP conectat
LNG EQU --H ;lungimea blocului de transferat
ADR DW --H ;zona de memorie implicată în transfer
;Operaţia 1 - test dacă transferul poate fi iniţiat
RDMA:
AST: IN BAZA+4 ;citeşte cuvântul de stare al DMA
TEST RA,BIT1 ;testează CSDMA1
JNZ ERR ;Echipamentul periferic neoperaţional, eroare
TEST RA,BIT6 ;DMA ocupat, aşteaptă
JNZ AST
;Operaţiile 2 şi 3 - transferul poate fi iniţiat şi deci unitatea centrală de prelucrare va
transmite către modulul de acces direct la memorie:
;-cuvântul de comandă
;-adresa de început a zonei implicate în transfer
;-lungimea zonei implicate în transfer
MOV RA,CCDMA ;cuvântul de comandă transfer prin DMA
OUT BAZA+4 ;se transmite în registrul CSDMA
MOV RA,ADR ;adresa zonei implicate în transfer
OUT BAZA+5 ;se transmite în AMDMA
MOV RA,LNG ;lungimea zonei implicate în transfer
OUT BAZA+6 ;se transmite în registrul RCDMA
;Operaţiile 4 şi 5 - iniţiază echipamentul periferic şi start transfer
MOV RA,CCEP ;cuvânt comandă transfer pt. EP si start transfer STT:
OUT BAZA+1 ;transferă în CSEP1 şi start transfer
;Operaţia 6 - transferul propriu-zis al blocului de date are loc
;fară intervenţia unităţii centrale de prelucrare pe baza unui dialog între EP,
;DMA si memorie prin furt de ciclu
Operaţiile 7 şi 8 -test terminare transfer
TERMT: IN BAZA+4 ;citeşte cuvântul de stare al DMA
TEST RA,BIT7 ;transfer bloc terminat?
JZ GATA ;da, gata transfer
TEST RA,BIT1 ;test echipament periferic operaţional ?
JZ TERMT ;da, aşteaptă terminare transfer
ERR: . ;rutina de tratare a erorilor
GATA: IN BAZA+1 ;citeşte starea EP1, analizează
. ;condiţiile de terminare transfer
;Dacă transferul a avut loc corect, se iniţializează DMA si EP
;pentru un nou transfer, dacă este cazul
OUT BAZA+7 ;comandă de iniţializare
;Echipamentul periferic poate fi iniţializat prin registrul ITDMA sau prin CSEP1
Arhitectura modulului de acces direct la memorie (DMA)
După efectuarea instrucţiunii cu eticheta STT (start transfer) efectuarea
transferului poate fi rezumat astfel:
• EP recepţionează comanda de start transfer şi când devine capabil să trimită sau
să primească un cuvânt trimite spre modulul de acces direct la memorie cerere
de transfer;
• DMA preia cererea din partea EP şi transmite o cerere de acces memorie către
unitatea de comandă a memoriei (cmdma sau smdma);
• Unitatea de comandă a memoriei primeşte cererea şi în momentul în care
memoria devine disponibilă efectuează operaţia cerută şi trimite un răspuns la
DMA (atmdma);
• DMA primeşte acest răspuns şi-l transmite mai departe la EP (atie), dacă este
cazul, şi actualizează AMDMA şi RCDMA ;
• EP primeşte acest răspuns şi lansează o nouă cerere de transfer ;
la terminarea transferului întregului bloc, EP este dezactivat prin executarea instrucţiunii
OUT Baza+7 sau prin trimiterea unei comenzi la adresa Baza+1.
___
ctie

_______ _______
cmdma smdma

________
atmdma

___
atie

Terminarea unui ciclu de transfer

Memoria sau EP preia datele

Pentru definitivarea unităţii de comandă trebuie rezolvate următoarele probleme:


• proiectarea unităţii de comandă a memoriei ;
• modificarea secvenţei de comandă a fazelor de citire interpretare şi execuţie a
instrucţiunilor, conform cu noul algoritm de acces la memorie ;
• proiectarea unităţii de comandă asociată modulului de acces direct la memorie.

Proiectarea unităţii de comandă a memoriei (UCM)


Unitatea de comandă a memoriei trebuie proiectată având în vedere funcţiile pe
care trebuie să le execute:
• evitarea interferenţelor la memorie prin excluderea mutuală a operaţiilor cu
memoria controlate de DMA şi UCP;
• rezolvarea concurenţei la memorie acordând prioritate cererilor DMA;
• asigurarea transferului în modurile "furt de ciclu " sau "rafală" cerut de DMA;
• realizarea dialogului cu UCP şi DMA conform cu diagrama de timp din Fig 7.15;
• executarea operaţiilor efective de citire/scriere a memoriei.
actAM - selecţie adresă, semnal de selecţie pentru multiplexorul de adrese
=0 selectează AMDMA
=1 selectează AM

actM - activare date de ieşire


=0 activează datele pe MAG
=1 nu activează datele pe MAG
Proiectarea unităţii de comandă a modulului de acces direct la memorie (UCDMA)
Principalele funcţii pe care trebuie să le execute UCDMA:
• citirea/scrierea în orice moment a registrelor de I/E asociate DMA;
• generarea semnalelor de comandă pentru citirea/scrierea registrelor de I/E
asociate EP;
• actualizarea permanentă a stării DMA;
• controlul dialogului între EP şi memorie;
• efectuarea transferului unui bloc de date, independent de UCP;
• interacţiunea cu UCP la iniţierea/terminarea transferului unui bloc de date
Indiferent de modul de transfer programat, modul de lucru va fi trecut în "mod furt de
ciclu" la sfârşitul transferului de bloc sau dacă s-a cerut o întrerupere externă.
Cererea de întrerupere cerint este activată dacă:
• s-a specificat lucrul în întreruperi (CSDMA11=0) şi a venit o cerere de
întrerupere externă intex, sau
• DMA nu este ocupat cu un transfer de date şi s-a cerut o întrerupere
programabilă (CSDMA10 =0 şi CSDMA6=0), sau
• DMA este în curs de transfer bloc şi contorul de cuvinte transferate a ajuns la
zero, sau
unul dintre echipamente periferice conectate prin DMA şi-a schimbat starea din
operaţional în neoperaţional */
7.9 Interfaţa serială standard
=> a apărut necesitatea unei standardizări şi unificări a echipamentelor de
transmisie a datelor.
Organizaţii internaţionale:
-CCITT (Comitetul Consultativ Internaţional pentru Telefonie şi Telegrafie);
-ISO (Organizaţia Internaţională de Standardizare); etc…
 recomandări referitoare la unificarea echipamentelor.
Transferul de date între echipamentul periferic şi calculator:
-paralel (echipamentele periferice descrise anterior);
-serial → asigură o fiabilitate mare transferului (în special la distanţă) dar are
dezavantajul că necesită interfeţe mai complexe şi limitează viteza de transfer
Norme de transmisie serială a informaţiei
Între două dispozitive cuplate printr-o legătură serială asincronă care lucrează în
"full duplex" (recepţionează şi transmite date simultan) ar fi suficiente trei linii şi anume:
- linie de transmisie date;
- linie de recepţie date;
- linie de referinţă (masă electrică).
Pentru dialog (transmiterea de comenzi şi stări) mai sunt necesare şi alte linii de
interconectare.
Principalele semnale ale interfeţei EIA şi CCITT V.24 sunt prezentate în tabelul:

Nr. pin Semnale EIA Semnale Descriere


RS-232-C CCITT V.24

1 AA 101 GND-Nul (împământare)


7 AB 102 GND-Semnal referinţă/Retur comun (masă electrică)

2 BA 103 TxD(Transmiter Data)-Transmisie date


3 BB 104 RxD(Receiver Data)-Recepţionare date

4 CA 105 RTS(Request To Send) - Cerere pentru emisie


5 CB 106 CTS(Clear To Send) - Gata de emisie

6 CC 107 DSR(Data Set Ready) - Conectat la linie


20 CD 108 DTR(Data Terminal Ready) -Conectează la alinie

22 CE 125 RI(Ring Indicator)


8 CF 109 RLSD(Receive Line Signal Detector)
21 CG 110 SQD(Signal Quality Detector)
23 CH 111 DSRS-DTE(Data Signal Rate Selector)
25 CI 112 DSRS-DCE(Data Signal Rate Selector)
24 DA 113 DTE transmiterea semnalului de timing (DTE)
15 DB 114 DTE transmiterea semnalului de timing (DCE)
17 DD 115 DTE recepţionarea semnalului de timing (DTE)

14 SBA 118 STD Secondary Transmitted Data


16 SBB 119 SRD Secondary Received Data

19 SCA 120 RTSS (pe calea secundară)


13 SCB 121 CTSS
12 SCF 122 RLSDS

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)

RTS(105) 4 5 CTS(106) Semnale de


CTS(106) 5 4 RTS(105) comanda/stare

DSR(107) 6 20 DTR(108)
DTR(108) 20 6 DSR(107)

DISP 1 DISP 2

Semnalele de comandă/stare servesc numai pentru stabilirea legăturii între dispozitive.


Transmiterea datelor se face serial, bit cu bit, începând cu bitul cel mai puţin
semnificativ. Un bit de date, din cuvântul ce se transmite, se conectează la linia de
transmisie TxD pentru un timp determinat de rata de transfer. Rata de transfer se
măsoară în biţi/secundă sau bauds. S-au standardizat următoarele rate de transfer: 75;
110; 150; 300; 600; 1200; 2400; 4800; 9600; 19200; 38400 bauds, ….
Datele se transferă serial asincron => pentru sincronizare este necesar ca informaţia de
date să fie precedată de un bit de start = "0" şi urmată de un bit, sau doi, de stop = "1".
Structura logică a unui cuvânt ce se transmite între două dispozitive seriale :

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 start

preluare bit 1
Proiectarea unei interfeţe seriale pentru calculatorul didactic

Caracteristicile interfeţei seriale:


• Transmisia/recepţia cuvintelor prin intermediul interfeţei seriale se face utilizând
modalitatea de transfer programat;
• Rata de transfer este funcţie de semnalul de tact aplicat interfeţei. Frecvenţa
semnalului de tact va fi de 16 ori mai mare decât frecvenţa de transfer, pentru a
asigura o bună funcţionare a automatului de recepţie;
• Interfaţa lucrează în mod "full duplex" (poate primi şi transmite cuvinte simultan);
• Generează semnalele de dialog conform standardului de transmisie serială
CCITT V.24;
• Transferă cuvinte de lungime egală cu 5, 6, 7, 8 biţi;
• Analizează/generează unul sau doi biţi de stop;
• Analizează/generează paritate pară sau impară;
Interfaţa detectează erorile de paritate, depăşire de ritm şi biţi de stop incorecţi .
DSR DTR CTS RTS

RxD TxD
Unitate
RRS RTRS
Comanda

SIN
RDT
RDR

CSSIN

AIE
MAG16

Primitivele funcţionale ale interfeţei seriale SIN sunt:

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.

DTR- (Data terminal ready) - conectează la linie : scris/citit de unitatea centrală de


prelucrare
=0 deconectează echipamentul (interfaţa) de la linia de transmsie
=1 conectează echipamentul de transmisie la linie, indiferent de stările
celorlalte semnale de legătură.
RTS - (Request to send) - cerere pentru emisie: scris/citit de unitatea centrală de
prelucrare
=0 trece echipamentul de transmisie în stare de ne-emisie
=1 comandă echipamentul de transmisie date, şi îl menţine, în stare de
emisie date.
L2,L1 - lungimea cuvântului : scris/citit de unitatea centrală de prelucrare
= 00 - lungimea cuvântului este de 5 biţi
= 01 - " " " de 6 biţi
= 10 - " " " de 7 biţi
= 11 - " " " de 8 biţi.

actint - activare / dezactivare întrerupere: scris/citit de unitatea centrală de prelucrare


=0 permite lansarea unei cereri întreruperi spre unitatea centrală de
prelucrare la termirea recepţionării/transmiterii unui cuvânt sau schimbarea stării
de operaţional (conectat la linie)
= 1 nu permite lansarea unei cereri de întrerupere spre unitatea centrală de
prelucrare .
resintsin - reset întrerupere de la interfaţa serială (ieşire): scris de unitatea centrală
de prelucrare
=0 nu şterge, eventual cererea de întrerupere de la sin
=1 şterge (se anulează) cererea de întrerupere de la secţiunea de transmisie
a interfeţei seriale.
reseror - reset eroare este scris de unitatea centrală de prelucrare
=0 nu are nici o acţiune
=1 sterge erorile apărute în procesul de recepţie/transmisie datorate: parităţii
(PE), depăşirii ritmului de recepţie (OE) sau a bitului de stop (FE).
TxRDY - transmitter ready - transmisie gata este înscris de UCSI şi citit de unitatea
centrală de prelucrare
=0 interfaţa are un cuvânt ce trebuie transmis şi nu mai poate primi un nou
cuvânt de la unitatea centrală de prelucrare
=1 interfaţa poate primi, pentru transmisie, un nou cuvânt de la unitatea
centrală de prelucrare .
RxRDY - receiver ready - recepţie gata este înscris de UCSI de recepţie al interfeţei
şi citit de unitatea centrală de prelucrare
=0 interfaţa nu a recepţionat un cuvânt, sau este în curs de receptionare,
unitatea centrală de prelucrare nu poate prelua un cuvânt de date de la interfaţă
deoarece acesta nu este disponibil.
=1 interfaţa a recepţionat un cuvânt de date şi unitatea centrală de prelucrare
poate să-l preia. Preluarea se face cu ajutorul unei instrucţiuni în port. Odată cu
preluarea datelor se dezactivează (şterge), implicit, şi indicatorul RxRDY.
EP - even/odd parity - tip paritate scris/citit de unitatea centrală de prelucrare
= 0 paritate impară
= 1 paritate pară.
PE - parity error - eroare de paritate scris de interfaţă (paritatea de recepţie) şi citit de
unitatea centrală de prelucrare
= 0 nu a existat eroare de paritate
=1 indică faptul că a fost detectată o eroare de paritate în procesul de
recepţie date.
OE - overrun error - eroare de ritm scris de interfaţa (partea de recepţie) şi citit de
unitatea centrală de prelucrare
=0 nu a existat o eroare de ritm între unitatea centrală de prelucrare şi
dispozitivul de recepţie
=1 a fost detectată o eroare de ritm. Unitatea centrală de prelucrăre nu a
preluat cuvântul recepţionat şi între timp s-a mai recepţionat un nou cuvânt.
FE - Framing error - eroare datorată bitului de stop înscris de interfaţă (partea de
recepţie) şi citit de unitatea centrală de prelucrare
= 0 nu a fost o eroare de bit de stop
=1 a fost detectată o eroare în cursul operaţiei de recepţie datorată absenţei
bitului sau biţilor de stop.
STP - bit de stop : scris/citit de unitatea centrală de prelucrare
=0 se lucrează cu un singur bit de stop
=1 se lucrează cu doi biţi de stop.
DSR - data set ready - echipament conectat la linie, citit de unitatea centrală de
prelucrare şi înscris de terminalul serial cu care este interconectată interfaţa
= 0 indică faptul că echipamentul de transmisie/recepţie cu care este
interconectată interfaţa nu este gata de funcţionare
= 1 echipamentul cu care este interconectată interfaţa este gata de
funcţionare (conectat la linie).
Structura cuvântului de date este prezentată în fig. 7.26.
0 7 8 15

Presupunând că interfeţei seriale îi sunt asociate porturile de I/E:


0F6H - adresa porturilor de intrare/ieşire date
0F7H - adresa porturilor de intrare/ieşire stări respectiv comenzi se pot elabora rutinele
CI pentru recepţionarea unui cuvânt şi CO pentru transmisia unui cuvânt.
;Rutina de citire caracter de la consolă cuplată pe interfaţă serială standard
CI-CONSOLE INPUT
;Intrări: -
;Ieşiri: în registrul RA cuvântul citit
;Afectează: registrul RA şi indicatorii de condiţii
;Funcţie: citeşte un cuvânt de la interfaţa serială standard în modul transfer
programat cu citirea ciclică a stării.
CI:
IN STSIN ;citeşte starea interfaţă
TEST RA,8000H ;analizează DSR (data set ready)
JZ ERRCI ;dispozitiv neconectat la linie eroare
TEST RA,200H ;analizează RxRDY
JZ CI ;nu a recepţionat caracter aşteaptă
TEST RA,3800H ;a recepţionat caracter şi se analizează
;dacă este corect (FE,OE,PE=0?)
JNZ ERRCI
IN DATSIN ;preia caracterul
RET
ERRCI: ;tratează eventuala eroare
;Rutina de transmisie cuvânt la interfaţa serială standard
;CO-CONSOLE OUTPUT
;Intrări: registrul RB conţine cuvântul ce trebuie transmis
;Ieşiri: -
;Afectează: registrul RA şi indicatorii de condiţii
;Funcţie: transmite cuvântul din registrul RB la interfaţă standard în modul de lucru
transfer programat cu citirea ciclică a stării
CO:
IN STSIN ; citeşte starea
TEST RA,8000H ; se analizează DSR (data set ready)
JZ ERRCO ; dispozitiv neconectat la linie, eroare
TEST RA,100H ; se analizează TxRDY
JZ CO ; dacă are cuvânt de transmis, aşteaptă
MOV RA,RB ;
OUT DATSIN ; transmite cuvântul spre interfaţă
RET
ERRCO: . ; tratează eventuala eroare
__
cie
__
sie GND 17 GND
17
Unitatea ____ Echipamentul
TxD 2 3
centrală de cerint
RxD periferic
prelucrare a RxD 3 2 TxD
MAG16
calculatorului
didactic
DTR 20 6 DSR
AIE8

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

8.1. Modalităţi de realizare a sistemelor de întreruperi.

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;

Specificarea sistemului de întreruperi pentru calculatorul didactic


După sursa de generare se vor considera următoarele clase de întreruperi:
• întreruperi interne, generate la nivelul unităţii centrale de prelucrare:
• întrerupere de depăşire în UAL, care se generează imediat după execuţia
unei instrucţiuni ce a poziţionat în "1" indicatorul de depaşire D;
• întreruperi prin program, care se generează imediat după execuţia unei
instrucţiuni INT, ce va fi inclusă în setul de instrucţiuni al calculatorului
didactic.
Obs: Trebuie notat că întreruperile interne nu pot fi mascate (inhibate).
• întrerupere externă nemascabilă, generată din exteriorul unităţii centrale de
prelucrare şi care nu poate fi mascată. Această întrerupere este utilă pentru
evenimente ce trebuie tratate imediat, cum ar fi scăderea tensiunii de alimentare
sub o anumită limită; întreruperea externă nemascabilă este transmisă unităţii
centrale de prelucrare printr-o linie separată cinm.
• întreruperi externe mascabile, generate de către subsistemul de I/E. Se vor
prevedea 8 cereri de întrerupere externe mascabile. Existenţa a cel puţin o
întrerupere externă mascabilă anunţă unitatea centrală de prelucrare printr-o linie
separată cintr.
Cererile de întrerupere sunt ordonate după priorităţi astfel:
• întreruperile interne (prioritatea cea mai mare);
• întreruperea externă nemascabilă;
• întreruperile externe mascabile.
Întreruperile externe mascabile sunt ordonate pe 8 niveluri de priorităţi:
cerint0 , cerint1 ,......, cerint7
în ordinea descrescătoare a priorităţilor (cerint0 are prioritatea cea mai mare iar cerint7
cea mai mică).
Sistemul de întreruperi pentru calculatorul didactic este de tip vectorizat. Se
consideră un vector de 12 celule capcană, pentru fiecare cerere de întrerupere câte o
celulă. Aceste celule sunt localizate la adresele 0:11. În fiecare celulă se înscrie adresa
rutinei de tratare corespunzătoare nivelului respectiv, conform tabelului:

B Nivel 7 Întreruperi externe mascabile


A Nivel 6
9 Nivel 5
8 Nivel 4
7 Nivel 3
6 Nivel 2
5 Nivel 1
4 Nivel 0

3 Căderea tensiunii de alimentare Întrerupere externă nemascabilă

2 Întrerupere de depăşire generată de unitatea


aritmetică şi logică

1 Întrerupere generată prin program Întreruperi interne

0 Neutilizată

Pentru a avea posibilitatea activării sau dezactivării (mascării) întreruperilor pe linia


cintr se va prevedea un indicator I în registrul de indicatori IND care va specifica starea
de activare/dezactivare a întreruperilor.
De asemenea, se va extinde setul de instrucţiuni maşină a calculatorului didactic
cu instrucţiunile:
EI - activează sistemul de întreruperi, prin trecerea în 1 a indicatorului I;
DI - dezactivează sistemul de întreruperi, prin trecerea în 0 a indicatorului I;
INT - generează, prin program, o cerere de întrerupere.
Modificarea secvenţei de comandă a unităţii centrale
Pentru a actualiza secvenţa de control ce realizează citirea interpretarea
instrucţiunilor în vederea introducerii sistemului de întreruperi trebuie avute în vedere
următoarele aspecte:
• completarea primitivelor funcţionale ale unităţii centrale de prelucrare;
• descrierea secvenţei de luare în considerare, interpretare şi preluare a cererilor
de întrerupere;
• codificarea noilor instrucţiuni introduse;
• descrierea secvenţei de citire/interpretare şi execuţie a noilor instrucţiuni
introduse .
Aşa cum s-a menţionat, pentru a permite activarea/dezactivarea întreruperilor
externe mascabile, primitivele funcţionale ale calculatorului didactic se completează cu
un nou indicator I şi cu instrucţiuni de poziţionare explicită a acestuia:
I=0 întreruperile sosite pe linia cintr sunt inhibate;
I=1 întreruperile sosite pe linia cintr sunt luate în considerare de unitatea centrală de
prelucrare.
Unitatea de comandă a calculatorului didactic va fi prevăzută cu bistabili necesari
pentru memorarea cererilor de întrerupere:
intr - întrerupere externă mascabilă, este scris de sistemul de întreruperi şi
interpretat de unitatea centrală de prelucrare.
= 0 nu există cerere de întrerupere de la sistemul de întreruperi,
= 1 există cerere de întrerupere de la sistemul de întreruperi, cintr = 1.
ai - achitare întrerupere, este scris de unitatea centrală de prelucrare ca
recunoaştere a unei cereri de întrerupere externă mascabilă. Este utilizat de unitatea de
comandă a sistemului de întreruperi.
= 0 unitatea centrală de prelucrare nu a recunoscut sau a terminat luarea în
considerare a unei cereri de întrerupere,
= 1 unitatea centrală de prelucrare a recunoscut o cerere de întrerupere.
inm - întrerupere externă nemascabilă - este scris de cinm şi interpretat de unitatea
centrală de prelucrare.
= 0 nu există o tranziţie 0 - 1 a liniei cinm,
= 1 există o cerere externă nemascabilă, o tranziţie 0 - 1 a liniei cinm.
Obs: Bistabilul inm trece în 1 la tranziţiile din 0 în 1 ale cererii cinm (cererea este activă
pe front).
id -întrerupere de depăşire în unitatea aritmetică şi logică, este scris şi interpretata
de unitatea centrală de prelucrare,
= 0 nu există o tranziţie 0 - 1 a indicatorului D,
= 1 există o cerere de întrerupere datorată depăşirii în unitatea aritmetică şi
logică, indicatorul D a avut o tranziţie din 0 în 1 .
ip -întrerupere prin program, este scris de unitatea centrală ca urmare a execuţiei
unei instrucţiuni INT, interpretat de unitatea centrală,
= 0 nu s-a executat o instrucţiune INT,
= 1 există o cerere de întrerupere datorate execuţiei instrucţiunii INT.
Modul de analiză al cererilor de întrerupere de către unitatea centrală - aspecte:
• prioritatea între întreruperile interne, întreruperea externă nemascabilă inm şi
întreruperile externe mascabile intr este stabilită de ordinea de testare;
• întreruperile interne şi externă nemascabilă nu pot fi dezactivate prin execuţia
unei instrucţiuni DI (I - 0);
• la recunoaşterea unei cereri de întrerupere pe intr, unitatea centrală trimite spre
exterior un semnal de achitare întrerupere, ai, pentru a semnala sistemului de
întrerupere că s-a luat în considerare cererea de întrerupere şi se aşteaptă codul
de identificare al cererii cu prioritatea cea mai mare (adresa celulei capcană);
• pentru întreruperile interne şi externă nemascabilă sistemul de întreruperi
asigură adresa celulei capcană corespunzătoare. Unitatea centrală nu mai
trebuie să trimită semnal de achitare;
• la recunoaşterea unei cereri de întrerupere, unitatea centrală de prelucrare :
• salvează indicatorii de condiţii în stivă ;
• dezactivează întreruperile externe mascabile (I - 0) ;
• salvează în stivă adresa de reîntoarcere în programul întrerupt ;
• transferă controlul rutinei de tratare executând o secvenţă similară cu JMP
indirect prin celula capcană corespunzătoare.
• în rutina de tratare, cererile de întrerupere externe mascabile vor putea fi luate
în considerare numai după execuţia unei instrucţiuni EI;
• trebuie avut în vedere că o rutină de tratare a unei întreruperi interne să nu
conţină o instrucţiune care generează o nouă întrerupere internă, pentru a evita
depăşirea stivei sistemului şi distrugerea programului;
• la terminarea tratării întreruperii, revenirea în programul întrerupt se face prin
executarea unei instrucţiuni IRET care reface indicatorii (deci reactivează şi
sistemul de întreruperi) şi apoi revine în programul întrerupt;
• în rutina de tratare a unei întreruperi cauzată de depăşire în unitatea aritmetică şi
logică, trebuie anulat bistabilul D, pentru a permite generarea unor întreruperi
ulterioare datorită depăşirii în unitatea aritmetică şi logică.

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

Citeste, interpreteaza si executa instructiunea urmatoare


2.1 ai  1;
→ (91)
/* la pasul 91 începe secvenţa de tratare de către unitatea centrală de prelucrare a
întreruperilor externe şi interne */
2.2 AM  CP

(la fel ca până acum)
(nu s-au cosiderat instrucţiunile nou introduse)
91. T1  BUSFN (RG;DCD(ADRIS))
92. AM  ADD (T1;0FFFFH;0)
T1  ADD (T1;0FFFFH;0)
/* adresa vârfului stivei actualizată se aduce în T1 şi AM
93. M * DCD(AM)  IND
/* se salvează indicatorii în stivă */
94. RG * DCD (ADRIS)  ADD (T1;0FFFFH;0);
AM  ADD (T1;0FFFFH;0);
I0
/* se actualizează IS - indicatorul vârfului stivei */
/* se dezactivează sistemul de întreruperi I <- 0 în mod implicit */
95. M * DCD(AM)  CP ; actadri = 1
/* salvează adresa de revenire din subrutina de tratare a întreruperii */
Mnemonică Cod Funcţii

EI 10001111 Activare întreruperi externe mascabile; I <- 1

DI 10001110 Dezactivare întreruperi externe mascabile; I <- 0

INT 10001101 Salvează starea; I<-0 şi transferă controlul


indirect prin locaţia 2
Pentru a exemplifica modul de interpretare de către unitatea centrală a diferitelor tipuri
de întrerupere, în Fig. 8.2 se prezintă un exemplu de tratare, cvasisimultană, a mai
multor cereri. Să presupunem că după ce s-a activat sistemul de întreruperi (ca urmare
a execuţiei instrucţiunii EI), în urma unei instrucţiuni ADD se poziţionează în 0
indicatorul de depăşire. În timpul execuţiei instrucţiunii ADD sosesc şi cereri pe liniile
cintr şi cinm. De remarcat faptul că rutinele de tratare a întreruperilor de depăşire şi
externă nemascabilă, dezactivează sistemul de întreruperi astfel că cererile de
întrerupere mascabile sunt recunoscute numai dacă în cadrul lor se activează sistemul
de întreruperi. Altfel sunt luate în considerare numai după terminarea execuţiei
acestora.
Program principal

EI

cintr,cinm ADD (ca urmare a executiei instructiunii ADD se pozitioneaza indicatorul de depasire D)

Salveaza IND Secventa UCP


I0
Salveaza CP

Initiaza tratare
intrerupere id
Recunoastere intrerupere inm.

Salveaza IND I=0


I0
Rutina tratare id Salveaza CP

Rutina tratare
inm
Reface CP
IRET
Reface IND

Reface CP
Recunoastere intr. I=1 IRET
Reface IND
Salveaza IND
I0
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 MAG16 ____
cintr0
didactic Sistemul de ip
întreruperi _____ Logica
AIE8 cerint7 de id
RCI prioritati RICS ADRI
inm
____ PRI
cintr7
ai

ip

id

inm RMI actari

actadri
MAG
cinm cinm

Primitivele funcţionale ale sistemului de întreruperi:


RMI - registrul de mascare întreruperi - este scris/citit de unitatea centrală de
prelucrare. Este utilizat pentru mascarea individuală sau în bloc a cererilor externe
mascabile.
RMIi = 1 va inhiba cererea de întrerupere de pe linia cerinti corespunzătoare.
RCI - registrul de cereri întreruperi - este scris de cererile de întrerupere de la
echipamentele periferice prin liniile cerint0, ...cerint7. Pentru a sesiza numai sosirea
unei cereri, nu şi timpul cât ea este activă, bistabilii individuali din acest registru sunt
poziţionaţi pe frontul crescător al cererii. Bistabilii din acest registru sunt independenţi,
adică, sunt manipulaţi individual de către UCSI şi cererile de întrerupere externe
mascabile cerint0, ...cerint7.
RCI are rolul de a păstra cererile de întrerupere externe până când vor fi luate în
considerare de unitatea centrală de prelucrare
RCIi = 0 - echipamentul extern cuplat pe nivelul i nu a lansat o cerere de
întrerupere;
RCIi = 1 - echipamentul extern cuplat pe nivelul i a lansat o cerere de
întrerupere .
PRI - unitate logică combinaţională - stabileşte cererea, nemascată, cu prioritatea cea
mai mare din registrul RCI. Este utilizată şi pentru a stabili dacă cererea, cu prioritatea
cea mai mare din RCI, poate întrerupe eventuala cerere în curs de servire indicată de
RICS.
În caz afirmativ, UCSI va lansa o cerere de întrerupere spre unitatea centrală de
prelucrare, pe linia cintr, şi o va transfera din RCI în RICS, pentru servire. Transferând-o
în RICS o şterge din RCI.
RICS - registrul de cereri în curs de servire - scris de UCSI şi citit de unitatea centrală
de prelucrare. Este utilizat pentru a păstra cererile de întrerupere a căror servire a fost
iniţiată dar neterminată. Fiecărei cereri îi corespunde un bit în RICS. Există posibilitatea
că, într-un caz extrem, toţi biţii lui RICS să fie în "1".
ADRI - unitate logică combinaţională - stabileşte adresa celulei capcană asociată
cererii a cărei tratare va începe.
UCSI - unitatea de comandă a sistemului de întreruperi.
Mecanismul general pentru generarea unei întreruperi cintr spre unitatea centrală de
prelucrare pe baza cererilor individuale cerint0,...,cerint7 este următorul:
• cererile de întrerupere individuale cerint0, ..., cerint7 de la echipamentele externe
se memorează în RCI pe frontul crescător al acestora;
• sistemul de întreruperi evaluează priorităţile acestor cereri, alege cererea cu
prioritatea cea mai mare dintre cele nemascate şi generează o cerere pe linia
cintr spre unitatea centrală de prelucrare, numai dacă prioritatea acesteia este
mai mare decât a cererilor în curs de servire, indicate de RICS;
• unitatea centrală de prelucrare va răspunde la cererea de întrerupere cintr cu o
confirmare a luării ei în considerare prin activarea semnalului ai (achitare
întrerupere);
• primind ai de la unitatea centrală de prelucrare, UCSI (unitatea de comandă a
sistemului de întreruperi) va trece în 1 bitul din RICS corespunzător cererii luate
în considerare şi o va şterge din RCI;
• atât timp cât actadri este activ, şi va activa pe MAG adresa celulei capcană
corespunzătoare pe baza careia se va ajunge la rutina de tratare a întreruperii.
Pentru a detalia implementarea sistemului de întreruperi trebuie tratate următoarele
aspecte:
• descrierea unităţii logice combinaţionale PRI;
• descrierea unităţii logice combinaţionale ADRI;
• descrierea UCSI.
Descrierea unităţii logice combinaţionale PRI
Această unitate logică combinaţională este formată din două secţiuni şi anume:
• secţiunea de alegere a cererii, nemascate din RCI, cu prioritatea cea mai mare
(PRIA);
• secţiunea de generare a unei cereri cintr spre unitatea centrală de prelucrare
(CINTR).
Programul AHPL de descriere a primei secţiuni (PRIA) este prezentat în
continuare conform cu organigrama
Organigrama de alegere a cererii cu prioritatea cea mai mare – PRIA

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:
\

S-ar putea să vă placă și