1.3.9 Mikroprosessor

Mikroprosessoren danner grunnlaget utviklingen innen moderne datateknologi, datastyring og informasjons- og kommunikasjonsteknologi (IKT). I 1971 presenterte Intel den første kommersielle mikroprosessoren. Det var en 4-bits prosessor med betegnelsen Intel 4004 beregnet for bruk i regnemaskiner. Bare noen måneder senere var den første 8-bits mikroprosessoren med betegnelsen Intel 8008 på markedet. Siden er utviklingen gått slag i slag frem til dagens 64 bit prosessorer.

En mikroprosessor eller CPU (Central Processor Unit) utgjør selve hjernen i en datamaskin. For at den skal kunne gjøre jobben sin, må den imidlertid være plassert i et system der den kan hente inn og legge ut informasjon. Denne informasjonen går via systemets databuss (DB). Foruten selve CPU-en består systemet av hukommelse, databuss, adressebuss, kontrollbuss og I/O enhet (Input/Output). Via I/O kan prossessoren kommunisere med eksterne enheter.

Mikroprosessorens oppbygning

Selve mikroprosessoren kan bestå av diverse registre og intern hukommelse. ALU (Arithmetic Logic Unit) utfører prosessorens arimetisk-logiske operasjoner. For å forklare en mikroprosessors prinsipielle oppbygning skal vi ta utgangspunkt i en noe eldre og forholdsvis enkel men populær 8-bits mikroprosessor kjent som MOS Technology 6502 eller bare 6502. Den har en forholdsvis enkel arkitektur, men ble likevel brukt i Apple sine første datamaskiner. 6502 er fremdeles i bruk i visse sammenhenger.

Et viktig register er A-registeret (akkumulator) som er et arbeidsregister som prosessoren benytter for mellomlagring av data som den henter inn eller sender ut på databussen. Det benyttes også under regneoperasjoner og samarbeider derfor med ALU. Et annet viktig register som vi kan merke oss er statusregisteret (også kalt flaggregister). Andre sentrale enheter er programteller, adressedekoder og instruksjonsdekoder.

Hukommelseskart

Når vi skal utarbeide program eller gjøre endringer i systemets funksjon eller eksisterende program, er det nyttig å ha oversikt over systemets hukommelse. Denne oversikten kan vi få ved hjelp av et hukommelseskart. Både ROM og RAM inngår i hukommelsen og eventuelt andre lese/skrivelager. Også I/O-delen kan betraktes som en del av hukommelsen.

Program

For at mikroprosessoren skal kunne utføre en hvilken som helst jobb, må den ha et program. Programmet ligger lagret i systemets eller datamaskinens datalager eller hukommelse som instruksjoner som hver for seg har sin egen dataadresse. Når programmet skal utarbeides, skrives dette som instruksjoner og lagres i hukommelsen som binære koder, også kalt maskinkoder eller maskinprogram. Programmet kjøres ved at prosessoren henter inn en og en instruksjon, utfører den og lagrer resultatet. Dette kan eksempelvis være en regneoperasjon der to tall fra to ulke adresser skal adderes og resultatet legges tilbake på en tredje adresse.

Egentlig kan programmet skrives som rene binærkoder på 8 bit eller som hexkoder som umiddelbart omgjøres til binærkoder. Når programmene får en viss størrelse kan dette bli ganske komplisert, arbeidskrevende og uoversiktlig. Det er derfor blitt utviklet ulike programmeringsspråk, såkalt assemblerkode, tilpasset den enkelte mikroprosessortype. Disse kodene eller instruksjonene forteller noenlunde i forkortet klartekst hvilken operasjon som skal utføres. Dette kalles kildekode. Prosessorer av typen 6502 har 56 slike instruksjoner. Assemblerkodene eller kildekoden må oversettes til maskinkode før de kan behandles av prosessoren. Dette gjøres i et eget dataprogram kalt kompilator og prosessen å kompilere. Å skrive eller utvikle program ved hjelp av assemblerkoder kan også fort bli uoversiktlig, og for dagens prosessorer benytter man sjelden assemblerkode, men programmerer i såkalte høynivåspråk som eksempelvis C++. Uansett må kodene oversettes til binærkoder for at mikroprosessoren skal kunne behandle dem. I denne sammenheng vil vi kun presentere noen få assemblerinstruksjoner for å vise hvordan de kan være bygget opp. Assemblerinstruksjoner gir en god innsikt og forståelse av de mekanismer som foregår mellom program (software) og prosessorens hardware.

Programmene som instruerer mikroprosessoren, vil alltid operere etter et bestemt mønster. Hva som bestemmer rekkefølgen for når de ulike instruksjonene skal utføres, er for så vidt avhengig av personen som skriver programmet. Vanligvis kjøres instruksjonene i rekkefølge, men noen steder kan vi ha såkalte hoppinstruksjoner. Da hopper programmet til en bestemt programadresse, utfører instruksjonen eller programbiten, for deretter å gå tilbake til neste instruksjon i hovedprogrammet. Vi kan ha ubetingete hopp og betingete hopp. Ved ubetingete hopp hoppes det umiddelbart til hoppadressen ved hjelp av en bestemt instruksjon. Ved betingete hopp må det foreligge en bestemt betingelse for at hoppet skal utføres. En slik betingelse kan eksempelvis være et bestemt resultat av en regneoperasjon eller sammenligning av to verdier. Det er selvsagt viktig at programmet har en riktig logisk oppbygning for at mikroprosessoren. Et greit verktøy i denne sammenheng er et flytdiagram som kan være til god hjelp for å holde oversikt over de ulike prosessene i programmet.

