Most recent comments
Liveblogg nyttårsaften 2017
Tor, 11 months, 2 weeks
Jogging og blogging
Are, 1 year, 11 months
Liveblogg nyttårsaften 2016
Are, 1 year, 11 months
Reading in dark times
Are, 2 years
Moldejazz 2016
Camilla, 2 years, 4 months
Dørskilt
Karoline, 2 years, 5 months
Halifax
Tor, 2 years, 5 months
Sony Smartwatch 3 review
Tor, 2 years, 6 months
Numerikk, takk
Tor, 2 years, 6 months
Topp tur
Camilla, 2 years, 8 months
50 book challenge
Camilla, 11 months, 2 weeks
Ten years ago
Kurs for brukere
Tor
Controls
Register

Assembly

Det er vanlig blant doktorgradsstudenter i Storbritannia å snakke om noe som kalles «second year blues». Jeg tror det er en slags blanding av mange følelser, delvis at forskningen ikke fullt så spennende som man hadde trodd, kanskje man er usikker på om man kommer til å få en jobb, pluss at man begynner å føle presset for å bli ferdig. Jeg tror ikke dette er så vanlig i Norge, og jeg gjetter på at det skyldes at vi gjennomsnittlig er litt eldre når vi begynner på doktorgrad, pluss at doktorgraden faktisk er en jobb med normal lønn. Jeg husker i allefall mitt andre år som en lykkelig tid uten bekymringer.

Jeg begynner imidlertid å føle en slags «final year blues» nå. Jeg regner jo med at jeg blir ferdig sånn omtrent på tiden, og jeg regner også med at jeg greier å skaffe meg en jobb, men jeg begynner å føle en slags snikende frykt for at jeg snart er ferdig med å lære nye ting. Det er åpenbart ikke sant, i allefall ikke hvis jeg får en spennende jobb, men det er likevel en del ting man ikke lærer seg mens man jobber. For eksempel assembly.

For de som ikke vet hva assembly er tenkte jeg å ta en kjapp gjennomgang av programmeringens historie, slik jeg ser for meg at det godt kan ha vært. Til å begynne med hadde man datamaskiner der komponentene ble skrudd sammen for å utføre én bestemt oppgave. Ville man programmere den om måtte man bygge om maskinen. Så kom etterhvert maskiner der man kunne endre oppførselen ved å bytte om på ledninger, som en gammeldags telefonsentral, og etterhvert maskiner som kunne programmeres mer som vi mener det i dag, ved at man ikke trengte å koble om ting, men kunne legge ulike programmer i minne. Skjønt dette skjedde fortsatt i maskinkode, skrevet med binære tall, så det var en aktivitet for spesielt interesserte.

Og her kommer vi til assembly. Assembly, også kalt assembly language, ligger et lite hakk over maskinkode, ved at man innførte kommandoer for de mest grunnleggende operasjonen, slik som «putt tallet 16 på minneadresse 43» og «legg sammen 12 og tallet som ligger i minneadresse 01, og skriv resultatet til minneadresse 01». Når man så hadde skrevet assembly kunne man bruke noe som kalles en assembler for å oversette dette til maskinkode, som maskinen kan kjøre.

Sener fikk man nyskapende ting som FORTRAN, som kom i 1957, og lot deg for eksempel legge sammen to tall uten å måtte ha direkte kontroll på minneadresser. På et eller annet tidspunkt dukket også hullkortene opp, uten at jeg er skråsikker på hvordan de passer inn i det store bildet, men de forsvant heldigvis igjen. Videre fikk man språk som lisp (1958), COBOL (1959), C (1973), C++ (1983), Perl (1987), Haskell (1990), Java (1991), Python (1991), Lua (1993) og JavaScript (1995), og det har nok vært en generell trend at man har beveget seg lengre og lengre bort fra hvordan maskinen faktisk fungerer. I løpet av denne utviklingen har man ofret noe ytelse, men til gjengjeld har man fått språk som gjør det praktisk mulig med store kodeprosjekter skrevet av hundrevis av mennesker.

For min egen del er jeg imidlertid mer opptatt av ytelse enn brukervennlighet, og kanskje mest av alt opptatt av kombinasjonen teoretisk ytelse og skikkelig dårlig brukervennlighet, jamnfør min besettelse med fluefiske. Og derfor har jeg altså lyst til å lære meg assembly. Pluss at det høres fryktelig barskt ut. Les bare dette utdraget av en epost jeg fikk fra mannen på support når jeg spurte om det var mulig å kjøre med 80-bits presisjon:
Hardwareregistrene til AMD hadde, sist jeg så etter, 16 ekstra-bit (80 vs. double=64) nettopp for å hjelpe med presisjonstap i mellomresultater, men hvis du vil skrive et program som stoler på å bruke dem, må du nesten
a) vippe frem assembleren
b) utføre en tarmskylling på fortrankompilatoren for å finne hvilken av 3 konkurrerende non-standarder for funksjonskall den har størst tro på
c) blåse en lang marsj i å kjøre koden uforandret på nye/andre maskiner.

