Ett assembleringsspråk (ofta kallat assembler) är ett programmeringsspråk som används för att direkt tala om för datorn vilka enkla steg den ska utföra. Ett assemblerspråk motsvarar nästan exakt den maskinkod som en processor kan köra, men använder korta textord (mnemonics) i stället för råa siffror. Datorn kan inte köra ett assemblerprogram direkt i textform; ett separat program kallat assembler översätter assemblerkoden till maskinkod (binärt format) som processorn kan förstå.

Hur det fungerar

Ett assemblerprogram består av en serie instruktioner som berättar för processorn vilka operationer som ska utföras—till exempel att flytta data mellan register och minne, göra aritmetiska beräkningar eller hoppa till en annan kodrad. Den del av datorn som utför instruktionerna är processorn. Varje instruktion motsvarar vanligtvis en maskinkodsoperation och kan ha noll eller flera operander (t.ex. register, omedelbara värden eller minnesadresser).

Komponenter i ett assemblerprogram

  • Instruktioner (mnemonics) — t.ex. MOV, ADD, SUB, JMP.
  • Register — små, snabba lagringsplatser i processorn (t.ex. EAX, R0).
  • Minne och adressering — sätt att läsa/skriva data i minnet (direkt, indirekt, indexerad adressering).
  • Etiketter (labels) — namn som pekar på en plats i koden för hopp och referens.
  • Direktiv — instruktioner till assemblersprogrammet (t.ex. .data, .text, .byte) som inte blir maskinkod men påverkar hur koden länkas eller var data placeras.
  • Makron och villkorlig assemblering — sätt att återanvända kod och skapa variantkompilering beroende på konfiguration.

Exempel (enkel illustration)

Nedan visas två mycket enkla exempel som illustrerar syntaxskillnader mellan vanliga arkitekturer.

 ; Intel x86 (NASM-liknande syntax) section .text global _start _start:     mov eax, 5      ; lägg 5 i register eax     add eax, 3      ; lägg till 3 -> eax = 8     ; ... vidare kod för att använda resultatet  ; ARM     MOV R0, #5     ADD R0, R0, #3  ; R0 = R0 + 3 

Ovanstående visar hur enkla operationer som att tilldela och addera skrivs i assembler. I ett verkligt program krävs ofta fler instruktioner för att hantera minne, anropa funktioner och kommunicera med operativsystemet.

För- och nackdelar

  • Fördelar: mycket fin kontroll över hårdvaran, möjlighet till extremt optimerad och kompakt kod, nödvändigt i systemnära kod som bootloaders, drivrutiner och inbyggda system.
  • Nackdelar: svårare att läsa och underhålla än högnivåspråk, tidskrävande att utveckla, starkt beroende av processorarkitektur (inte portabelt mellan olika CPU-typer).

Användningsområden idag

Trots att de flesta applikationer skrivs i högnivåspråk används assembler fortfarande i situationer där prestanda, storlek eller hårdvarukontroll är avgörande:

  • inbyggda system och mikrokontroller
  • operativsystemskärnor och drivrutiner
  • tidskritiska kärnfunktioner eller algoritmer (t.ex. kod för signalbehandling)
  • reverse engineering och säkerhetsanalys (disassemblering)
  • uppstartsprogram (bootloaders) och vissa realtidsapplikationer

Verktyg och utvecklingsflöde

Utveckling i assembler involverar vanligen flera verktyg:

  • Assembler: översätter assemblerkoden till objektfiler (t.ex. NASM, MASM, GAS).
  • Linker: sammanfogar objektfiler och bibliotek till körbar kod.
  • Debugger: används för att stegköra instruktioner och inspektera register och minne.
  • Disassembler: omvandlar maskinkod tillbaka till läsbar assemblerkod vid analys.

Tips för att läsa och skriva assembler

  • Lär känna processorns register och instruktioner — de är byggstenarna i all assemblerkod.
  • använd etiketter och kommentarer flitigt för att göra koden begriplig.
  • börja med små funktioner och testa i debugger för att förstå beteendet.
  • när prestanda krävs, skriv kritiska delar i assembler men håll resten i ett högnivåspråk för läsbarhet.

Sammanfattningsvis är assemblerspråk ett kraftfullt men specialiserat verktyg för programmering nära maskinvaran. För enkla eller högnivåuppgifter förenklar moderna programmeringsspråk utveckling kraftigt, men när maximal kontroll eller effektivitet krävs är assembler ofta det rätta valet.