Sunteți pe pagina 1din 47

Programarea în limbaj

de asamblare
Limbaje de
asamblare
CO NCEPTE DE BAZA
REPREZENTAREA SI CO DIFICAREA INFO RMATIILOR

2
Ce este limbajul de asamblare?
Un limbaj de asamblare este un limbaj de programare la
nivel scăzut pentru microprocesoare și alte dispozitive
programabile.
Nu este doar un singur limbaj, ci mai degrabă un grup de
limbaje.
Un limbaj de asamblare implementează o reprezentare
simbolică a codului mașinii necesar pentru a programa un
anume procesor.

3
De ce se programează în limbaj de asamblare ? Argumente
Viteza: programele scrise în limbaj de asamblare sunt foarte rapide. Un program în limbaj
de asamblare este MULT mai rapid decât ar putea produce un compilator pentru orice alt
limbaj.
Spaţiul de memorie ocupat: programele în limbaj de asamblare sunt de dimensiuni mici.
Codul produs de asamblor este mult mai mic decât ar putea produce vreun compilator de
orice alt limbaj.
Limbajul de asamblare este mult mai apropiat de nivelul mașinii decât orice alt limbaj,
deoarece comenzile limbajului de asamblare sunt mapate 1-1 în instrucțiunile mașinii.
Limbajul mașină este de fapt o serie de numere, în baza 2, care nu este ușor de citit chiar și
de către programatorii cu experiență. Folosind ASM, programatorii pot scrie programe care
pot fi citite și înțelese și care corespund aproape exact limbajului mașină.

4
De ce se programează în limbaj de asamblare ? Argumente
Capacități
◦ Programele în limbaj de asamblare pot realiza aplicaţii dificil de implementat în limbaje de nivel înalt.
◦ În asamblare, putem face o mulțime de lucruri pe care nu le putem face într-un limbaj de nivel superior, cum ar fi
manipularea indicatorilor de condiții ale ale procesorului etc.
◦ Programele care necesită accesul la nivelul arhitecturii hard sunt implementate în limbaj de asamblare de ex:
driverele (device drivers)
Abilități de programare:
◦ Cunoştinţele de programare în limbaj de asamblare ajută la îmbunătățirea abilităților de programare în limbaje de
nivel înalt; un programator expert trebuie să aibă și cunoştinţe și abilități de a dezvolta de programe în limbaj de
asamblare
◦ Programarea în limbaj de asamblare ajută la o mai bună înţelegere a arhitecturii hardware a sistemelor de calcul
şi a modului lor de funcţionare
◦ un specialist are abilități de programare în asamblare; o atenţie sporită se acordă dezvoltării de aplicaţii mixte (în
limbaj de nivel înalt şi în asamblare)

5
De ce se programează în limbaj de asamblare ? Argumente
Dezvoltarea de programe pentru echipamente dedicate. Nu toate programele
executabile sunt destinate calculatoarelor de uz general.
Dezvoltarea continuă a microprocesoarelor a făcut ca ele să fie implicate înfuncţionarea
celor mai diverse obiecte tehnice, de la obiecte de uz casnic până la echipamente de
control industrial.
Toate aceste echipamente care au în structura lor microprocesoarefuncţionează pe bază
de programe care evident nu sunt scrise în Pascal sau C.
Majoritatea acestor programe sunt scrise în limbaje de asamblare deoarece în aceste
cazuri cel mai mult interesează viteza de execuţie a lor şi volumul mic de memorie.
Microprocesoarele utilizate în astfel de cazuri nu sunt neapărat specializate, ele sunt
specifice cazului concret pentru care se utilizează şi pentru care s-au proiectat şi realizat
(ca de exemplu microcontrolerele, automatele programabile).
Nu este posibil să se dezvolte medii de programare şi compilatoare C sau Pascal pentru
toate microprocesoarele existente.

6
De ce se evita limbajul de asamblare?
este greu de citit si de inteles memoria nu mai constituie o problema
este greu de scris compilatoarele actuale genereaza cod
eficient
este greu de depanat si de intretinut
limbajul de asamblare nu este portabil
programarea este ineficienta
viteza nu mai constituie o problema la
calc. de azi

