Procesoriaus registras

**Procesoriaus registras** – procesoriui priklausanti ir jame esanti vieno kompiuterio žodžio talpos labai sparti atmintis. 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:
** Rodyklių registrus, laikančius adresą (absoliutinį, sąlyginį ar kitą)
** Bazinius registrus, laikančius adreso bazę (pvz., segmento)

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ų):
* Procesoriai su akumuliatoriais (pvz., Intel 8080)
* Procesoriai su mišrios paskirties registrais (dalis registrų veikia, kaip akumuliatoriai, pvz., Intel 8086)
* Procesoriai su bendros paskirties registrais (pvz., Motorolla 68000)
* Procesoriai su registrų langais (pvz., PowerPC, Alpha, MIPS)

## Šaltiniai