Hopp til innhald
Fagartikkel

Frå kjeldekode til maskinkode

Programmering blir som oftast gjord med høgnivåspråk som Python, JavaScript, Java, C#, C++ og C. For at kjeldekoden (source code) vi utviklar skal kunne køyre på ei datamaskin, må han kompilerast til maskinkode (computer executable).

Maskinkode

Datamaskiner køyrer ved hjelp binære instruksjonar. Kvar enkelt instruksjon er ein enkel operasjon prosessoren skal gjere, som til dømes å samanlikne to tal, gjere ei utrekning eller flytte data mellom register.

Ein enkelt instruksjon ikkje så nyttig aleine, men når vi set dei saman i sekvensar av fleire instruksjonar som blir gjorde etter kvarandre, er det meste mogleg. Dette er den store styrken til moderne datamaskiner. Ein sekvens av instruksjonar kallar vi for maskinkode (computer executable).

Maskinkode må vere tilpassa instruksjonssettet til prosessoren (til dømes x86, ARM64 og RISC-V), slik at alle instruksjonane kan utførast slik koden krev.

Det er mogleg å programmere direkte i maskinkode, men dette er uvanleg sidan programmering av binære instruksjonar er tidkrevjande og vanskeleg for dei fleste. Maskinkoden vil dessutan berre fungere på det eine instruksjonssettet han er skriven for, noko som er upraktisk i ei verd med mange instruksjonssett i bruk. Det meste av programmering blir derfor gjort i eit programmeringsspråk.

Programmeringsspråk

Det finst hundrevis av ulike programmeringsspråk. Nokre av dei vanlege høgnivåspråka vi har, er Python, JavaScript, Java, C#, C++, C og GO.

Kvart programmeringsspråk har strengt definerte reglar for korleis koden skal formast ut (syntaks). Dette kan samanliknast med grammatikk i språk, berre mykje strengare.

Lågnivå-programmeringsspråk

Det er uvanleg å skrive binær maskinkode direkte. Prosessen er rett og slett for tidkrevjande og vanskeleg for dei aller fleste. Men i nokre tilfelle er det ønskeleg å skrive kode som er så nært maskinkode som mogleg.

I lågnivåspråk (Assembly language) har vi berre dei instruksjonane som instruksjonssettet har tilgjengeleg, og kvar linje med kode svarer til ein instruksjon maskina skal gjere.

Eit døme på ei Assembly-kodelinje kan vere

mov ecx, ebx

Instruksen (mov) flyttar innhaldet i register (ecx) over til register (ebx).

Programmering i Assembly kan gi ein meir effektiv kode, som køyrer raskare og bruker mindre ressursar, enn kode skrive i eit høgnivåspråk. Det er likevel såpass avansert at det berre er heilt spesielle område der det blir gjort, til dømes mikrokontroller-programmering.

Kode som er skriven i Assembly blir omgjord til maskinkode ved hjelp av programvare vi kallar ein assembler.

Høgnivå-programmeringsspråk

Det meste av programmering blir gjort i det vi kallar høgnivå-programmeringsspråk. Desse språka skal vere brukarvennlege og har syntaks som er logisk for menneske å forstå.

Ei linje med kode skriven i eit høgnivåspråk vil ofte svare til mange instruksjonar med køyrekode når ho er omgjord.

Kompilering

Høgnivå-programmeringsspråk bruker ein kompilator for å gjere om den skrivne kjeldekoden til køyrekode. Kompilatoren tek den skrivne koden og dei biblioteka som er inkluderte, inn i koden og lagar køyrekode av dei.

Kompilatorane er laga for å kunne lage køyrekode til ulike typar prosessorar (som bruker ulikt instruksjonssett). Dette gjer at kode som er skriven i eit høgnivåspråk, kan kompilerast for å fungere både på x86 og ARM64 utan for mykje ekstraarbeid.


Dei fleste feil vi gjer i programmering, er anten logiske feil eller syntaksfeil.

Logisk feil

Ein logisk feil oppstår når logikken i programmeringa ikkje blir rett. Til dømes kan dette vere at vi ønsker å legge saman to tal, men ved feil gongar saman tala.

Syntaksfeil

Syntaksfeil oppstår når vi ikkje følger grammatikken i programmeringsspråket rett, til dømes ved å skrive ; i staden for :, eller ved at vi blandar store og små bokstavar i språk som er sensitive for dette.

Relatert innhald

CC BY-SA 4.0Skrive av Tron Bårdgård.
Sist fagleg oppdatert 27.03.2022