7
- Reprezentarea informațiilor
Ce tipuri de informații se reprezinta?
◦instructiuni - prin codurile de instructiuni
◦date:
◦ logice: Adevarat/Fals, Pornit/Oprit , Inchis/Deschis
◦ numerice: intregi, nr. fractionare, nr.pozitive și negative
◦ alfanumerice: texte, caractere
◦ multimedia: sunet, imagine (audio/video)
◦structuri de date

8
Sisteme de numerație poziționale
Aceste sisteme de numeraţie sunt sisteme de
numeraţie poziţionale ponderate,
Exemple:
Cel mai semnificativ Cel mai puţin semnificativ
(most significant) (Least significant)
56 85 101
103 102 101 100 2 1 0
5•1000+6•100+8•10+5• 2 2 2
1 1•4+0•2+1•1

9
Sisteme de numerație
Baza 10 sau sistemul de numerație zecimal
◦ Baza-10 sistemul de numerație zecimal se caracterizează prin faptul că că schema de numerație începe
să se repete după a zecea cifră (în cazul nostru, numărul 9).
◦ Zero este întotdeauna primul număr.
◦ Când numărăm, de obicei numărăm "00, 01, 02, 03, 04, 05 , 06, 07, 08, 09, 10, 11, 12, ...“

10
Sisteme de numerație
Baza 10 sau sistemul de numerație zecimal
◦ Fiecare cifră din stânga și din dreapta punctului zecimal are un
nume care identifică ”poziția” respectivei cifre.
Fiecare ”poziție” este multiplu de zece.
Pentru început, să luăm în considerare doar numerele pozitive.
◦.

11
Sisteme de numerație – Baza 10
Fiecare poziție este o putere a lui 10.
10º = unu
◦ Orice număr la puterea 0 este egal cu
1.
◦ nº=1

UNITĂȚI
SUTE
◦ 10º=1

ZECI
MII
10¹ = zece
◦ Orice număr la puterea întâi este
întotdeauna egal cu el însuși.
◦ n¹=n
◦ 10¹=10
10² = sute 7 4 0 8
10³ = mii
Sisteme de numerație – Baza 10
Semnificația cifrei 8 în 7408.
Se lucrează de la dreapta la stânga a punctului zecimal.
Poziția este folosită la calculul exponentului
◦ 10º*8=8 is the same as 1*8=8
Sisteme de numerație – Baza 10

Număr 7 4 0 8
Poziție Mii Sute Zeci Unități
Expresia cu 10³*7 10²*4 10¹*0 10º*8
exponent
Calcul 1000*7 100*4 10*0 1*8
exponent

Dezvoltare după puterile lui 10.


1000*7 + 100*4 + 10*0 + 1*8 = 7408
Sisteme de numerație – Baza 2
Sistemul binar se bazează pe multipli de doi.
În numărarea binară, schema de numărare se repetă după a doua
cifră.
Să numărăm la cinci în binar : “0000, 0001, 0010, 0011, 0100, 0101“
Sistemul binar include nume pentru pozițiile cifrelor
Sisteme de numerație – Baza 2
Denumire pozitie cifra – baza 2 Denumire pozitie cifra – baza 10
◦ Unitați ◦ Unități
◦ Doi-uri ◦ Zeci
◦ Patru-uri ◦ Sute
◦ Opti ◦ Mii
◦ Șaisprezeci ◦ Zeci de mii
◦ Treizeci si doi-uri ◦ Sute de mii
◦ Șaizeciși patru-uri ◦ Millioane
Sisteme de numerație – Baza 2

Dacă sistemul binar se bazează pe puteri ale lui 2, de ce mai există o


poziție „unu”?
Amintiți-vă: orice la puterea zero este întotdeauna egal cu 1.
În mod binar, poziția „unu” este reprezentată de expresia
exponențială 2º, ca și în baza 10.
Conversie binar în zecimal
Număr 1 1 0 1
Denumire Opți Patru-uri Doi - uri Unități
poziție
Expresie cu 2³*1 2²*1 2¹*0 2º*1
exponent
Calcul 8*1 4*1 2*0 1*1
exponent

Suma puterilor lui 2 (dezvoltare după puterile bazei 2). !!!Calcul


efectuat în zecimal
8*1 + 4*1 + 2*0 + 1*1 = 13
Conversie binar în zecimal

Pasul 1 - Scrieți numărul binar pe un rând, separând cifrele în coloane

