Assembler

Uit Wikipedia, de vrije encyclopedie
(Doorverwezen vanaf Programmeertaal Assembler)
Ga naar: navigatie, zoeken

Een assembler is een vertaalprogramma dat een programma, geschreven in een assembleertaal, kan omzetten naar de machinecode die een processor kan uitvoeren. De assembleertaal wordt zelf ook wel (verkeerdelijk) assembler of assembly genoemd. Assembleren betekent vrijwel letterlijk samenstellen. De "taak" van de assembler is dan ook het samenstellen (vertalen of omzetten) van een machinecode vanuit de assembleertaal waarin het programma geschreven is naar een taal die door de processor kan worden begrepen.

Inhoud

[bewerken] Assembleren en disassembleren

De begrippen assembler en disassembler horen bij elkaar. Assemblers en disassemblers worden vaak gecombineerd, bijvoorbeeld DEBUG.EXE in MS-DOS bevatte beide en was tot aan Windows 7 nog aanwezig in elke Windowsversie. 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.

[bewerken] Assemblers

Enkele assemblers voor de Intel-x86-familie zijn:

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

TASM, de Borland Turbo assembler, heeft een duidelijkere syntaxis dan MASM, maar kan ook de MASM-syntaxis begrijpen. 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, deze assembler is een compleet herschreven versie van de NASM assembler en wordt onder de BSD-licentie uitgebracht. Belangrijkste eigenschappen zijn de ondersteuning van de x86-64-instructieset, en de 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 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.

[bewerken] Uitvoerbare code

De meeste assemblers geven als uitvoer een objectbestand. Gebruikelijke extensies zijn .obj of .o . Dit 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 gemixt project maken. Een besturingssysteem (zoals Mac OS, Linux, DOS of Windows) legt op 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.

[bewerken] Externe links

Bronnen, noten en/of referenties
  1. flatassembler.net
Persoonlijke instellingen
Naamruimten
Varianten
Handelingen
Navigatie
Informatie
Hulpmiddelen
Afdrukken/exporteren
In andere talen