Seriøst? Får ikke du også lyst til å lære assembly, slik at du kan finne frem assembleren når det trengs?

Jeg gjorde et lite søk etter en assembly-tutorial, for det er slikt man gjør når man egentlig burde skrive artikler og avhandling, og jeg fant opptil flere lovord om en bok som heter The Art of Assembly Language, som finnes i opptil flere papirutgaver, og dessuten som en 1400-siders pdf man lett finner med Google. Jeg begynte å lese litt i den, og en stund trodde jeg faktisk den var ganske ny, helt til jeg kom over denne biten, i seksjonen med gode argumenter for å lære assembly:
If you give someone an inch, they’ll take a mile. Nowhere in programming does this saying have more application than in program memory use. For the longest time, programmers were quite happy with 4 Kbytes. Later, machines had 32 or even 64 Kilobytes. The programs filled up memory accordingly. Today, many machines have 32 or 64 megabytes of memory installed and some applications use it all.

Jeg merker meg imidlertid at det finnes en oppdatert papirutgave fra 2010, og den vurderer jeg seriøst å kjøpe. Den virker i allefall godt skrevet, og de få sidene har jeg lest så langt har vært svært interessante.
Are likes this

Comments

Camilla,  26.08.12 22:53

Prokrastinering. Jeg forstår.
Karoline likes this
Tor,  26.08.12 22:58

Jeg er helt sikker på at assembly vil gjøre meg mer attraktiv på arbeidsmarkedet. Eller i allefall på et lite subsett av arbeidsmarkedet.

Anders K.,  27.08.12 07:24

jeg begynner å føle en slags snikende frykt for at jeg snart er ferdig med å lære nye ting

Da kan du glede deg til arbeidslivet. Det er ingen steder i verden du lærer så mye som der.
Jørgen likes this
Tor,  27.08.12 07:41

Er det ikke det som kalles erfaring, og som er nesten som læring bare at du ikke får velge tema selv?

Anders K.,  27.08.12 14:36

Jeg ser nå at vi kommer fra to helt forskjellige verdener.
Jørgen likes this

Are,  27.08.12 19:12

Assembly, det er barskt, det. Jeg skrev en bootloader i assembly på skolen. :)
Are, Tor likes this

Wow

Tor,  27.08.12 19:40

Ikke at min respekt for deg var dårlig til å begynne med, men den steg nettopp med to hakk.

Forøvrig, når jeg har levert doktograden skal jeg implementere geotagging av kommentarer, slik at det for eksempel hadde vært mulig å se at jeg skriver dette fra Estenstadhytta.
Are likes this

Are,  27.08.12 22:08

Godt at jeg endelig fikk noe konkret ut av min assemblykompetanse. ;)
Ikke for det - jeg er veldig fornøyd med den bedrede helhetsforståelsen av EDB som jeg fikk ved å lære litt assembly.
Tor likes this

Aha

Tor,  27.08.12 22:26

Det med helhetsforståelsen tror jeg er en viktig grunn til å lære assembly. Jeg husker godt at jeg hadde en aha-opplevelse for noen år tilbake da jeg innså at det faktisk er trivielt å regne ut hvor mye minne man trenger til å holde et array, og tilsvarende da jeg optimerte bort en vesentlig andel av kjøretiden vår ved å endre rekkefølgen vi loopet over et array i. Jeg ser ikke bort fra at det finnes flere tilsvarende fundamentale ting jeg kunne oppdage om jeg satte meg ned med The Art of Assembly Language.

Ole Petter,  27.08.12 23:37

Det heter vel "assembler" på norsk? Det hadde vært interessant å lære, men huff så "lavt" nivå... Jeg synes C er fælt nok.
Tor,  27.08.12 23:44

Virkelig? Det er i såfall gode nyheter. På engelsk er det jo slik at assembly er språket (eller språkene, ett eller flere for hver prosessor) og assembler er "kompilatoren", men assembler er jo helt klart et mye kulere ord, så om jeg rent hypotetisk kunne si ting som at «jeg skrev det innerste funksjonskallet i assembler og sparte en faktor 2» er det plutselig langt mer fristende.

Ole Petter,  28.08.12 19:38

Det ser ut som om Wikipedia er enig: https://no.wikipedia.org/wiki/Assembler

For så vidt synes jeg «jeg skrev det innerste funksjonskallet i assembler og sparte en faktor 2» er en ganske imponerende setning uansett om man sier assembler eller assembly :)
Category
Technology
Tags
programmering
assembly
Views
2885
Last edited by
Tor, 26.08.12 22:46