In concluzie, la ora actuala programele sunt hibride: ele contin linii scrise in limbaje de nivel inalt, dar pot contine si linii in limbaj de asamblare. Pentru a rezolva astfel de situatii, implementarile limbajelor de nivel inalt accepta introducerea in textul sursa de linii scrise in limbaj de asamblare sau legarea intr-un singur modul a unor module obiect provenite de la compilarea unor texte sursa, scrise in diverse limbaje de programare. Modulele care presupun algoritmi complicati sau structuri de date complexe sunt scrise in limbaje de nivel inalt, iar cele care sunt critice din puctul de vedere al timpului de executie si al resurselor ocupate sunt scrise in limbaj de asamblare. In plus, exista anumite resurse ale calculatorului la care accesul nu este realizabil din limbajele de nivel inalt.
Un alt motiv pentru care se recomanda si experienta programarii in limbaj de asamblare este acela ca un specialist in informatica trebuie sa cunoasca mecanisele fine ale procesorului pntru a le folosi in diferite aplicatii.
De asemenea, uneori, depanarea unui program poate trece de textul sursa si ajunge la depanarea codului obiect, caz in care este necesara cunoasterea libajului de asamblare.
Motivul pentru care secventele critice, ca timp de executie si resurse, se scriu in limbaj de asamblare si nu in limbaje de nivel inalt, este urmatorul: compilatorul are "cunostinte limitate" asupra intregului program, dar el trebuie a genereze un set generalizat de instructiuni masina , care vor lucra in toate sitatiile, dar nu vor fi optime in situatii particulare.
Programarea in limbaj de asamblare este mult mai dificila decat cea intr-un limbaj de nivel inalt, deoarece programatorul trebuie sa cunoasca, pe langa limbajul de asamblare, si structura interna a calculatorului ( registre, organizarea si adresarea memoriei, porturi de intrare-iesire, etc.)
Limbajul de asamblare (ASM) permite intelegerea la nivel de amanunt a ceea ce se intampla in realitate intr-un calculator. Codul generat in ASM se executa foarte rapid.si permite accesul la hardware, acces care nu este disponibil in limbajele de nivel inalt.
Unitatea de baza a informatiei memorate in calculator este bitul. Un bit reprezinta o cifra binara, deci poate avea valorile 0 sau 1. Modelul hardware corespunzator este acela de bistabil. Un bistabil este, deci un circuit electronic cu doua stari stabile, configurate 0 sau 1 , capabil sa memoreze un bit de informatie.
Un grup de bistabili formeaza un registru. De exemplu, 8 bistabili formeaza un registru de 8 biti. Iformatia care se poate memora intr-un asemenea registru poate fi codificata binar, de la valoarea 0000.0000, pana la valoarea 1111.1111. Numarul combinatiilor care pot fi memorate este 256 ( EMBED Equation.3 ). Aceste combinatii se numesc octeti sau bytes (daca n=8), respectiv cuvinte (daca n=16, 32, etc.).
Memoria unui calculator este vazuta ca o succesiune de octeti. Fiecare octet are asociata o adresa de memorie. Pentru a adresa memoria, e nevoie de un registru de adrese a carui lungime determina dimensiunea maxima a memoriei. Zonele de memorie vor fi reprezentate grafic pe verticala, ca succesiuni de octeti sau cuvinte, de la adrese mici catre adrese mari.
1.2 TIPURI DE DATE UTILIZATE IN LIMBAJ DE ASAMBLARE
Tipurile de date sunt:
Byte (1 octet) - ocupa un octet si poate fi reprezentat atat in memoria interna cat si intr-un registru de 8 biti al procesorului. Interpretarile tipului byte pot fi:
# intreg pe 8 biti;
# caracterASCII.
Directiva pentru definirea datelor de acest tip este db (define byte).
Word (2 octeti) - ocupa doi octeti si poate fi reprezentat atat in memoria interna cat si intr-un registru de 16 biti al procesorului. Interpretarile tipului word pot fi:
# intreg pe 16 biti cu sau fara semn;
# secventa de doua caractere ASCII;
# adresa de memorie de 16 biti.
Directiva pentru definirea datelor de acest tip este dw (define word).
Double Word (4 octeti) - ocupa 4 octeti si poate fi reprezentat atat in memoria interna cat si intr-opereche de registre de 16 biti ale procesorului sau intr-un registru de 32 biti. Interpretarile tipului dword pot fi:
# intreg pe 32 biti cu sau fara semn:
# numar real in simpla precizie;
# adresa de memorie de 32 biti.
Directiva pentru definirea datelor de acest tip este dd (define double word).
Quand Word (8 octeti) - ocupa 8 octeti si poate fi reprezentat atat in memoria interna cat si
intr-o pereche de registre de 32 biti. Interpretarile tipului qword pot fi:
# intreg pe 64 biti cu sau fara semn;
# numar real in dubla precizie.
Directiva pentru definirea datelor de acest tip este:dq (define quand word).
Ten Bytes (10 octeti) - ocupa 10 octeti si poate fi reprezentat atat in memoria interna cat si intr-unul din registrele coprocesoarelor matematice 80x87.