Asembleris

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 

 LinuxAssembly bendruomenė
 NASM kompiliatorius
 YASM kompiliatorius
 ALD debugeris

Programavimas
Programavimo kalbos

en:Assembly language#Assembler

pt:Assembly#Montador