Assembler

Eksempel på assemblersprog

En assembler er et program, som oversætter assemblersprog til maskinkode. Programmer i assemblersprog er typisk lavet automatisk af en oversætter, men det er muligt at skrive programmer direkte i assemblersprog.

En assembler laver maskinkode til en bestemt computertype. Maskinkoden er ikke et færdigt program. Output fra assembleren skal behandles af en linker før, at der kommer et program ud af det.

Virkemåde

Oversættelse fra assemblersprog til maskinkode foregår som oftest i to trin, der hver kræver en gennemlæsning af kildefilen. Først oversættes programmet linje for linje og bagefter indsættes de rette adresser på variabler og funktioner. De to trin gør det enkelt at referere til ting, der defineres senere i programmet end der, hvor de bliver brugt.

I første trin laves en oversigt over alle definerede labels og deres placering i programmet. Desuden laves en tabel med navne, der er defineret i programmet. Disse navne er navne på variabler og funktioner. I tabellen registreres navnene for hvert sted, at der refereres til dem. Herefter sammenholdes de to tabeller, og navnetabellen opdateres med adresser.

I andet trin læses filen på ny og instruktionerne opdateres med konkrete adresser fra navnetabellen. Labeltabellen fortæller, hvor det skal gøres. Til sidst skrives den opdaterede maskinkode ud til en fil.

Det er ikke alle assemblersprog, der forudsætter, at der er defineret en label for alle variabler, men den overordnede mekanisme er den samme. Nogle assemblere læser koden igennem flere gange for at kunne optimere koden og ikke blot oversætte den. Optimeringen kan være at indsætte mere kompakte instruktioner. Hvis der er en instruktion om at hoppe til et andet sted i programmet, og det andet sted er tæt på adressemæssigt, kan der muligvis bruges en kompakt instruktion med et mindre adressefelt.

Kilder

  • SL69 – Arkitektur og programmering ISBN 87-89182-34-0
SoftwareSpire
Denne artikel om software og programmering er en spire som bør udbygges. Du er velkommen til at hjælpe Wikipedia ved at udvide den.

Medier brugt på denne side

Crystal kpackage.png
Forfatter/Opretter: Everaldo Coelho (YellowIcon);, Licens: LGPL
Et ikon fra Crystal-temaet
Motorola 6800 Assembly Language.png

An assembly language listing for a Motorola 6800 8-bit microprocessor. This is a page from a "Monitor" program that communicates to a serial terminal connected to a MC6850 Asynchronous Communications Interface Adapter (ACIA). The routines here initialize the ACIA (INITA), read an ASCII character (INCH) an6800d read a hexadecimal digit (INHEX).

The first line of the INCH routine is located at hexadecimal memory address C010 and has the label INCH in the first text column. The instruction "LDA A ACIA" is a load accumulator A (opcode B6) from location 8004. (The symbol ACIA is defined as 8004 on a previous page.)

This program was used in a single board Motorola MC6802 system that was designed and built as a university project in 1980 by Michael Holley.