Număr 1 1 0 1
Conversie binar în zecimal
Pasul 2 – Se stabilește că fiecare poziție a unei cifre binare este „ON” sau „OFF”.
"1" este "ON" și "0" este "OFF.“
Nu trebuie să calculăm pozițiile de cifre care sunt dezactivate

Număr 1 1 0 1

ON/OFF On On Off ON
Conversie binar în zecimal
Pasul 3 - Scrieți expresiile exponențiale („puteri ale lui 2”) care reprezintă
fiecare poziție și înmulțiți fiecare expresie cu 1.
Facem acest lucru numai pentru locațiile care sunt activate.

Număr 1 1 0 1

ON/OFF On On Off ON

Expresie cu 2³*1 2²*1 0 2º*1


exponent
Conversie binar în zecimal
Pasul 4 - Calculați exponenții pentru a obține o expresie simplă
pentru fiecare poziție.

Număr 1 1 0 1

ON/OFF On On Off ON
Expresie 2³*1 2²*1 0 2º*1
exponent
Calcul 8*1 4*1 0 1*1
Conversie binar în zecimal
Pasul 5 - Rezolvați expresiile de multiplicare de la pasul 4.

Număr 1 1 0 1

ON/OFF On On Off ON
Expresie cu 2³*1 2²*1 0 2º*1
exponent
Calcul cu 8*1 4*1 0 1*1
Exponent
Calcul 8 4 0 1
Conversie binar în zecimal
Pasul 6 – Adunați toate rezultatele de la pasul 5 pentru a obține numărul
zecimal

Număr 1 1 0 1
ON/OFF On On Off ON
Expresie cu 2³*1 2²*1 0 2º*1
exponent
Calcul cu 8*1 4*1 0 1*1
Exponent
Calcul 8 4 0 1
Adunare
8+4+0+1=13
Conversie binar în zecimal Exemplu
Număr 1 0 1 1 0 1

ON/OFF On Off On On Off On


Expresie cu 25 0 2³ 2² 0 2º*1
exponent
Calcul cu 32*1 0 8*1 4*1 0 1*1
Exponent
Calcul 32 0 8 4 0 1

Adunare 32+0+8+4+0+1=45
Conversie zecimal în binar
Pas 1 – Se împarte numărul la 2
Important: NICIODATĂ nu duceți diviziunile peste punctul zecimal!

Număr zecimal = 97
Expresia de Cât Rest
împărțit
97/2 48 1
Conversie zecimal în binar
Pasul 2 - Pentru fiecare rând ulterior, luați coeficientul din rândul
anterior și împărțiți-l la doi
97
Expresia de împărțit Cât Rest
97/2 48 1
48/2 24 0
24/2 12 0
12/2 6 0
6/2 3 0
3/2 1 1
1/2 0 1
Conversie zecimal în binar
Pasul 3 - Coloana cu resturi are doar 1 sau 0.
Ultima celulă din coloana cu resturi din ultimul rând trebuie să fie „1”.
Citind cifrele de 1 și 0 din coloana de resturi de jos în sus, vom avea numărul nostru binar!
Conversie zecimal în binar
97
Expresia de Cât Rest Direcție
împărțit
97/2 48 1
48/2 24 0
24/2 12 0
12/2 6 0
6/2 3 0

Citește
3/2 1 1
1/2 0 1
Număr binar = 1100001
Alte exemple
1 0 0 1 0 1
37
DE C R
25 24 23 22 21 20
37/2 18 1
18/2 9 0 32*1 16*0 8*0 4*1 2*0 1*1

9/2 4 1

Citește
32 0 0 4 0 1
4/2 2 0
2/2 1 0 32+0+0+4+0+1= 37

1/2 0 1
Ultima celulă din coloana cu resturi din ultimul rând trebuie să fie "1", deoarece
trebuie să folosim numere întregi (numere întregi non-negative).
1 ÷ 2 = 0 deoarece 1 nu poate fi împărțit, 1 este restul

37 (Număr impar) 36 (Număr par)


DE Q R DE Q R
37/2 18 1 36/2 18 0
18/2 9 0 18/2 9 0
9/2 4 1 9/2 4 1

Citește

