Prosessorregister

Et prosessorregister er en liten lagringsenhet som er den raskeste en CPU kan nå. De fleste, men ikke alle, moderne datamaskinarkitekturer følger prinsippet om at data leses fra minnet og inn i registre før bruk, for så å skrive resultatet tilbake til minnet fra et register etterpå. En vanlig egenskap i dataprogrammer er lokalitet, altså det at programmet benytter de samme dataene om og om igjen. Hvis det er mulig å ha disse dataene liggende i registrene, vil man kunne øke ytelsen.

Prosessorregistrene utgjør toppen av minnehierarkiet. Navnet refererer vanligvis kun til de registrene som en instruksjon kan vise til direkte, slik definert av instruksjonssettet. For eksempel definerer x86-instruksjonssettet åtte 32-biters registre, men CPU-er som implementerer dette instruksjonssettet har gjerne flere registre enn det.

Å plassere ofte brukte variable i registre kan være utslagsgivende for ytelsen til et program. Registerallokering er noe som utføres av kompilatoren under kompilering.

Registertyper
Registre klassifiseres vanligvis etter hvor mange biter de består av, for eksempel 8-biters register eller 32-biters register. Registre implementeres i dag vanligvis som en registerfil, men de har også blitt implementert med individuelle flip-floper, magnetkjerneminne eller på andre måter.

En prosessor vil ofte ha flere forskjellige typer registre. Disse kan blir klassifisert etter hva slags innhold de har eller hva slags instruksjoner som bruker dem. Avhengig av arkitekturen kan det være slik at noen registre fritt kan brukes i alle programmer, mens andre er kun for systemprogramvare, som for eksempel operativsystemet.

 Dataregistre brukes til å holde på tallverdier, slik som heltall eller flyttall. Enkelte gamle og enkle CPU-er hadde et spesielt akkumulatorregister som ble benyttet implisitt av mange operasjoner.
 Adresseregistre brukes til å holde på adresser og blir brukt av instruksjoner som indirekte aksesserer dataminneet.
 Noen prosessorer har registre som bare kan inneholde adresser, mens andre bare kan ha tallverdier. Sistnevnte brukes i noen tilfeller som en indeks som legges til en adresse, for eksempel for å angi et element i en tabell. Andre prosessorer har registre som kan benyttes til begge deler. Ulike adresseringsmoduser brukes for å finne den effektive adressen til en operand.
 Et stakkregister er et spesielt register som benyttes som en stakkpeker av enkelte instruksjoner for å håndtere stakken.
 Statusregisteret inneholder sannhetsverdier som ofte blir brukt for å avgjøre om en instruksjon skal utføres eller ikke. Om forrige beregning ga et tall større enn, mindre enn eller lik null er noe som typisk angis av statusregisteret.
 Generelle registre er registre som kan benyttes til både data og adresser.
 Flyttallsregistre er spesielle registre som benyttes til flyttall av mange arkitekturer.
 Konstantregistre er registre man bare kan lese fra og som inneholder ofte brukte verdier, slik som null, én eller pi.
 Vektorregistre brukes SIMD-instruksjoner til vektorprosessering.
 Spesialregistre inneholder tilstanden til programmet. Blant disse inngår programtelleren, stakkpeker og statusregistre.
 Instruksjonsregisteret inneholder den instruksjonen som til enhver til blir utført.
 Noen arkitekturer har modellspesifikke registre som inneholder som inneholder data om og innstillingene til selve prosessoren. Ettersom de er såpass knyttet opp til ett enkelt prosessordesign, kan man ikke forvente at de er likedann fra prosessorgenerasjon til prosessorgenerasjon.
 Det er også noen registre som inneholder data på vei inn fra eller ut til minnet, samt den tilhørende minneadressen.

Maskinvareregistre går ut på det samme, men finnes andre steder enn i CPU-en.

Noen eksempler
Tabellen nedenfor viser antall registre for flere sentrale arkitekturer. Vær oppmerksom på at stakkpekeren (SP) telles som et heltallsregister på x86-kompatible prosessorer, selv om kun et fåtall instruksjoner er i stand til å benytte den. Tilsvarende situasjoner kan finnes på andre arkitekturer.

Se også
 Skifteregister

Prosessorer