Documente Academic
Documente Profesional
Documente Cultură
1. Reprezentarea informațiilor în MO
Toate informațiile (date/instrucțiuni) se reprezintă/înscriu în MO numai sub formă
codificată numeric. Dispozitivele tehnice folosibile pentru realizarea MO pot avea numai
două stări stabile de funcționare, care se pun în corespondență cu cifrele bazei doi {0,1}.
De ex., exagerând puțin, un condensator electric este/nu este încărcat cu sarcină electrică,
un corp este magnetizat nord/sud, un tranzistor este saturat/blocat, “pits” (gropi) și
“lands” (terenuri) pe suprafață unui CD [1]. Memorarea și prelucrarea informațiilor se
realizează în cvasitotalitatea cazurilor prin grupe de câte 8 biți (octet/byte-B).
Forma/imaginea în MO a codificării numerice a valorii atribuite unei variabile se numește
forma internă a reprezentării acesteia. Pentru afișare, forma internă (numărul în baza
doi) se convertește în baza 16 (hexazecimală). Se obține astfel forma externă a
reprezentării interne. Aceasta este numai o convenție pentru afișare, deoarece în MO
numărul se înscrie întotdeauna în baza doi.
Forma sub care se codifică informațiile, după reprezentarea în baza doi, este
determinată de tipul informației pe care numărul respectiv o reprezintă. De ex. numerele
întregi/reale se codifică după reguli diferite iar pentru caractere/simboluri grafice se
definesc coduri numerice. Interpretarea valorilor înscrise în MO este determinată
numai de precizările/cerințele existente în programul care prelucrează respectivele
informații. Folosirea corectă a informațiilor este determinată de respectarea unei
corespondențe riguroase între conținutul unei locații a MO și modul în care acesta este
interpretat de către program. Ignorarea acestei cerințe determină compromiterea lucrării
datorită obținerii unor rezultate eronate.
a) b)
Fig.1. Alocare spaţiu în MO pentru tipul de date „int”, a – alocare 2 octeţi în cazul
BorlandC, b – alocare 4 octeţi în cazul Eclipse (MinGW)
0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0
0 1 2 C
Fig.3
Folosind puterile bazei 2, numărul 300 se scrie astfel:
300 =1x28 + 1x25+ 1x23+ 1x22 = 1x162 + 2x161 + 12x160
Deci, folosind o locație din MO de 2o forma internă și respectiv externă a
numărului 300 sunt:
(300)10 = (0000 0001 0010 1100)2 = (012C)16
Obs. Succesiunea de cifre (10) reprezintă baza de numerație respectiv:
(10)2 = 2 pentru baza 2 ; (10)10 = 10 pentru baza 10 și (10)16 = 16 pentru baza 16
Sau, folosind cifrele corespunzătoare pentru reprezentarea fiecărei baze de
numerație, aceeași reprezentare se poate scrie:
(300)10 = (0000 0001 0010 1100)2 = (012C)16
Reprezentarea aceluiași număr într-o locație a MO de 32biţi/4bytes are forma:
(300)10 = (00000000 00000000 00000001 00101100)2 = (00 00 01 2C)16
(1)
unde n este numărul de biți folosiți pentru reprezentare sau dimensiunea locației MO. În
exemplul considerat n=16.
Regulă directă. Codul invers se obține prin modificarea, de la stânga spre dreapta, a
tuturor cifrelor binare astfel: 0→1 respectiv 1→0.
Ex.3. Fie numerele 300 și -300
Pentru numărul pozitiv 300 se folosește codul direct.
X=Xd = (0000 0001 0010 1100)2 = (012C)16
Pentru numărul negativ -300 se folosește codul invers, determinat conform regulii
anterioare. Deci:
Xi = (1111 1110 1101 0011)2 = (FED3)16
Verificare. Conform lui (1) se determină:
Xi = 216 - |-300|-1 = 65536 -300-1=(65235)10 sau, folosind baza 16:
Xi = 1 0000 – (012C)16 -1 = (FED3)16
Obs. Codul invers al unui număr negativ se recunoaște și prin acea că prima cifra a
reprezentării externe (deci în baza 16) este strict mai mare ca 7 sau, altfel spus, este cel
puțin egală cu 8.
Codul complementar față de doi sau codul complementar (Xc) se definește cu
relația:
𝑛
𝑋𝑐 = 𝑓(𝑥) = {𝑋𝑑 , 𝑥 < 0 2 − |𝑋|, 𝑥≥0
(2)
unde n este numărul de biți folosiți pentru reprezentare sau dimensiunea locației MO. În
exemplul considerat n=16.
Regula directă. Codul complementar se obține prin modificarea cifrelor binare, de la
stânga spre dreapta, până la ultimul bit care are valoarea =1, astfel: 0→1 respectiv 1→0.
Ultimul bit cu valoare =1 (indiferent de poziția sa în cadrul reprezentării) își păstrează
valoarea (rămâne nemodificat). Biții aflați la dreapta ultimei cifre 1, care sunt toți egali cu
zero, rămân neschimbați. Deci, spre deosebire de codul invers, ultimul bit cu valoarea
unu (cel mai din dreapta), rămâne neschimbat iar zerourile din dreapta acestuia își
păstrează valoarea.
Domeniul reprezentabil
Deoarece pentru reprezentarea valorii numerelor întregi cu semn se folosesc 15 biți,
valoarea maximă pozitivă reprezentabilă este:
Nmax ≤ 2 15 -1 = 32767
Codul complementar al valorii minime reprezentabilă, deci numărul negativ cu
modul maxim, este:
(Nmin)c = 1000 0000 de unde se obține codul direct - (Nmin) d = (1000 0000)2 = -32768
Deci:
- 216 ≤ N ≤ 216 -1 sau N ∈ [-32768 , 32767]
Pentru cazul general, în care locația are m octeți/bytes, respectiv folosește n=mx8
biți, domeniul reprezentabil pentru valori întregi cu semn este:
- 2n ≤ N ≤ 2n -1
Erori de reprezentare
În situațiile în care valorile înscrise în locația MO nu corespund domeniului
corespunzător de reprezentare, valorile înscrise nu pot corespunde numărului considerat
iar interpretarea conținutului locației MO determină obținerea unui rezultat eronat, fără ca
eroarea de reprezentare să fie semnalizată.
Ex.4. a) Să se reprezinte numărul 40000 într-o locație având 2/16 o/biți. Forma
internă este:
Xd = (40000)10 = (1001 1100 0100 0000)2 = (9C40)16
Interpretarea conținutului acestei locații (b15=1) precizează faptul că numărul
reprezentat este un număr negativ iar reprezentarea este codul complementar față de 2 a
respectivului număr negativ. Codul direct, obținut conform regulii anterioare, este:
(X)c = (1001 1100 0100 0000)2 → (X)d = - (0110 0011 1100 0000)2 = - (63C0)16 =
-(25536)10
b) Să se reprezinte numărul -40000 într-o locație având 2o sau 16 biți. Forma
internă este:
Xd = - (40000)10 = - (1001 1100 0100 0000)2= - (9C40)16
Deoarece numărul care se reprezintă este un număr negativ se va înregistra în
locația MO codul complementar al valorii absolute a numărului.
Xd = - (1001 1100 0100 0000)2 → Xc = (0110 0011 1100 0000)2 = (63C0)16
Interpretarea conținutului reprezentării (b15 =0) precizează faptul că numărul
reprezentat este un număr pozitiv și deci reprezentarea constituie codul direct al
acestuia. Codul direct, obținut conform regulii anterioare, este:
Xd = (0110 0011 1100 0000)2 = (63C0)16 = ( 25536)10
c) Să se reprezinte numărul 70000 într-o locație având 2o sau 16 biți. Forma internă
este:
Xd = (70000)10 = ( 1 | 0001 0001 0111 0000 | )2 = (1 | 1170 | )16
Se observă că reprezentarea în baza 2 a numărului 70000 cuprinde 17 biți. În locația
de 16 b se vor înscrie numai ultimele 16 cifre ale numărului, ceea ce înseamnă că
numărul memorat este:
Xd = (0001 0001 0111 0000)2 = (1170)16 = (4464)10
1.2. Reprezentarea caracterelor
Caracterele corespund semnelor grafice:
- alfabetul limbajului: cifre și litere mari și mici;
- alte simboluri grafice;
- comenzi privind poziționarea cursorului la afișare/tipărire (tabulare, rând nou
ș.a.).
Pentru reprezentarea în MO a caracterelor se folosesc coduri numerice. În timp,
pentru realizarea programelor s-au folosit diferite coduri numerice pentru reprezentarea
caracterelor. În prezent este generalizat codul ASCII - American Standard Code for
Information Interchange care este definit prin standardul ISO/IEC 8859 și conține 256
de coduri/caractere (http://www.iso.ro/Utile/Numere/CoduriASCII.aspx).
Codul ASCII a fost propus în anul 1960 iar primul standard a fost aprobat în 1963.
Ulterior acest standard a fost revizuit și actualizat în 1967 și 1986.
(ro.wikipedia.org/wiki/ASCII). În anul 1998 a fost aprobat standardul ISO
8859-1(Latin1) care codifică setul de caractere specific ariei geografice Western
European.(en.wikipedia.org/wiki/ISO/ IEC_8859-1). Începând cu 1999 s-au aprobat noi
standarde, care constituie părți ale ISO 8859-x, ultimul standard ISO 8859-16 care
conține și caracterele specifice limbii române fiind aprobat în 2001. Diferențele între
aceste standarde se referă numai la codurile ASCII extinse, care reprezintă caractere
specifice fiecărui tip de alfabet: Western European, Central European, Fantasy
mix.(en.wikipedia.org/wiki/ISO/IEC _8859).
Obs. Codurile ASCII extinse prezentate în continuare s-au preluat din
implementarea DEV C++, care este anterioară impunerii standardelor ISO. Platforma
Eclipse are implementat standardul ISO 8859-1. Dacă programatorul dorește să
folosească și caracterele corespunzătoare codurilor ASCII extinse atunci este necesar ca
în prealabil să verifice care standardul ISO 8859-x este implementat.
În sistemul ASCII pentru memorarea fiecărui cod/caracter se folosește un octet/
byte. Primele 128 de poziții, respectiv [0,127] corespund ”alfabetului” oricărui limbaj de
programare și de aceea se spune că acestea alcătuiesc secțiunea: Coduri ASCII
caractere. Secțiunea a doua Coduri ASCII extinse, respectiv codurile [128,255], este
rezervată caracterelor ”speciale” (litere cu accent, litere care nu aparțin alfabetului
englez, simboluri grafice).
Variabilele pentru care se atribuie ca valori coduri ASCII sunt de tip char iar
locațiile folosite sunt de 1o/1byte. Deci, unei variabile de tip char, care foloseşte o
locație de 1o/byte, nu i se poate atribui ca valoare decât un singur caracter. Dacă se
încearcă atribuirea a două caractere unei variabile char, în locația de MO se va
înscrie/memora numai primul caracter.
Codurile ASCII - Comenzi
Codul Codul Codul Codul Caracterul Comanda
Explicații
zecimal hexazecimal octal binar reprezentat reprezentată
0 0 0 0000 NUL ^@ Null character
1 1 1 0001 SOH ^A Start of Header
2 2 2 0010 STX ^B Start of Text
3 3 3 0011 ETX ^C End of Text
4 4 4 0100 EOT ^D End of Transmission
5 5 5 0101 ENQ ^E Enquiry
6 6 6 0110 ACK ^F Aknowlodgemen
7 7 7 0111 BEL ^G Bell
8 8 10 1000 BS ^H Backspace
9 9 11 1001 HT ^I Horizontal Tab
10 A 12 1010 LF ^J Linee Fed
11 B 13 1011 VT ^K Vertical Tab
12 C 14 1100 FF ^L Form feed
13 D 15 1101 CR ^M Carriage return
14 E 16 1110 SO ^N Shift Out
15 F 17 1111 SI ^O Shift In
16 10 20 1 0000 DLE ^P Data Link Escape
17 11 21 1 0001 DC1 ^Q Device Control 1(oft. XON)
18 12 22 1 0010 DC2 ^R Device Control 2
19 13 23 1 0011 DC3 ^S Device Control 3(oft. XOFF)
20 14 24 1 0100 DC4 ^T Device Control 4
21 15 25 1 0101 NAK ^U Negative Aknowlodgemen
22 16 26 1 0110 SYN ^V Synchronous idle
23 17 27 1 0111 ETB ^W End of Transmission Block
24 18 30 1 1000 CAN ^X Cancel
25 19 31 1 1001 EM ^Y End of Medium
26 1A 32 1 1010 SUB ^Z Substitute
27 1B 33 1 1011 ESC ^[ Escape
28 1C 34 1 1100 FS ^\ File Separator
29 1D 35 1 1101 GS ^] Group Separator
30 1E 36 1 1110 RS ^^ Record Separator
31 1F 37 1 1111 US ^ Unit Separator
127 7F 177 111 1111 DEL ^? Delete
46 2E 56 010 1110 .
Codul Codul Codul Codul Caracter 47 2F 57 010 1111 /
zecim în octal binar reprezen 48 30 60 011 0
al baza 16 tat 0000
32 20 40 010 Space 49 31 61 011 1
0000 0001
33 21 41 010 ! 50 32 62 011 2
0001 0010
34 22 42 010 “ 51 33 63 011 0011 3
0010 52 34 64 011 4
35 23 43 010 # 0100
0011 53 35 65 011 5
36 24 44 010 $ 0101
0100 54 36 66 011 0110 6
37 25 45 010 % 55 37 67 011 0111 7
0101 56 38 70 011 8
38 26 46 010 & 1000
0110 57 39 71 011 9
39 27 47 010 0111 ‘ 1001
40 28 50 010 ( 58 3A 72 011 :
1000 1010
41 29 51 010 ) 59 3B 73 011 1011 ;
1001 60 3C 74 011 1100 <
42 2A 52 010 * 61 3D 75 011 1101 =
1010 62 3E 76 011 1110 >
43 2B 53 010 + 63 3F 77 011 1111 ?
1011 64 40 100 100 @
44 2C 54 010 , 0000
1100 65 41 101 100 A
45 2D 55 010 - 0001
1101 66 42 102 100 0010 B
67 43 103 100 0011 C 99 63 143 110 0011 c
68 44 104 100 0100 D 100 64 144 110 0100 d
69 45 105 100 0101 E 101 65 145 110 0101 e
70 46 106 100 0110 F 102 66 146 110 0110 f
71 47 107 100 0111 G 103 67 147 110 0111 g
72 48 110 100 1000 H 104 68 150 110 1000 h
73 49 111 100 1001 I 105 69 151 110 1001 i
74 4A 112 100 1010 J 106 6A 152 110 1010 j
75 4B 113 100 1011 K 107 6B 153 110 1011 k
76 4C 114 100 1100 L 108 6C 154 110 1100 l
77 4D 115 100 1101 M 109 6D 155 110 1101 m
78 4E 116 100 1110 N 110 6E 156 110 1110 n
79 4F 117 100 1111 O 111 6F 157 110 1111 o
80 50 120 101 0000 P 112 70 160 111 0000 p
81 51 121 101 0001 Q 113 71 161 111 0001 q
82 52 122 101 0010 R 114 72 162 111 0010 r
83 53 123 101 0011 S 115 73 163 111 0011 s
84 54 124 101 0100 T 116 74 164 111 0100 t
85 55 125 101 0101 U 117 75 165 111 0101 u
86 56 126 100 0110 V 118 76 166 111 0110 v
87 57 127 101 0111 W 119 77 167 111 0111 w
88 58 130 101 1000 X 120 78 170 111 1000 x
89 59 131 101 1001 Y 121 79 171 111 1001 y
90 5A 132 101 1010 Z 122 7A 172 111 1010 z
91 5B 133 101 1011 [ 123 7B 173 111 1011 {
92 5C 134 101 1100 \ 124 7C 174 111 1100 |
93 5D 135 101 1101 ] 125 7D 175 111 1101 }
94 5E 136 101 1110 ^ 126 7E 176 111 1110 ~
95 5F 137 101 1111 _
96 60 140 110 0000 `
97 61 141 110 0001 a
98 62 142 110 0010 b
CODURI ASCII EXTINSE 8859-
varianta DEV C/C++
…….. ……
unde:
- b31 /MSb codifică semnul numărului. Numerele raționale pozitive au prima cifră a
formei externe cel mult egală cu 7;
- b30 codifică semnul exponentului SE;
- b29 - b23 memorează cifrele exponentului;
- b0 - b22 reprezintă cifrele mantisei corespunzătoare formei normalizate a
reprezentării numărului real.
Cei 8 biți ai exponentului (bitul semn + 7 cifre) corespund domeniului de valori
[-128,127] (vezi Ex.3).
Pentru evitarea reprezentării a două cifre semn (număr și exponent) s-a înlocuit
exponentul printr-o mărime echivalentă denumită caracteristică sau exponentul mediat
(b23, b30). Caracteristica unui număr real scris sub formă exponențială normalizată este un
număr întreg fără semn, care folosește pentru reprezentare 1o/8biți. Domeniul de valori al
caracteristicii este [0,255]. (vezi Ex.1). Se observă că ambele domenii, [-128,127] și
[0,255], așa cum este și firesc, au 256 de poziții, corespunzătoare celor 8 biți folosiți
pentru înscrierea valorilor numerelor din fiecare domeniu. La implementarea modelului
de reprezentare a numerelor reale domeniul de valori al caracteristicei [1, 254] se pune în
corespondență cu domeniul [-126, 127] prin aplicarea unei translații/deplasament Δ =
127. Pentru calculul caracteristicii se folosește relația:
δ = e + 127
Obs. Valoarea exponentului e = - 127 (δ =0) este folosită pentru a indica depășirea
domeniului de reprezentativitate.
● Formatul float, respectiv 4o/32biți, are următoarea semnificație a biților
reprezentării:
…….. ……
Fig.4
Sunt semnificativi pentru această prezentare:
- b0 - CARRY - prin valoarea 1 precizează producerea unui transfer spre
rangul superior, în afara locației MO (vezi ex.7.5);
- b7 – SIGN – prin valoarea (vezi ex.7.1 – 7.4)
✓ b7 = 0 precizează faptul că ultimul rezultat este un număr pozitiv;
✓ b7 = 1 precizează faptul că ultimul rezultat este un număr negativ.
- b6 – ZERO – prin valoarea:
✓ b6 = 0 precizează faptul că ultimul rezultat este un număr diferit de zero;
✓ b7 = 1 precizează faptul că ultimul rezultat este egal cu zero. Este
semnificativ pentru valorile de tip int.
Fig.6
3. Operații relaționale
Pentru verificarea valorilor variabilelor (de ex. apartenența la un domeniu de
definiție) în programele de calcul se folosesc expresii relaționale și/sau logice (vezi și
pct.4).
Expresiile relaționale se alcătuiesc prin înlănțuirea operanzilor, care pot fi
expresii/variabile/constante numerice, cu ajutorul operatorilor relaționali. Rezultatul
evaluării unei expresii relaționale este o valoare logică: ADEVĂRAT/TRUE sau
FALS/FALSE. Se reamintește că aceste valori sunt exprimate printr-un numărul întreg
1 pentru valoarea logică ADEVĂRAT/TRUE sau prin valoarea 0 pentru valoarea logică
FALS/FALSE. Această valoare logică poate fi folosită pentru definirea modului de
efectuare a unor instrucțiuni (de decizie sau repetitive).
În C/C++, deși nu este definit tipul de date logic/boolean, se poate atribui unei
variabile de tip int rezultatul logic al evaluării unei expresii relaționale sau logice. În Java
sunt definite tipul boolean și valorile logice corespunzătoare acestuia: true/false. De
aceea alcătuirea în Java a unei expresii relaționale este mai explicită. Memorarea acestor
valori se efectuează conform convenției aplicate în C/C++.
Operatori relaționali, aceeași ca și în matematică, sunt:
< (mai mic); <= (mai mic sau egal); < (mai mare); >= (mai mare sau egal);
!= diferit: = = (egal).
Prioritatea operatorilor relaționali este aceeași, dar este mai mică decât a
operatorilor aritmetici. De aceea, la evaluarea unei expresii relaționale se evaluează întâi
expresiile aritmetrice/algebrice și apoi, rezultatele astfel obținute sunt analizate prin
intermediul operatorilor relaționali.
Pentru evaluarea expresiilor relaționale la nivelul μProcesorului se calculează
diferența operanzilor, care nu poate fi decât o valoare numerică. În funcție de semnul
rezultatului: pozitiv/negative/zero se apreciază valoarea expresiei relaționale
ADEVĂRAT/FALS. Această valoare poate fi memorată printr-o variabilă întreagă. (vezi
Ex.10). Efectuarea acestui calcul NU modifică valorile operanzilor înscrise în MO.
Obs. Pentru analiza semnului/valorii: pozitiv/negative/zero se folosesc indicatorii
de condiții( vezi fig.4).
Ex.10
1) Să se precizeze valoarea indicatorilor de condiție pentru secvența:
.............
int x=10, y;
y = x > =7;
Se efectuează operația: x - 7= 3 al cărei rezultat este un număr pozitiv. Deci, în
registrul F se poziționează b7 = 0 și b6 = 0. Corespunzător acestor cerințe:
operatorul relaţional >= ; b7 =0 ; b6 =0
se stabilește că y =ADEVARAT și se memorează y = 1.
2) Să se aleagă valori adecvate pentru variabilele x, y și să se alcătuiască
secvența de instrucțiuni care la verificarea condiției (!=) poziționează b6
=0.
Ex.11 Pentru următoarea secvență C/C++ să se verifice formatul extern al
variabilelor de tip short folosite/calculate și să se comenteze rezultatele.
......................
int x=6, y=10; // x=(0006)16 ; y=(000A)16
y=x<=10; // y=(0001)16
y=(x+4) != 10; // y=(0000)16
y= (x = = 6); // y=(0001)16
....................
Ex.12 Pentru următoarea secvență Java să se precizeze formatul extern al
variabilelor de tip short folosite și să se comenteze rezultatul. Se va folosi formatul
extern.
......................
boolean x=true, y;
y=false;
y=(x+4) != 10; // The operator + is undefined for the argument boolean
y = (x = = 6); // The operator == is undefined for the argument boolean
......................
Obs. Spre deosebire de C/C++, în Java nu sunt acceptate expresii de calcul care
includ variabile de tip boolean și short, int, ș.a.
4. Operații logice
Toate limbajele de programare au definite operațiile logice. Forma de
implementare poate fi însă diferită. De aceea programatorul trebuie să cunoască modul în
care sunt definite aceste operații în limbajul de programare folosit pentru implementarea
programului său. Operațiile logice sunt implementate în două variante:
- cu considerarea globală a operanzilor (pe întreaga locație a MO) și
- cu aplicarea operatorilor la nivelul fiecărui bit al operanzilor.
Operanzii sunt înscriși în locații similare tipului int. Valoarea logică stabilită pentru
o expresie relațională/logică se concretizează în registrul F prin valoarea lui b6 astfel:
- b6 =0→ ADEVĂRAT/true;
- b6 =1→ FALS/false.
X !X X Y X && Y X Y X || Y
F/0 A/1 F/0 F/0 F/0 F/0 F/0 F/0
A/1 F/0 F/0 A/1 F/0 F/0 A/1 A/1
A/1 F/0 F/0 A/1 F/0 A/1
A/1 A/1 A/1 A/1 A/1 A/1
Obs. Indiferent de tipul declarat pentru variabila folosită pentru memorarea
rezultatului: short(2o); int(4o) sau long(8o) numai b0 vă înscrie valoarea 1 sau 0, în
corespondență cu valoarea logică a rezultatului ADEVARAT/FALS.
Ex.13 Pentru secvența C/C++ să se precizeze valoarea expresiei logice și forma
internă a valorii variabilei t. A→ reprezintă valoarea logică ADEVĂRAT; F→ reprezintă
valoarea logică FALS.
..................
int x=10, y=5, z=4, t; // t→4 o/bytes
t = (x >= 5) && !(y==6) || (z!=4);
Considerând valorile cu care variabilele au fost inițializate prin instrucțiunea de
declarare, se evaluează fiecare operand și întreaga expresie după cum urmează:
(x>=5) → A ; !(y==6)→A (z!=4)→F ; t=A && A || F = A
Valoarea înscrisă în locația atribuită lui t este: t=(0000 0000 0000 0001)
Funcția x ⊕ y
Xi Yi Zi
F/0 F/0 F/0
F/0 A/1 A/1
A/1 F/0 A/1
A/1 A/1 F/0
1 1 2 3
X→ 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1
2 9 3 1
Y→ 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1
~ X→ { a 1= ~ 1x
i i
1 0 1 1 1 0 1 1 0 1 1 1 0 0
X^Y→ { d0=x ^0 y 1
i i i
1 1 0 0 0 0 0 0 1 0 0 1 0
X>>2→ { e 0 =x0
i-2 i
0 0 0 1 0 0 0 1 0 0 1 0 0 0
X<<3→ { f 1 =x0
i+3 i
0 0 1 0 0 1 0 0 0 1 1 0 0 0
În fig. 5.1 este prezentată configuraţia hardware generală a unui SC. Sunt indicate şi
principalele căi de transfer a informaţiilor (magistralele) între diferitele blocuri.
Fig.5.1.
Elementele fizice (resursele) minimale necesare funcţionării oricărui SC sunt:
- echipamentele periferice sau dispozitivele de intrare / ieşire (I/O)
(tastatură, monitor, imprimantă, mouse, etc.) prin intermediul cărora se
Microprocesorul - μP
Fig. 5.2
unde:
- ALU – unitatea aritmetico logică;
- IP – registrul de adresă a instrucţiunilor;
- AX – are o utilizare dublă:
o înscrierea primului operand al instrucţiunii;
o înscrierea rezultatului obţinut în urma execuţiei acesteia.
- BX ... EX – registre folosite pentru memorarea operanzilor;
- SP – vârful stivei;
- BP – baza stivei;
- FLAGS - Indicatorii de condiţii.
Notaţia [A], [BP] .... – reprezintă conţinutul registrului A, BP, ....
În principiu μP conţine blocul de calcul şi registrele. Acestea sunt elementele care
asigură memorarea temporară sau permanentă a informaţiilor necesare efectuării
operaţiilor indicate prin instrucţiunea care se execută.
Funcţiile blocurilor din fig. 5.2 sunt:
- ALU este singurul bloc dintr–un SC în care se efectuează operaţii de
calcul şi / sau comparaţie; Registrele generale AX, BX, CX, DX sunt
elementele de memorare pe 16 cb şi sunt destinate înscrierii rezultatelor
intermediare. Rezultatul final al execuţiei unei instrucţiuni de calcul este
întotdeauna transferat în MO. Aceste registre pot fi folosite şi parţial
(având dimensiunea de 8 cb):