Mikroprosessoren

Mikroprosessorer finnes i mange typer elektronikk.

Mikroprosessorsystem

Legg spesielt merke til databuss og adressebuss. Databussen er toveis, mens adressebussen er enveis. Kontrollbussen er egentlig ikke en ensartet buss, men en samling av diverse kontrollsignaler.

mikroprosessorsystem.png

Mikroprosessor, blokkskjema

Prinsipiell oppbygning

  • ALU – Arithmetic Logic Unit (utfører regneoperasjoner og logiske operasjoner)

  • Instruksjonsregister – mellomlagrer data som flyter på databussen

  • Instruksjonsdekoder – dekoder informasjonen som kommer inn på databussen

  • Akkumulator – brukes til mellomlagring av data

  • Statusregister – består av flagbit, som hver for seg indikerer status etter en operasjon (også kalt flaggregister)

  • Programteller – holder kontroll med hvilken adresse som til enhver tid er aktiv

  • Indeksregister – brukes ved indeksert adressering

  • Stakkpeker – brukes til adressering av stakk (stakk er en del av RAM-lageret)

  • Adressedekoder – definerer adresse i hukommelsen ut fra informasjon fra programteller og indeksregister

Mikroprosessoren 6502

MOS Technology 6502, også kjent som bare 6502 er en gammel, men populær mikroprosessor.

Den har en forholdsvis enkel arkitektur og ble brukt i Apples første datamaskiner. 6502 er fremdeles i bruk i visse sammenhenger.

Hukommelseskart

For å holde orden på hva som ligger i hukommelsen, kan man ha god nytte av et hukommelseskart.

Hovedprogram og subrutiner

Hovedprogrammet kjøres normalt fra start til stopp. Underveis kan hovedprogrammet hoppe ut i én eller flere subrutiner.

Ellers kan det også hoppe tilbake til start eller gå i en kontinuerlig loop.

En subrutine er et eget lite program hvor prosessoren kan hoppe ut fra hovedprogrammet, kjøre det og returnere tilbake til hovedprogrammet. I denne sammenheng mellomlagres data på stakk, slik at prosessoren kan hente disse ut igjen når den returnerer til hovedprogrammet. Subrutiner er særlig aktuelt når det er snakk om programrutiner som gjentar seg flere steder i hovedprogrammet.

Flytdiagram, symboler

Når man skal utvikle et program, kan man ha god nytte av å sette opp et flytdiagram. Ved hjelp av det kan man skaffe seg en god oversikt over de prosesser som programmet skal utføre.

En erfaren programmerer klarer seg gjerne uten flytdiagram, men for en nybegynner vil dette være en god hjelp.

De mest aktuelle symbolene for bruk i flytdiagram.

Instruksjoner, oppbygning

Program skrives som instruksjoner til mikroprosessoren, som assemblerinstruksjoner eller instruksjoner i høynivåspråk. Denne prosessortypen har 56 forskjellige assemblerinstruksjoner.

For dagens prosessorer benytter man sjelden assemblerkode, men programmerer i høynivåspråk som eksempelvis C++. Uansett må kodene oversettes til binærkoder for at mikroprosessoren skal kunne behandle dem.

I denne sammenheng vil vi kun presentere noen få assemblerinstruksjoner for å vise hvordan de er bygget opp. Assemblerinstruksjoner gir en god innsikt og forståelse av de mekanismene som foregår mellom program (software) og prosessorens hardware.

Assemblerinstruksjonenes oppbygning i 6502. Avhengig av instruksjonstype, kan de bestå av én, to eller tre byte.

Praktiske eksempler på én, to og tre byte-instruksjoner:

  • CLC ; nullstill menteflagg (clear carry)

  • LDA #05H ; legg det heksadesimale tallet 5 inn i akkumulator

  • LDA 0500H ; legg innholdet i den heksadesimale adressen 0005 inn i akkumulator

Alle instruksjoner blir av prosessoren lest og tolket som binære koder.

  • Selve operasjonskoden (CLC, LDA) utgjør alltid én byte.

  • Det påfølgende (data eller adresse) kan utgjøre enten én eller to byte.

  • Legg merke til bruken av symbolet #, som indikerer at det som følger etter, er data (tallverdi) og ikke en adresse.

  • Legg også merke til at de to mest signifikante og de to minst signifikante heksadesimale sifrene i adressen bytter plass når de skrives som en del av en instruksjon (adressen i LDA 0500H er adresse 0005H).

Oppgaver mikroprosessorer

  1. Forklar bruken av databuss, adressebuss og kontrollbuss.

  2. Hvilken informasjon og hvilke signaler overføres på hver av de tre bussene?

  3. Gi eksempler på informasjon som kan overføres på I/O-delen i et mikroprosessorsystem.

  4. Forklar hvilken oppgave programtelleren og adressedekoderen har i en mikroprosessor.

  5. Hvilke funksjoner utføres i mikroprosessorens ALU?

  6. Hvilken funksjon har statusregisteret i en mikroprosessor?

  7. I hvilke sammenhenger er det aktuelt for mikroprosessoren å benytte den delen av RAM-hukommelsen som kalles stakk?

  8. Forklar hva vi mener med en subrutine.