Limbaj de asamblare
Un limbaj de asamblare este un limbaj de programare a calculatoarelor care, în locul codului mașină, folosește o desemnare simbolică a elementelor programului, relativ ușor de citit și interpretat de către om. Exemplu: limbajul numit Assembler de la compania IBM.
Caracteristici
modificareFiecare tip de procesor deține propriul său limbaj numit "codul mașină", care reprezintă modul binar de codificare a instrucțiunilor și datelor în memorie, în forma direct executabilă. Instrucțiunile pot fi în general operații elementare (aritmetice, logice, transfer de date) sau și operații de comandă și control a procesorului. Codul mașină este, ca orice cod, format mai ales din cifre, fiind greu de reținut pentru un programator. De exemplu, un calculator ar putea folosi pentru instrucțiunile sale de adunare și scădere codurile mașină 5B și 5C. Însă, în limbajul de asamblare, aceste două operații ar putea fi simbolizate prin ADD și SUB, care sunt mult mai ușor de reținut și folosit.
Pentru a putea fi interpretate de procesor, programul scris de om ("codul sursă", scris de exemplu în limbaj de asamblare) trebuie întâi redus prin compilare (sau asamblare sau interpretare) la "codul obiect" (în cod mașină), în acest scop fiind folosite "compilatoarele", "asambloarele" sau "interpretorii".
Programarea în limbaj de asamblare presupune o bună cunoaștere a structurii procesorului și a componentelor sale adiacente. Ea face ca utilizatorul să aibă acces la toate facilitățile unui calculator; dar programul rezultat va putea funcționa numai pe acest tip de calculator. Dacă programul trebuie portat (transpus) și pe alte tipuri de calculatoare, atunci se preferă limbajele de programare de nivel mai înalt.
De obicei limbajele de asamblare oferă și posibilitatea alcătuirii de așa numite macrouri, după necesitățile programului. Un macro este o pseudo-instrucțiune (formal ea arată ca și o instrucțiune standard), creată și definită chiar de către programator, care constă într-o grupare de mai multe instrucțiuni obișnuite și care primește un nume cu care poate apoi fi chemată în programul popriu-zis. Macrourile măresc eficiența programării, deoarece prescurtează programarea și o fac mai facilă. În cursul asamblării macrourile sunt înlocuite cu gruparea de instrucțiuni obișnuite, conform definiției respective, proces care se numește macrosubstituție. Din cauza facilităților de tip macro limbajul "assembler" este numit uneori și "macro assembler".
Într-un sens macrourile se aseamănă cu subprogramele / subrutinele.
Nivele
modificareUn limbaj de programare se află la un nivel "înalt" atunci când, înainte de a putea fi executat, trebuie mai întâi să treacă prin unul sau chiar mai multe filtre de interpretare (compilatoare, medii de rulare).
Cu cât crește nivelul limbajului, cu atât acesta este mai ușor de înțeles de către programator, iar cu cât scade nivelul limbajului, cu atât acesta este mai ușor de "înțeles" pentru calculator. Pentru mărirea eficienței, unele limbaje de programare (cum ar fi C sau Pascal) suportă integrarea unor porțiuni de cod assembler în sursă, obținându-se astfel un cod hibrid.
Asamblarea
modificareAsamblarea este procesul prin care codul sursă, scris în limbaj de asamblare, este transformat în cod mașină sau cod obiect. Codul sursă poate fi dispus pe mai multe module. Procesul invers se numește "dezasamblare".
Etapele asamblării:
- Mai întâi se generează o tabelă de simboluri, ce conține toate numele simbolice din programul sursă, exceptând numele simbolice externe (din alte module), instrucțiuni și directive de asamblare.
- Asamblorul contorizează instrucțiunile și datele, asociind numelor simbolice un "deplasament" față de începutul programului, ca și cum programul ar începe de la adresa 0. În realitate, programul nu se încarcă în RAM la adresa 0, ci de la o adresă furnizată de sistemul de operare, în spațiul de memorie disponibil; această adresă chiar poate de fiecare dată să fie alta. Deci programul furnizat de asamblor trebuie de obicei să fie "relocabil".
- Se obține programul obiect, traducând fiecare instrucțiune și înlocuind numele simbolice cu valoarea sau adresa din tabela de simboluri.
- Programul executabil se obține în urma etapei de editare de legături (linkage edit), care permite legarea mai multor module relocabile într-un singur fișier executabil, rezolvându-se referințele încrucișate dintre ele.
Etapele realizării unui program
modificare"Salut Lume !"
modificareDacă următorul program va fi asamblat cu NASM și executat în DOS, acesta va scrie pe ecran "Salut Lume!"
; tot ce este după ; este considerat un comentariu și este ignorat de către asamblator
org 256 ; fișierele .com mereu încep la 256 de octeți, dar asta trebuie specificat
mov dx, salutare ; instrucțiunea mov mută datele (în cazul acesta adresa din memorie a textului) de după virgulă în registrul de dinainte de virgulă (în cazul acesta dx)
mov ah, 9
int 33 ; int 33 va scrie pe ecran toate caracterele de la adresa din memorie din dx până la $ dacă ah este 9
ret ; termină programul și reîntoarce controlul sistemului de oparare (în cazul acesta, DOS)
salutare: db "Salut Lume!$" ;$ reprezintă sfârșitul textului. el nu va fi printat
Pentru a-l asambla, asumând că directorul în care NASM este instalat este în variabila PATH , că fișierul în care se află codul sursă se numește "salut.asm" și că fișierul executabil se va numi "salut.com" se poate scrie la linia de comandă:
nasm salut.asm -o salut.com
Iar pentru a-l rula, se poate scrie numele fișierului executabil (în cazul acesta "salut.com")
salut.com
Bibliografie
modificare- "Procesoare Intel. Programare în limbaj de asamblare. Ediția II" - Vasile Lungu, Editura Teora, 2004, București