Assembler (software)

Uit Wikipedia, de vrije encyclopedie
Naar navigatie springen Naar zoeken springen

Een assembler is een computerprogramma om tekst in assembleertaal om te zetten naar machinecode. Deze code is direct uit te voeren door een processor. Assembleertaal is een programmeertaal die zeer dicht bij de machine (computerhardware) staat, maar die door gebruik van mnemonics in plaats van getalswaarden gemakkelijker te begrijpen is. De assembleertaal wordt zelf ook wel (verkeerdelijk) assembler genoemd.

Assembleren betekent vrijwel letterlijk samenstellen. De taak van de assembler is dan ook het samenstellen van door de processor uitvoerbare instructies (opcodes met hun eventuele operanden) aan de hand van door mensen leesbare instructies.

Assembleren en disassembleren[bewerken]

De begrippen assembler en disassembler horen bij elkaar. Assemblers en disassemblers worden vaak gecombineerd, zo bevatte bijvoorbeeld DEBUG.EXE (geleverd met MS-DOS en tot aan Windows 7 nog in elke Windowsversie aanwezig) beide. Ze zijn een onderdeel van elk pakket waarmee embedded systemen ontwikkeld worden, maar ook veel geïntegreerde ontwikkelsystemen voor hogere programmeertalen bevatten een disassembler.

Het assembleerprogramma is tegenwoordig meestal geschreven in een hogere programmeertaal (bijvoorbeeld C++). In het verleden waren deze programma’s over het algemeen geschreven in de assembleertaal van de doelmachine. Indien een programma geassembleerd werd op een andere machine met een ander type processor of in een hogere taal werd gesproken over een cross-assembler.

Assemblers[bewerken]

Enkele assemblers voor de Intel-x86-familie zijn:

MASM, de Microsoft assembler, probeert assembly meer op een hogere programmeertaal te laten lijken en heeft daardoor een soms vreemde syntaxis. Deze assembler was een van de eerste assemblers voor de x86.

TASM, de Borland Turbo assembler, kent naast de MASM-syntaxis ook een eigen syntaxis. Ook deze assembler was er vroeg bij en is daarom ook vaak de keuze van de oude garde.

NASM, de Netwide assembler, een redelijk nieuwe assembler met een zeer simpele syntaxis waarin alles duidelijk gezegd moet worden en niets wordt aangenomen. Deze opensourcesoftware is geschikt voor mensen die alles in de hand willen houden. Deze assembler is geschikt voor het schrijven van de bootloader van een besturingssysteem vanwege de perfecte controle over het uiteindelijke resultaat.

YASM, een compleet herschreven versie van NASM, wordt onder de BSD-licentie uitgebracht. Belangrijkste eigenschappen zijn de ondersteuning van de x86-64-instructieset, en de bijbehorende uitvoer van PE COFF64 en ELF64-bestandsformaten (naast (PE) COFF(32), ELF32 en BIN).

FASM, de Flat assembler, is ook een opensource-assembler. Ook FASM ondersteunt de x86-64-instructieset.[1]

Verder heeft elke (microprocessor-)familie zijn assemblers. Dit geldt bijvoorbeeld voor Microchip (PIC), Freescale (voorheen Motorola), Renesas (voorheen onder andere Mitsubishu), Atmel, ARM.

De bekende GNU Compiler Collection (GCC) vertaalt altijd de hogere code (bijvoorbeeld C) eerst naar assembly, niet direct in objectcode. Dit betekent dat voor elke processor waarvoor GCC geïmplementeerd is, er een assembler ter beschikking moet staan.

Uitvoerbare code[bewerken]

De meeste assemblers geven als uitvoer een objectbestand. Gebruikelijke extensies daarbij zijn .obj en .o . Een objectbestand moet omgezet worden in een uitvoerbaar bestand (bijvoorbeeld een .exe of een ELF-executable onder Unix-varianten) voordat het uitgevoerd kan worden. Dit doet men door linken. Met het linken kunnen ook twee of meer object-bestanden samengevoegd worden. Doordat compilers van hogere programmeertalen in het algemeen ook objectbestanden leveren, kan men zo een gemengd project maken. Het besturingssysteem (zoals Mac OS, Linux, DOS of Windows) schrijft voor hoe het objectformaat is en biedt dan ook de linker aan.

Programma's voor embedded processoren worden vaak direct in uitvoerbare vorm gegenereerd. Dit kan een zogenaamd image zijn, waar byte voor byte dezelfde code in zit als in de processor komt te staan. Het kan ook een leesbaar tekstbestand zijn, die de inhoud als hexadecimale codes bevat en verdere informatie, zoals het adres waar de code komt te staan. De twee bekendste formaten zijn het Motorola S-formaat, en het Intel hex-formaat. Deze formaten worden ook wel vanuit een objectbestand gegenereerd.

Externe links[bewerken]