Maskinkod

Från Rilpedia

Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

Maskinkod (även kallat maskinspråk eller binärkod) är det "språk" en dator direkt förstår och klarar att exekvera. Varje processortyp har sin särskilda maskinkod som är ett uttryck för dess instruktionsuppsättning. Ett datorprogram i något programspråk (den sk källkoden) kan antingen direkt tolkas och utföras via en interpretator eller översättas med en kompilator till maskinkod som i sin tur direkt kan köras, något som normalt ger bättre prestanda.

Maskinkod består av relativt enkla kommandon såsom "addera register B till register A", "jämför register A med innehållet i minnescell 123456", "hoppa till adress 234567 om det var lika" och dylikt. Varje sådan instruktion representeras av ett eller flera binära ord (binära tal med fix längd) vars längd (typiskt 8,16, eller 32 bitar) och precisa användning varierar med CPU-typ. En enkel operation, som att exempelvis omvandla en sträng av bokstäver till stora bokstäver, kan innebära många individuella maskinkodsinstruktioner. Varje instruktion består av ett eller flera ord som kodar för en viss operation, följd av eventuella argument i form av konstanter eller adresser, offset, etc till platser där data lagras. Argument kan lagras i samma ord som operationskoden eller i separata ord beroende på ordlängd, arkitektur, och/eller instruktionstyp. (då ordlängden vida överstiger vad som behövs för att representera alla operationer så används ofta resten av ordet för argument på något sätt, se instruktionsuppsättning).

Bitarna i en instruktion kan var och en direkt styra en funktion i processorn, t.ex. så att en bit anger att ett visst register skall användas, en annan att det är frågan om addition, en tredje att en operand skall hämtas med en viss typs minnesadressering o.s.v. men normalt används rätt mycket avkodning för att begränsa antalet bitar och därmed spara minne; ursprungligen för att arbetsminnet var begränsat, men numera för att mer skall rymmas i cache-minnet och därmed ge bättre prestanda.

Maskinkod är ganska svårtolkad för människor; ett maskinkodsprogram består av sekvenser av binära ord utan någon uppenbar struktur. Utan att veta hur en specifik maskin indelar och tolkar dessa ord, kan man inte ens avgöra vilka av orden som är instruktioner eller data. Maskinen vet dock hur lång varje typ av instruktion (inklusive argument) är och när den har tolkat en instruktion så vet den därför var nästa instruktion ligger. För att underlätta manuell maskinspråksprogrammering använder man en "symbolisk maskinkod", assembler, där maskinkodens instruktioner representeras av korta "minnesord" (engelska: mnemonics) och symboliska (namngivna) minnesadresser och konstanter. Denna kod översätts sedan till maskinkod av en assemblator (omvänt av en disassembler).

Också om nästan alla datorprogram idag skrivs på något högnivåspråk (se programspråk), är förståelse för maskinkod väsentlig i speciella fall, t.ex. då man skriver en kompilator eller en drivrutin för en hårdvaruenhet, eller då man optimerar kod som väsentligt påverkar ett datorprograms effektivitet eller då man söker efter vissa typer av fel.

Ett datorprogram består inte enbart av de maskinkodsinstruktioner och det data som krävs för utförande av en viss uppgift, utan också av datastrukturer som krävs för samarbete med operativsystemet, länkning till programbibliotek, felsökning m.m.

Se även

Personliga verktyg