Procesoriaus registras – procesoriui priklausanti ir jame esanti vieno kompiuterio žodžio talpos labai sparti atmintis.[1] Registrų talpa įprastai matuojama bitais, pvz., būna 8 bitų, 32 bitų, 64 bitų registrai. Procesoriuje gali būti nuo 5 iki kelių šimtų registrų.
Procesoriaus registrai yra pirmoje vietoje kompiuterio atminties hierarchijoje.
Registrų tipai
Būna dviejų rūšių registrai:
- Programuojami – tokie, kurie pasiekiami komandomis, jie naudojami kaip pagrindinis einamosios atminties elementas, naudojamas procesoriaus komandų.
- Pagalbiniai – jų turinys iš viso nepasiekiamas arba pasiekiamas tik netiesiogiai, jie naudojami, vykdant komandas, pvz., komandų skaitliukas, vėliavėlės.
Programuojami registrai būna skirstomi į dvi rūšis:
- Bendros paskirties registrai – komandose nurodomi tiesiogiai
- Akumuliatoriai – komandose naudojami pagal nutylėjimą
Bendros paskirties registrai, savo ruožtu, kartais skirstomi į:
- Universalius – visiems darbams tinkamus
- Duomenų registrus – nenaudojamus ne adresacijai, o tik manipuliavimui duomenimis
- Adresų registrus – skirtus adresavimui:
Skirtingai nuo įprastos atminties, registrai yra neatskiriama procesoriaus dalis, daugumos paplitusių procesorių komandos leidžia manipuliuoti tik duomenimis, esančiais registruose. Tipišku atveju, procesorius perkelia duomenis iš atminties į registrą, atlieka su duomenimis tam tikrus veiksmus, o paskui perkelia duomenis atgal į atmintį:
# Įsivaizduojamo supaprastinto procesoriaus, turinčio bendros paskirties registrus, programa
MOVB REG0, 0000h # Į registrą REG0 perkeliamas baitas, esantis atminties adresu 0000
MOVB REG1, 0001h # Į registrą REG1 perkeliamas baitas, esantis atminties adresu 0001
ADD REG0, REG1 # Prie REG0 turinio pridedamas REG1 turinys, rezultatas patenka į REG0
MOVB 0002h, REG0 # Baitas, esantis REG0, perkeliamas į atmintį, adresu 0002
Procesoriai, kurie leidžia komandose nurodyti aritmetines operacijas, nenurodant registro, priskiriami CISC grupei: šiuose proceosriuose viena komanda faktiškai atlieka kelias operacijas, kuriose dalyvauja nenurodomi, bet faktiškai panaudojami registrai:
# Įsivaizduojamo supaprastinto CISC procesoriaus, turinčio bendros paskirties registrus, programa
MOVB 0002h, 0000h # Perkelti ląstelės 0000 turinį į 0002, faktiškai atliekami veiksmai:
# MOVB REG0, 0000h # 0000 turinys perkeliamas į registrą
# MOVB 0002h, REG0 # registro turinys perkeliamas į 0002
ADDB 0002h, 0001h # Prie ląstelės 0000 turinio pridėti 0001 turinį, faktiškai atliekami veiksmai:
# MOVB REG0, 0002h # 0002 turinys perkeliamas į registrą REG0
# MOVB REG1, 0001h # 0001 turinys perkeliamas į registrą REG1
# ADD REG1, REG0 # registrų turinys sudedamas
# MOVB 0002h, REG1 # registro turinys perkeliamas adresu 0002
Akivaizdu, kad nors faktiniai skaičiavimai tie patys, vietoje keturių veiksmų tenka atlikti 6 (procesoriaus efektyvumas mažesnis), tačiau jiems užrašyti tereikia 2 komandų (programuoti paprasčiau).
RISC procesorių efektyvumas didinamas, dar labiau apribojant komandų darbo su atmintimi bei konstantomis galimybes, neretai net negalima perkeldinėti duomenų tiesiogiai iš registro į atmintį ir atvirkščiai, tačiau bendras procesoriaus efektyvumas nuo to tik padidėja. Tam, kad registrai būtų panaudojami efektyviau, jie jungiami į tam tikrus masyvus, vadinamus registrų langais.
Procesorių architektūrų skirstymas taip pat paremtas registrų panaudojimu (eilės tvarka, nuo primityvių iki išvystytų architektūrų):
Šaltiniai