Processorregister
Från Rilpedia
Ett processorregister är en liten mängd väldigt snabbt datorminne som används för att öka hastigheten hos datorprogram genom att ge snabb tillgång till ofta använda värden. De flesta, men inte alla, moderna processorarkitekturer fungerar enligt principen att hämta data från primärminnet till processorregistren, utföra beräkningar på dem, och sedan lagra resultaten i primärminnet igen.
Processorregister ligger högst i minneshierarkin: det är det snabbaste sättet att lagra data. Termen 'processorregister' används oftast bara för de register som går att påverka eller avläsa från maskinkodsinstruktioner, dessa kallas då "arkitekturregister". Exempelvis har x86-arkitekturen åtta stycken 32-bitarsregister, men en CPU som tillämpar x86-arkitekturen betydligt många fler interna register än bara dessa åtta.
Att lagra ofta använda variabler i register är kritiskt för programprestanda. Därför är en av de viktigaste uppgifterna en kompilator har att tilldela registren på ett effektivt sätt.
Registerkategorier
Processorregister klassifieras normal baserat på hur många bitar de består av; exempelvis säger man "8-bitars register" eller "32-bitars register". Det finns olika kategorier av register, beroende på typen av data som lagras i dem:
- Dataregister används för att lagra heltal. I några äldre eller enklare processorer finns det ett särskilt dataregister, ackumulatorn, som används underförstått i många instruktioner. Exempel: D0-D7 i 68000-arkitekturen; A-registret i 6502-arkitekturen.
- Adressregister används för att lagra minnesadresser (eller delar av minnesadresser) och används bl.a. för att läsa och skriva i primärminnet. Exempel: segmentregistren CS,DS,ES,FS,GS, och SS i x86-arkitekturen; A0-A7 i 68000-arkitekturen.
- Allmänna register (general purpose registers eller GPR) används för både data och adresser.
- Flyttalsregister används för att lagra flyttal. Exempel: ST(0)-ST(7) hos 8087-matematikprocessorn.
- Konstanta register innehåller vanligt förekommande värden som bara kan läsas (t.ex. noll, ett, pi m.fl.)
- Vektorregister håller flera datavärden i en vektor och används för att utföra flera operationer parallellt (se vidare SIMD).
- Specialregister håller reda på programmets tillstånd; däribland räknas instruktionspekare, stackpekare och statusregister.
- I några processorarkitekturer finns modellspecifika register som lagrar data och inställningar som är specifika för processorn själv. Eftersom deras innebörd är knuten till en specifik processor, går det inte att förlita sig på att deras funktion är densamma i senare processorgenerationer.