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.

Fiecare 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.

Un 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). Nivele:

  • low level: assembler - interacționează aproape direct cu procesorul
  • medium level: C++, Pascal - sursele sunt transformate de compilator în cod mașină
  • high level: Java - pe lângă procesul de compilare, necesită JRE (la fel ca Visual C# și .Net Framework)

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, în codul C++, Visual C++, Basic, Fortran, Pascal sau Delphi pot fi integrate și porțiuni de cod assembler, obținându-se astfel un cod hibrid.

Asamblarea 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:

  1. 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.
  2. 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".
  3. Se obține programul obiect, traducând fiecare instrucțiune și înlocuind numele simbolice cu valoarea sau adresa din tabela de simboluri.
  4. 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.

Asamblarea se poate face cu turboasamblorul TASM, folosind comenzile "tasm nume_fisier" și "tlink nume_fisier".