Un limbaj de asamblare este o modalitate de nivel scăzut de a instrui un computer să îndeplinească o sarcină. Calculatoarele nu înțeleg în mod inerent instrucțiunile de la oameni. La cel mai elementar nivel, computerele înțeleg instrucțiuni în limbaj binar, adică secvențe de zerouri și unu. Cu toate acestea, limbajul binar sau limbajul mașină este extrem de greoi de programat. Limbajul de asamblare a fost inventat ca o reprezentare simbolică a secvențelor subiacente de zerouri și unu.
Să presupunem că ar trebui să programăm un joc care, la o anumită acțiune, acordă jucătorului cinci puncte. Calculatorul păstrează scorul într-o anumită locație; locațiile sunt fie un loc de stocare în CPU, numit „registru”, fie într-un anumit spațiu din memorie. Computerul înțelege locațiile și acțiunile de nivel scăzut numite operațiuni. Deci, dacă scorul este păstrat la registrul RA, atunci înțelege comanda, 0101 1100 0000 0101, unde primele patru numere indică operația ADD, următoarele patru indică registrul RA, iar ultimele opt indică numărul 5.
Inițial computerele trebuiau codificate în acest fel; limbajul mașinii este lent, predispus la erori și poate fi foarte greu pentru o persoană să înțeleagă ce încearcă o altă persoană să codifice. Așadar, programatorii de computere au creat un limbaj în care operațiunile, locațiile, numerele etc., pot fi mai bine înțelese. Astfel, comanda echivalentă pentru exemplul de mai sus ar fi ADD RA 5. În acest exemplu ipotetic, mnemonicii sunt folosite pentru operația ADD și registrul RA, iar numărul 5 este scris în cifre.
Un program numit asamblator convertește codul limbajului de asamblare în limbajul mașină de bază. În zilele anterioare, chiar și această conversie consuma resurse de calcul costisitoare, astfel încât codurile operaționale, codurile operaționale pe scurt, cum ar fi Subtract, au fost abreviate ca SUB, Copy-Move a fost abreviat ca MOV și în unele cazuri chiar ADD a fost abreviat la A.
Limbajul de asamblare este în mare parte un strat subțire deasupra structurii mașinii. Prin urmare, codurile operaționale, registrele și întreaga limbă depind foarte mult de familia CPU. Deci, familia Intel x86 are opcodes precum MOV, MOVSX și MOVZX, în timp ce IBM 360 are opcodes precum MVI, MVC, MVZ. Atunci când proiectează un computer sau un procesor, designerii specifică limbajul mașinii, inclusiv codurile operaționale.
Programatorii s-au mutat curând la limbaje „de nivel înalt” precum COBOL, Pascal, C++ și SQL. Compilatorii convertesc codul scris în aceste limbi în limbaj mașină. Codul de asamblare este încă folosit pentru procesoarele specializate, totuși, sau pentru asigurarea vitezei de la consolele de jocuri la sistemele auto.