Citește
4/2 2 0 4/2 2 0
2/2 1 0 2/2 1 0
1/2 0 1 1/2 0 1
Conversii dintr-o baza in alta numere reale
conversia partii intregi: prin divizare succesiva cu noua baza: exemplu din baza 10 in
baza 2
30 3010 = 111102 0,48 0,4810=0,0111...2
15 0 0,96 0
7 1 1,83 1
3 1 1,66 1
1 1 1,32 1
01
conversia partii fractionare: prin inmultire succesiva cu noua baza
◦ atentie!!!, conversia nu este precisa (univoca)

32
Conversie hexadecimală
și ASCII
Hexa + Zecimal
Sistem de numerație hexazecimal
Semnificatie
◦ “Sexa” = Latin = șase
◦ “Decimal” = Latin = zece
◦ In 1963 IBM a gândit că termenul “Sexadecimal” nu este potrivit
◦ “Hexa” = Greek = Six
◦ Deoarece alfabetul latin conține doar zece cifre, hexadecimal folosește literele A-F pentru a reprezenta
cifrele între zece și cincisprezece.
Sistemul Hexazecimal și computerele
Este mult mai ușor de lucrat cu un număr mare folosind valori
hexazecimale decât zecimale sau binare.
◦ O cifră hexazecimală = 4 biți
◦ Două cifre hexazecimale = 8 bits
◦ Opt biți = 1 octet (byte)
◦ Acest lucru face foarte ușoară
◦ conversia între hexadecimal și binar
Numărarea în hexazecimal
Pornind de la zero, se numără 00, 01, 02,03, 04, 05, 06, 07, 08, 09,
0A, 0B, 0C, 0D, 0E, 0F,10, 11, 12, 13, 14, 15, 16, 17 18, 19, 1A, 1B, 1C,
1D, 1E, 1F, 20, 21, 22, 23, 24, 25,....
Zecimal Binary Hexazecimal
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 a
11 1011 b
12 1100 c
13 1101 d
14 1110 e
15 1111 f
Dacă se include și baza 8
Zecimal Binar Octal Hexazecimal
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

38
Conversia hexazecimal în zecimal
1 1 A =10 8

163 162 161 160

4096*1 256*1 16*10 8*1

4096 256 160 8

4096+256+160+8= 4520
Conversia zecimal în hexazecimal
4520
DE Cât Rest
4520/16 282 (.5*16)=8
282/16 17 (.625*16)=10
10=A

Citește
17/16 1 (.0625*16)=1
1/16 0 (.0625*16)=1
11A8
Restul trebuie să fie un număr întreg.
Dacă este fracționar, înmulțiți partea fracționară cu 16 pentru a obține restul.
Restultrebuie să fie un număr întreg.
Conversia hexazecimal în binar
Se convertește fiecare cifră hexazecimală în 4-
biți echivalenți.
Hex 1 A B
1AB

Bin 0001 1010 1011

000110101011
Conversia Binar la Hexazecimal
Se convertesc fiecare 4biți în cifra
hexazecimal echivalentă Începând din
dreapta Bin 0001 1010 1011
Dacă numărul de biți nu este multiplu
de 4 se completeaza in stânga cu 0.
Hex 1 A B
110101011

1AB
Conversia Binar - Hexazecimal
◦ 4 cifre binare = 1 cifra hexa(zecimala)

0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 0

2 B A C

43
Utile
◦ Web pages
◦ http://www.psyclops.com/tools/rgb/
◦ Networking
◦ MAC address
◦ Programming
◦ C, C++, C#, Java, Assembly
Exerciții propuse
Conversii zecimal binar
◦ 1) 11
◦ 2) 27
◦ 3) 54
◦ 4) 113
◦ 5) 273
Conversii binar zecimal
◦ 6) 101
◦ 7) 1011
◦ 8) 10100
◦ 9) 111010
◦ 10) 1010001
Exerciții propuse
Conversii Hexazecimal binar
◦ 11) 43B
◦ 12) DAB
◦ 13) 954
◦ 14) C0FFEE
◦ 15) B0A
Conversii Binar Hexazecimal
◦ 16) 11000001111
◦ 17) 10100011110
◦ 18) 100110
◦ 19) 11011110
◦ 20) 101110110001
Exerciții propuse
Conversii Hexazecimal zecimal
◦ 21) FF2
◦ 22) 45
◦ 23) 19D
◦ 24) 345
◦ 25) AA
Conversii zecimal hexazecimal
◦ 26) 27
◦ 27) 85
◦ 28) 562
◦ 29) 4522
◦ 30) 5627

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