A gépi kódú programozási nyelv hátrányai miatt új nyelvet kellett kifejleszteni.
Az ASSEMBLY nyelv első közelítésben a ’megérthető gépi kód’ nyelve. Az utasítások számkódjait néhány betűs (2-3-4 betűs) ún. mnemonikokkal helyettesítették. Egy ilyen mnemonik (emlékeztető szócska) a gépi kódú utasítás jelentéstartalmára utalt. Például a „memória-tartalom beolvasása egy regiszterbe” (bemozgatás) az angol MOVE=mozgatni szó alapján a MOV mnemonikot kapta. A „két szám összeadása” az angol ADD=összeadni mnemonikot kapta. Az 1. ábrán a harmadik oszlopban szerepelnek a gépi kódú utasítások assembly nyelvű megfelelői.
A MOV utasítás önnmagában nem lefordítható gépi kódra, hiszen azt is meg kell adni, hogy melyik memória-cím tartalmát kell betölteni melyik regiszterbe. Az utasítás egyik lehetséges formája „MOV EAX,<memcím>”. Ennek már egyértelműen megfelel egy gépi kódú utasításkód (mov eax = 8B), a memóriacímet pedig a további számkódok írják le.
Ennek megfelelően az assembly nyelv egy adott mikroprocesszor adott gépi kódjához készült el. Ezért az assembly nyelv is processzor-függő, de ezen a szinten újabb fogalmak jelentek meg:
Forráskód: az assembly nyelvű programot a CPU nem képes közvetlenül megérteni és végrehajtani. Az assembly nyelvű programot egy szöveges file-ban kell megírni (forráskód), majd le kell fordítani gépi kódú, ún. tárgyprogramra (object code).
Fordítás: az a folyamat, amely közben a forráskódot egy fordítóprogram (compiler) gépi kódú utasítások sorozatára transzformálja.
Az assembly nyelv esetén ezt a fordítóprogramot ASSEMBLER-nek nevezték. Az assembler végigolvasta a forráskódot sorról-sorra, e közben generálta a gépi kódú utasítássorozatot - a mnemonikok alapján előállította a megfelelő gépi kódú utasítás számkódját. Az assembler nem bonyolult program, hiszen a fordítás egyszerű szabályok szerint működik.
Az ASSEMBLER a forráskód feldolgozása közben egyszerű ellenőrzéseket is elvégez. Amennyiben valamely mnemonikot nem ismeri fel (pl. a programozó elgépelte), akkor a fordítási folyamat leáll, az assembler hibaüzenettel jelzi a hiba okát és helyét a forráskódban. A forráskódban az olyan jellegű hibákat, melyek súlyossága folytán a fordítás nem fejezhető be – fordítási időben történő hibának nevezzük. Ennek oka általában a nyelv szabályai (szintaktikája) elleni vétség, ezért ezt szintaktikai hibának is nevezzük.
Az assembly nyelvű programok forráskódja olvashatóbb, mint a gépi kód, illetve könnyebben módosítható. Az assembler a program szintaktikai helyességét ellenőrzi le, emiatt az első eszköznek is tekinthetjük, amelyet a programozók munkájának segítésére (is) alkottak.
A fordítás ellenkező művelete a de-compiling. Ennek során a gépi kódú program-változatból a programozó megpróbálta visszaállítani annak assembly nyelvű eredetijét. Erre sokszor azért volt szükség, mert az eredeti forráskód elveszett, de a programon mégis módosítani kellett. A gépi kódú programok módosíthatóságának nehézségét jelzi, hogy az assembly-programozók már nem voltak hajlandók közvetlenül a gépi kódot módosítani, inkább helyreállították az assembly forráskódot, abban elvégezték a módosításokat, majd újra lefordították (generálták) a gépi kódú programot.
Ez a művelet persze némi veszteséggel járt – hiszen a tényleges eredeti assembly forráskódban többek között megjegyzések is lehettek. Ezek a megjegyzések a gépi kódú változatba nem kerültek bele, ezért visszaállítani sem lehet őket.
Ami viszont nagyon fontos lépés – a fordítóprogramok megjelenésével megjelent az igény ezek intelligenciájának fejlődésére!