article Related Topics:
Assemblers_and_Linkers :: Assembler
 

Assembler är ett sätt att uttrycka maskinkoden för en dators processor på ett sätt som människor kan läsa och skriva. Maskinkod består av mönster av ettor och nollor och är i allmänhet svår för programmerare att använda. Assembler tillåter att bitmönstren istället skrivs med bokstäver och siffror, så kallade mnemoniska symboler, vilket väsentligen underlättar programmerarens arbete. Vidare tillhandahåller assembler möjligheten att använda symboliska namn för minnesadresser.

Det finns assemblerspråk definierade för alla processorer, men varje typ av processor har sin egen assembler. Detta gör att det i allmänhet inte går att använda ett assemblerprogram skrivet för en processor på en annan typ av processor. För att göra det möjligt att flytta program mellan olika processortyper används istället ett högnivåspråk.

En kompilator för ett högnivåspråk översätter programkod skriven i språket till processorspecifik maskinkod och genom att använda olika kompilatorer kan samma högnivåkod användas för olika processortyper.

Det förekommer även att kompilatorn översätter högnivåspråket till en mellannivå, intermediärkod, som vid körningsögonblicket interpreteras. En sådan mellannivå tar ofta mindre plats att lagra, och gör det möjligt att ha maskinneutral körbar kod. Välkända exempel på detta är P-kod för Pascal, och Byte-kod för Java.

Program skrivna i assembler översätts med en assemblator till maskinkod. Maskinkoden, som är binärkod, kan via ett deassemblerande program för processorn direkt läsas ut som assemblerkod vilket normalt inte är möjligt i högnivåspråk. Nackdelen är att läsbarheten är i det närmaste noll då alla hoppadresser vanligtvis listas med nummer, exempel Label_0, Label_1 o.s.v, och variablerna med deras index i dataminnet, alternativt som exempelvis var_0, var_1 o.s.v. Det brukar medföra att om man vill veta programmets funktion så måste man följa koden instruktion för instruktion. För att underlätta det så brukar en monitor i stället användas. Dessa har normalt en dissassemblator inbyggd samt en "trace" funktion som exekverar en instruktion i taget och mellan dessa listar innehållet i processorregistren, stacken och liknande. Därefter inväntas användarens respons innan nästa instruktion utförs.

Exempel


Några exempel på assemblerkod för olika processortyper.

i386/MS-DOS assembler

Följande kod kan köras på ett i386/MS-DOS-system och skriver ut texten "Hello, World!" på skärmen samt avslutar programmet. Programmet använder sig av instruktionen "int" för att anropa operativsystemet för att skriva ut texten på skärmen. Programmet utnyttjar möjligheten att använda symboliska namn; namnet "hello" är ett symboliskt namn för den minnesaddress texten "Hello, World!" befinner sig på.

mov    ah,9 mov    dx,offset hello int 21h mov    ah,4Ch int 21h hello  db 'Hello, World!',0dh,0ah,'$'

MIPS assembler

Följande är ett utdrag ur programkoden för en enkel processhanterare för multitasking på en MIPS-processor. Koden i exemplet är del av den kod som sparar undan register, pekare och stack (sw-instruktionerna) för den aktiva processen och byter till en annan (lw-instruktionerna).

lbu    $t5 0($t2) nop addiu    $t5 $t5 1 nop sb    $t5 0($t2) sw    $t2 4($s1)  ; store $gp sw    $t3 8($s1)  ; store $sp sw    $t4 0($s1)  ; write back pcb1 sw    $s2 0($s0)  ; change curpcb <= pcb2 lw    $k1 0($s2)  ; change CP+4 lw    $gp 4($s2)  ; change $gp <= glob2 lw    $sp 8($s2)  ; change $sp nop b restore nop

Motorola M68k

Adress: MOVE.L A0, $FF8240 ADDI.B #$D0, D1 LEA ($0400,A0), A0 ROL.W (A0) CMP.W D1, (A0) BNE.S Adress RTS

Se även

Programspråk

Assembler (Informatik) | Assembler | Ensamblador | Programme assembleur | אסמבלר | Asembler | Ассемблер

 

This article is licensed under the GNU Free Documentation License. It uses material from the "Assembler".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld