Registras (procesoriaus)

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

Registras – specializuota atminties ląstelė, esanti procesoriuje. 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ų):