Hva er en datamaskin og hvordan virker den.

(Prinsipper, i store trekk...)

Noen lenker til eldre dokumenter. (Fra andre kurs, så noen av tallene og spesifikasjonene er litt utdaterte...Noen henviser også til ting som ble gjort i andre kurs jeg har hatt.)

En datamaskin må ha minimum disse enhetene for å kunne gjøre noe nyttig:

(I en mikrokontroller vil de fleste av disse komponentene være på en enkelt brikke)

Den såkalte "bussen" er egnetlig 3 forskjellige elektriske ledningsnett som knytter sammen enhetene i maskinen.

CPU:

Mikroprosessoren er hjernen i maskinen og inneholder

Mikroprosessoren har et innebygd mikroprogram i ALU, som er omtrent slik:

  1. Hent instruksjon fra RAM-adressen som Programteller-registeret peker på.
  2. Dekod og tolk instruksjonen
  3. Utfør instruksjonen
  4. Øk programtelleren slik at den peker på neste instruksjon i RAM.
  5. Gå til 1.

Mikroprosessoren utfører altså instruksjoner, i tillegg innebærer dette at den også styrer andre enheter i maskinen ved å sende ut kontrollsignaler på kontrollbussen.

Instruksjons-sett:

Vi sier at en mikroprosessor har et instruksjonssett, d.v.s. mengden av alle mulige enkeltoperasjoner den kan utføre.

De kan klassifiseres omtrent slik:

En mikroprosessor er ikke overvettes "intelligent", den kan bare utføre ca. 300 forskjellige operasjoner, det eneste som får dette til å bli interessant er at den bare bruker noen nanosekunder på hver operasjon.

"Kortidsminnet" er elendig, mikroprosessoren husker ikke hva den gjorde i forrige operasjon en gang, så alt må kladdes og skrives ned i registre og RAM for at det ikke skal glemmes.

Hvis vi ser på klassifiseringen over, er selv 300 operasjoner å ta for hardt i, de fleste er bare forskjellige varianter av samme type instruksjon, så i realiteten kan den ikke mer enn kanskje en 20-30 forskjellige operasjoner, stakkars...

Eksempel på enkelt lite program som ligger i RAM:

Programmet skal legge sammen 21+13=34!

Adresse: Instruksjon: Kommentar:
0 JUMP 5 Hopper til adresse 5, da 2,3 og 4 inneholder data
2 21 Addend
3 13 Addend
4 0 Her skal summen plasseres!
5 LOAD 2 Hent innholdet i RAM-adresse 2 og legg i akkumulator-registeret
7 ADD 3 Legg innholdet i RAM-adresse 3 til det vi allerede har i akkumulator-registeret
9 STORE 4 Legg resultatet i RAM-adresse 4
11 HALT Stopp, ferdig!

Instruksjonene (JUMP, LOAD,...) er her angitt i et såkalt Assembler-språk, som mennesker forstår.

Egentlig ser det kanskje slik ut, maskinen skjønner bare maskinkoder:

Adresse: Instruksjon:
0000 0000 1000 0001 0000 0101=129 5
0000 0010 0001 0101=21
0000 0011 0000 1101=13
0000 0101 0000 0000=0
0000 0101 0000 1010 0000 0010=10 2
0000 0111 0001 1010 0000 0011=26 3
0000 1001 0001 0010 0000 0100=18 4
0000 1011 0000 0000=0

Som man ser, det er ikke særlig lystelig å programmere en datamaskin i maskinkode...

Assemblerkoder gjør det enklere, men de må først oversettes til maskinkode for at mikroprosessoren skal forstå dem.

Dette gjøres av et program som kalles kompilator!

For å få en nykonstruert datamaskin opp og stå, må man altså først lage et primitivt operativsystem, som klarer å laste og lagre andre programmer, og et kompilatorprogram, slik at en kan skrive, kompilere og legge inn nye programmer.

Denne adressen inneholder et program som simulerer en Intel-prosessor: http://www.softwareforeducation.com/

Hvis man er spesielt interessert i mikroprosessorer og såkalt lav-nivå-programmering kan man laste ned programmet og manualen og gå i gjennom øvelsene i manualen.

Senere kom høynivåspråk, hvor en instruksjon ble oversatt til mange maskinkoder, en instruksjon (tilordning) som:

sum=tall1+tall2; 

kan for eksempel ende opp som flere titalls maskinkodeinstruksjoner etter en kompilering.

Oppsummering: