Documente Academic
Documente Profesional
Documente Cultură
CALCULATOARELOR
SEMINARUL Nr. 9
1
Limbaje de Asamblare
Considerăm un calculator simplu, similar unui microcontroler.
Unitatea de bază de reprezentare a informaţiei este un byte sau octet (format din opt biţi).
Vom considera numere întregi reprezentate în sistem binar pe 4 octeţi în complement faţă de 2.
Calculatorul are instrucţiuni pentru următoarele operaţii :
◦ adunare şi scădere cu numere întregi,
◦ comparare a două numere întregi,
◦ operaţii de ramificare a execuţiei în diferite puncte din program.
Calculatorul considerat are un registru de 4 octeţi:
◦ registrul A (acumulator)
Registrul A este utilizat pentru efectuarea operaţiilor aritmetice. El conţine întotdeauna un
operand şi rezultatul.
2
Orice calculator are nişte indicatori de condiţie poziţionaţi la compararea a două
numere, un număr memorat într-un registru, iar celălalt în memorie. Indicatorii de condiţie
sunt reprezentaţi de doi biţi:
◦ unul numit Z care este poziţionat la 1 dacă numerele comparate sunt egale,
◦ Celălalt, numit S, care este poziţionat la 1 dacă numărul din registru este mai mic decât cel din
memorie.
Z S
operand1 = operand2 1 0
operand1 < operand2 0 1
operand1 > operand2 0 0
4
◦ instrucţiuni de calcul cu numere întregi :
ADD adresa
SUB adresa
Aceste instrucţiuni adună şi scad două numere, primul fiind în acumulator, iar al doilea la
adresa instrucţiunii.
◦ instrucţiuni de comparare:
CPA adresa
Această instrucţiune compară numărul dintr-un registru A cu cel de la adresa şi poziţionează
indicatorii de condiţie.
◦ instrucţiuni de salt:
JMP adresa
Această instrucţiune duce la execuţia instrucţiunii de la adresa.
5
◦ instrucţiunile următoare testează indicatorii de condiţie şi, în funcţie de valoarea
acestora, se trece la adresa din instrucţiune.
6
Un limbaj de asamblare utilizează etichete şi directive. O etichetă este un şir de
litere şi cifre ce începe cu o literă. Directivele limbajului de asamblare sunt:
◦ directiva END cu forma
END start
unde : start este o etichetă ce specifică punctul de începere a execuţiei programului.
◦ directiva DATA cu forma:
[eticheta] DATA M1, M2, …Mn
Ea generează numerele M1, M2, …, Mn pe 4 octeţi. Eticheta acestei directive este opţională.
Exemplu. Vom scrie un program care adună două numere întregi, 50 şi 23. În limbaj
pseudocod programul este
X = 50 ;
Y = 23 ;
Z=X+Y;
7
Programul în limbaj de asamblare este următorul :
X DATA 50
Y DATA 23
Z DATA 0
start LDA X
ADD Y
STA Z
STOP
END start
În acest program generăm la început cele două numere de adunat cu două directive
DATA şi rezervăm o zonă pentru rezultat cu o altă directivă DATA. Urmează apoi secvenţa
de instrucţiuni ce adună cele două numere şi memorează rezultatul.
8
Formatul instrucţiunilor calculatorului
În prima coloană avem valoarea contorului de locaţii în hexazecimal, care este adresa
la care se află generată instrucţiunea în memorie. În prima linie avem numărul 50 reprezentat
pe 4 octeţi. Valoarea lui în hexazecimal este 32. În linia a doua avem valoarea hexazecimală
a numărului 23. În linia treia este generată valoarea 0 pe patru octeţi. În linia a patra avem
generată instrucţiunea: start LDA X Eticheta X are valoarea 0 (vezi contorul de
locaţii). Codul instrucţiunii OP este 1. În linia a cincea avem instrucţiunea: ADD Y
Eticheta Y are valoarea 4, codul instrucţiunii OP este 3. 11
Exemplu. Fie două numere întregi a = 17 şi b = 13.
Se cere să se calculeze valoarea c = max(a, b).
Problema poate fi rezolvată cu programul pseudocod de mai jos:
a = 17;
b = 13;
c = a;
if(a < b)
c = b;
Programul în limbaj de asamblare este următorul:
a DATA 17
b DATA 13
c DATA 0
start LDA a
STA c
CPA b
JGE adr1
LDA b
STA c
adr1 STOP
12
Tabela cu adresele în zecimal ale etichetelor este următoarea:
a b c start adr1
0 4 8 12 36
14