Asembleris – programa, transliuojanti asemblerio kalba rašytą programos tekstą į objektinį (mašinos) kodą. Nors asemblerio kalba tėra mnemoninis procesoriaus instrukcijų vaizdavimas, ji dažnai suteikia ir patogių papildomų galimybių. Pavyzdžiui, asembleris suteikia galimybę pavadinti atminties vietas (adresus) simboliniais vardais, supaprastindamas programavimą, nes programuojant paprastomis mnemonikomis, kiekvieną kartą keičiant programos tekstą, tektų perskaičiuoti atminties adresus.
Asemblerių rašymas dažnai yra žymiai paprastesnis, nei aukšto lygio kalbų kompiliatorių rašymas. Pirmieji asembleriai atsirado šeštajame dešimtmetyje.
Skirtingai, nei įprastos programavimo kalbos, asembleriai neabstrahuoja procesoriaus ar kompiuterio architektūros, todėl, pvz., vienam procesoriui skirta programa, parašyta asembleriu, negali būti lengvai pritaikyta kitam procesoriui (ar net kompiuteriui, turinčiam tą patį procesorių, bet kitokią architektūrą). Kita vertus, šis architektūros atitikimas leidžia žymiai geriau panaudoti kompiuterio ar procesoriaus galimybes, sukurti kompaktiškesnes ir greitesnes programas.
Modernūs aukštesnio lygio asembleriai naudoja papildomas aukštesnio lygio kalbų abstrakcijas, kaip sudėtingesnės valdymo struktūros, funkcijų rašymas ir kvietimas, aukšto lygio abstraktūs duomenų tipai ir pan. Du labiausiai išvystyti asemblerių atvejai – tai makroasembleriai, turintys makrokalbą, leidžiančią iš apibrėžti dažniau naudojamus kodo fragmentus ar net sintaksės taisykles bei struktūriniai asembleriai, suteikiantys įprastiems asembleriams struktūrinio programavimo (procedūros, ciklai, duomenų tipai ir kiti abstraktai) galimybes.
Nemažai aukštesnio nei asembleris lygio kalbų kompiliatorių pirmiausia generuoja asemberio kodą, pavyzdžiui, GNU C kompiliatoriaus sugeneruotą asemblerio kodą (AT&T sintaksė) galima peržiūrėti komanda
gcc -S failas -o temp && cat temp
Pavyzdys
Asembleriu parašytos programos (DOS operacinei sistemai), į ekraną išvedančios tekstą „Sveikas, pasauli!“, pavyzdys:
code segment
assume cs:code, ds:code
org 100h
start:
mov ah, 9
mov dx, offset hello_msg
int 21h
mov ax, 4c00h
int 21h
hello_msg DB 'Sveikas, pasauli!', 13, 10, '$'
code ends
end start
Nuorodos