Glavni pomnilnik naj bo čim večji. Zato mora biti zgrajen iz elementov, ki so cenejši in torej počasnejši od tistih v CPE. Ti pomnilniki so registri.
CPE vsebuje registre. Registre v CPE lahko razdelimo v dve skupini glede na to, ali so vidni oziroma dostopni gledano s strani programerja. V prvi skupini so programsko dostopni registri, v katere programer v skladu s potrebami shranjuje operande in nad katerimi izvaja operacije. V drugi skupini so registri, ki jih programer ne vidi, torej programsko nedostopni, vendar so nujno potrebni za delovanje CPE. Taki registri so na primer naslovni (adress register, AR), podatkovni (data register, DR), in ukazni register (instruction register, IR). Poleg njih pa še drugi, ki so skriti v logiki ritmetično-logične enote in kontrolne enote in na katerih vsebino programer ne more neposredno vplivati (čeprav ukazi vplivajo na registre posredno).
Ko govorimo o programsko dostopnih registrih mislimo na tiste registre, ki neposredno služijo za reševanje problemov in v katerih so shranjeni operandi nad katerimi se izvajajo operacije. Ti registri so nujno potrebni in z njimi je mogoče doseči pomembne prednosti (nekateri registri se nahajajo v CPE in so torej zgrajeni v hitrejši tehnologiji kot glavni pomnilnik. Dostop do operandov in ukazov v registrih je hitrejši kot dostop do operandov v pomnilniku. Ukazi, ki uporabljajo operande v registrih, se zato izvršujejo hitreje kot tisti z operandi v pomnilniku.
Registrov je malo, zato je v ukazih potrebno bistveno manj bitov za določanje operanda v registru kot za določanje operandov v pomnilniku. Od tod sledi, da so ukazi krajši in zasedajo manj prostora v pomnilniku.Kadar govorimo o registrih v CPE, običajno mislimo na programsko dostopne registre. Te spet lahko razdelimo v dve skupini:
Ko govorimo o programsko dostopnih registrih običajno mislimo na registre iz prve skupine. Ti registri niso nujno potrebni in poznamo tudi računalnike, kijih nimajo. Tak je bil na primer EDVAC in še več kasnejših, vključno z nekaterimi današnjimi. Vendar pa velika večina računalnikov ima programsko dostopne registre v CPE, ker je z njimi mogoče doseči pomembne prednosti. Za to sta pomembna predvsem naslednja dva razloga:
Posledica uporabe registrov je, da so programi običajno pisani na naslednji način:
Takoj povejmo, da se prednosti registrov pokažejo samo, če izračun rezultata v točki 2 zahteva več ukazov. Ker zelo pogosto lahko napišemo program tako, da rezultate prejšnjega ukaza pustimo v registrih in jih uporabljamo kot operande v naslednjih ukazih (brez njihovega shranjevanja v glavni pomnilnik), je to v večini primerov res. S tem pa poleg večje hitrosti in krajših ukazov pridobimo še nekaj – zmanjša se namreč število bitov, ki jih je potrebno prenašati med CPE in glavnim pomnilnikom. V sistemih, kjer ima do pomnilnika dostop poleg CPE še več drugih delov, je tako zmanjševanje "prometa" pomembno za večjo zmogljivost računalnika.
Nekateri računalniki z registri imajo poleg ukazov z operandi v registiih tudi ukaze, ki izvajajo operacije neposredno nad operandi v glavnem pomnilniku. Vedeti moramo, da se tudi pri teh ukazih operandi najprej prenesejo v CPE, operacija izvrši v CPE in nato prenese rezultat nazaj v glavni pomnilnik, čeprav programer tega izrecno ne zahteva. V določenih primerih so taki ukazi koristni, vendar se pri njihovi uporabi že omenjene prednosti registrov seveda izgubijo. Če bi na primer napisali program, ki uporablja samo take ukaze, bi s tem dosegli, da računalnik deluje kot da nima programsko dostopnih registrov.
Vsi programsko dostopni registri skupaj tvorijo takoi menovano stanje CPE (CPU context). Med izvajanjem programa se stanje CPE seveda spreminja. Če izvajanje programa prekinemo, na primer zato, da izvedemo nekega drugega, moramo pred pričetkom izvajanja drugega programa shraniti trenutno stanje CPE. S tem omogočimo, da lahko po zaključku drugega
Programa nadaljujemo prvega tako, da shranjeno stanje prenesemo nazaj v registre. V splošnem lahko na ta način dosežemo, da CPE izmenično izvaja poljubno število programov ne da bi to vplivalo na njihove rezultate. Temu "preklapljanju" med programi, ki mora vsebovati shranjevanje stanja CPE, pravimo preklapljanje stanja (context switching).
Preklapljanje stanja je na večini računalnikov razmeroma pogosto opravilo. Veliko CPE ima zato vgrajene posebne mehanizme, ki preklapljanje poenostavijo in posešijo. Danes se v ta namen največkrat uporablja sklad. Drugo možnost predstavlja uporaba večkratnih naborov registrov (angl.multiple set registers). Na računalnikih z večkratnimi nabori registrov imamo v CPE več identičnih skupin registrov od katerih je v vsakem trenutku delujoča in za programerja vidna samo ena. Ostale skupine so nevidne, tako daje CPE za programerja videti enako kot, da ima samo eno skupino registrov. Pri preklopu se vključi naslednja skupina, vsebina prejšnje pa ostane nedotaknjena. Če želimo nadaljevati prejšnji program preprosto vključimo njegovo skupino registrov.
Zelo hitro preklapljanje stanja je največja prednost večkratnih naborov registrov. Poleg tega jih je mogoče realizirati tako, da se deloma prekrivajo – del registrovene skupine je lahko podmnožica registrov druge skupine. S tem lahko poenostavimo in pospešimo prenos parametrov med programi, na primer pri klicih procedur ali podprogramov. Cena za te prednosti je seveda v večjem številu registrov, ki jih mora vsebovati CPE. Zato ni presenetljivo, da jih srečujemo prevsem pri novejših računalnikih. Zaradi uporabe vezij velike gostote integracije, namreč cena za veliko število registrov danes ni več tako velika.
SERŠ Maribor, Strokovna gimnazija, leto: 2002, avtor: Leon Borko