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.
Mikroprosessoren er hjernen i maskinen og inneholder
Mikroprosessoren har et innebygd mikroprogram i ALU, som er omtrent slik:
Mikroprosessoren utfører altså instruksjoner, i tillegg innebærer dette at den også styrer andre enheter i maskinen ved å sende ut kontrollsignaler på kontrollbussen.
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...
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.