Prosessorin rekisteri

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 17.6.2019 tarkistetusta versiosta . tarkastukset vaativat 24 muokkausta .

Prosessorirekisteri  on tietyn pituinen kenttä suorittimen sisäisessä ultranopeassa hajasaantimuistissa (SRAM). Sitä käyttää prosessori itse, se voi olla joko saatavilla tai ei saavutettavissa ohjelmistolla. Kun esimerkiksi haetaan seuraavaa käskyä muistista, se sijoitetaan käskyrekisteriin , johon ohjelmoija ei pääse käsiksi.

Rekisterit, joihin ei ole pääsyä ohjelmallisesti

Ohjelmallisesti saavuttamattomissa olevat rekisterit ovat prosessorirekistereitä, joihin ei voida päästä tavalla tai toisella suorittavasta ohjelmasta. Esimerkki tällaisista rekistereistä on jo mainittu käskyrekisteri .

Ohjelmistokäyttöiset rekisterit

Ohjelmallisesti käytettävissä olevat rekisterit ovat rekistereitä, joihin voidaan päästä tavalla tai toisella suorittavasta ohjelmasta. Lähes jokainen tällainen rekisteri on nimetty sen nimitunnisteella kokoonpanokielen tasolla ja vastaavalla numeerisella tunnistekoodilla konekielitasolla. Saavutettavuuden kannalta ohjelmallisesti käytettävissä olevat rekisterit eivät ole samoja ja ne on käytännössä jaettu kahteen suureen alaryhmään:

Erikoisrekisterit [3] sisältävät prosessorin toimintaan tarvittavat tiedot - perustaulukon offsetit, pääsytasot jne.

Osa erikoisrekistereistä kuuluu ohjauslaitteeseen , joka ohjaa prosessoria generoimalla sarjan mikrokäskyjä .

Pääsy rekistereihin tallennettuihin arvoihin tapahtuu suoraan prosessorin kellotaajuudella ja pääsääntöisesti useita kertoja nopeammin kuin RAM-kenttien käyttö (vaikka välimuisti sisältää tarvittavat tiedot), mutta RAM-muistin määrä on paljon ylittää prosessorirekisterien kokonaismäärän , yleiskäyttöisten / tietorekisterien kokonais"kapasiteetti" x86-prosessoreille (esim. Intel 80386 ja uudemmat) 8 4 tavun rekisteriä = 32 tavua ( x86-64 prosessoreissa - 16/8 tavua = 128 tavua ja joitain vektorirekisterejä).

Muutamia esimerkkejä

Taulukko näyttää yleiskäyttöisten rekisterien lukumäärän useissa yleisissä mikroprosessoriarkkitehtuureissa. On syytä huomata, että joissakin arkkitehtuureissa yksittäisten rekisterien käyttö voi olla monimutkaista. Joten SPARC:ssa ja MIPS:ssä rekisterinumero 0 ei tallenna tietoa ja se luetaan aina 0:na, ja x86-prosessoreissa, joissa on rekisteri ESP(osoitin pinoon), vain jotkut komennot voivat toimia.

Arkkitehtuuri kokonaislukurekisterit
_
FP -
rekisterit
Huomautuksia
x86-32 kahdeksan kahdeksan
x86-64 16 16
IBM System/360 16 neljä
z/Arkkitehtuuri 16 16
Itanium 128 128
SPARC 31 32 Rekisteri 0 (globaali) on aina käynnissä
IBM solu 4-16 1~4
IBM POWER 32 32
tehoarkkitehtuuri 32 32
Alpha 32 32
6502 3 0
W65C816S 5 0
KUVA yksi 0
AVR 32 0
ARM 32-bittinen [4] 16 eri
ARM 64-bittinen [5] 31 32
MIPS 31 32 Rekisteri 0 on aina nolla
RISC-V 31 32 Lisäksi on rekisteri 0, joka palauttaa aina nollan
Elbrus 2000 256 linjassa kanssa

kokonaisluku

32 kaksinumeroista rekisteriä,

256 = 32 globaalia rekisteriä + 224 prosessipinorekisteriä [6]

x86- arkkitehtuuri

IP ( englanniksi  Instruction Pointer ) - rekisteri, joka osoittaa ohjeiden siirtymän (osoitteen) koodisegmentissä (1234: 0100h segmentti / offset).

IP - 16-bittinen (EIP:n alaosa)

EIP - 32-bittinen analoginen (RIP:n alaosa)

RIP - 64-bittinen analoginen

Segmenttirekisterit  ovat rekistereitä, jotka osoittavat segmentteihin.

Kaikki segmenttirekisterit ovat 16-bittisiä.

CS ( koodisegmentti ) ,  DS ( tietosegmentti ) , SS ( pinosegmentti ) , ES ( lisäsegmentti ) , FS, GS    

Prosessorin reaalitilassa segmenttirekisterit sisältävät 64 kb:n segmentin alun osoitteen siirrettynä oikealle 4 bittiä .

Prosessorin suojatussa tilassa segmenttirekisterit sisältävät käyttöjärjestelmän allokoiman muistisegmentin valitsimen .

CS on osoitin koodisegmentille. CS:IP-sidonta (CS:EIP/CS:RIP - suojatussa/64-bittisessä tilassa) osoittaa seuraavan käskyn muistiosoitteeseen.

64-bittisessä tilassa segmenttirekisterit CS, DS, ES ja SS eivät osallistu lineaarisen (jatkuvan) osoitteen muodostukseen, koska segmentointia ei tueta tässä tilassa.

Tietorekistereitä  käytetään välilaskentojen tallentamiseen.

RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 - R15 - 64-bittinen (rekisteri-AX)

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D - R15D - 32-bittinen (laajennettu AX)

AX ( akku ) ,  CX ( laskentarekisteri ) , DX ( tietorekisteri ) , BX ( perusrekisteri ) , SP ( pinoosoitin ) , BP ( perusosoitin ) SI (, lähdeindeksi ), DI ( kohdeindeksi ), R8W - R15W - 16-bittinen        

AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B - 8-bittinen (puolet 16-bittisistä rekistereistä)

esimerkiksi AH - korkea AX - korkea puolikas 8 bittiä

AL - alhainen AX - alhainen puolikas 8 bittiä

RAX RCX RDX RBX
EAX ECX EDX EBX
KIRVES CX DX BX
AH AL CH CL D.H. DL BH BL


RSP RBP RSI RDI Rx
ESP EBP ESI EDI RxD
SP BP SI DI RxW
SPL BPL SIL DIL RxB

missä x on 8...15.
Rekisterit RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL ovat käytettävissä vain 64-bittisessä prosessoritilassa.

Lippurekisteri FLAGS (16 bittiä) / EFLAGS (32 bittiä) / RFLAGS (64 bittiä) - sisältää prosessorin nykyisen tilan.

Järjestelmärekisterit GDTR, LDTR ja IDTR otettiin käyttöön prosessoreissa Intel286:sta alkaen ja ne on suunniteltu tallentamaan kuvaustaulukoiden perusosoitteet  - järjestelmäarkkitehtuurin tärkeimmät komponentit suojatussa tilassa työskennellessä.

GDTR-rekisteri sisältää 32-bittisen (24-bitin Intel286:lle) perusosoitteen ja 16-bittisen globaalin kuvaajataulukon ( GDT ) rajan.

LDTR- rekisterin näkyvä osa sisältää vain paikallisen descriptor table (LDT) -kuvausvalitsimen. Itse LDT-kuvaaja ladataan automaattisesti LDTR:n piilotettuun osaan globaalista kuvaajataulukosta.

IDTR-rekisteri sisältää 32-bittisen (24-bitin Intel286:lle) perusosoitteen ja 16-bittisen keskeytyskuvaustaulukon ( IDT ) rajan. Reaalitilassa sillä voidaan muuttaa keskeytysvektoritaulukon sijaintia.

TR-rekisterin näkyvä osa sisältää Task State Segment Descriptor ( TSS ) -valitsimen. Itse TSS-kuvaaja ladataan automaattisesti TR:n piilotettuun osaan globaalista kuvaajataulukosta.

Rekisteri on toiminnallinen yksikkö, joka vastaanottaa, tallentaa ja välittää tietoa. Rekisterit koostuvat joukosta laukaisimia , yleensä D. Tiedon vastaanottamisen ja antamisen tyypin mukaan erotetaan 2 tyyppiä rekistereitä:

Siirtorekisterit ovat sarjaan kytketty varkkujen ketju . Pääasiallinen toimintatapa on koodin bittien siirto yhdestä liipaisimesta toiseen kullekin kellosignaalin pulssille.

Tarkoituksen mukaan rekisterit eroavat toisistaan:

Komentolaskuri

IP

IP ( englanninkielinen  ohjeosoitin ) - rekisteri, joka sisältää seuraavan suoritettavan käskyn osoitepoikkeaman suhteessa CS -koodisegmenttiin x86 -perheen prosessoreissa .

IP-rekisteri liittyy CS:ään muodossa CS:IP, jossa CS on nykyinen koodisegmentti ja IP on nykyinen siirtymä kyseisestä segmentistä.

IP-rekisteri on 16-bittinen osoitinrekisteri. Sen lisäksi tämäntyyppisiin rekistereihin kuuluvat SP ( englanniksi  Stack Pointer  - pinoosoitin) ja BP ( englanniksi  Base Pointer  - perusosoitin).

Toimintaperiaate

Esimerkiksi CS sisältää arvon , IP-rekisteri tallentaa offsetin . 2CB5[0]H123H

Seuraavan suoritettavan käskyn osoite lasketaan lisäämällä CS:n (koodisegmentin) osoite IP-rekisterin siirtymään:

2CB50H + 123H = 2CC73H

Siten seuraavan suoritettavan käskyn osoite on 2CC73H.

Kun nykyinen käsky suoritetaan, prosessori muuttaa automaattisesti arvoa IP-rekisterissä niin, että CS:IP-rekisteripari osoittaa aina seuraavaan suoritettavaan käskyyn.

EIP

80386-prosessorista alkaen osoitinrekisteristä otettiin käyttöön 32-bittinen versio - EIP ( Extended Instruction Pointer ) .  Tässä tapauksessa IP on tämän rekisterin alin pää (ensimmäiset 16 bittiä). EIP:n toimintaperiaate on yleensä samanlainen kuin IP-rekisterin toiminta. Suurin ero on, että suojatussa tilassa, toisin kuin reaalitilassa, CS-rekisteri on valitsin (valitsin ei osoita itse segmenttiä muistissa, vaan segmentin kuvaajaa deskriptoritaulukossa).

RIP

64-bittiset prosessorit käyttävät omaa käskyosoitinrekisteriään - RIP .

Tämän rekisterin alaosa on EIP-rekisteri.

RIP:iin perustuva uusi RIP-suhteellinen osoitusmenetelmä on otettu käyttöön 64-bittisissä prosessoreissa. Muu RIP:n työ on samanlaista kuin EIP-rekisterin työ.

Muistiinpanot

  1. Barbara J. Burian. Yksinkertainen lähestymistapa S/370 assembly-kieliohjelmointiin. - New York: Prentice-Hall, Inc., 1977.
  2. Pogorely S. D., Slobodyanyuk T. F. Ohjelmisto mikroprosessorijärjestelmille. Hakemisto. — 2., tarkistettu ja täydennetty. - Kiova: Technika, 1989. - S. 7, 48-51. — 301 s. - (Erikoislääkärin käsikirja). – 50 000 kappaletta.  — ISBN 5-335-00169-0 .
  3. Intel 64- ja IA-32-arkkitehtuurien ohjelmistokehittäjän käsikirja. Osa 1: Perusarkkitehtuuri. 3.4 PERUSOHJELMAN SUORITUSREKISTERIT Arkistoitu 24. toukokuuta 2011 Wayback Machinessa 
  4. Proseduurikutsustandardi ARM-arkkitehtuurille . ARM Holdings (16. lokakuuta 2009). Haettu 24. huhtikuuta 2012. Arkistoitu alkuperäisestä 28. huhtikuuta 2013.
  5. Proseduurikutsustandardi ARM 64-bittiselle arkkitehtuurille . ARM Holdings (25. marraskuuta 2011). Haettu 24. huhtikuuta 2012. Arkistoitu alkuperäisestä 28. huhtikuuta 2013.
  6. MCST. Johdatus Elbrus-arkkitehtuuriin  (venäjäksi)  ? . Alt Linux (31. toukokuuta 2020). Haettu 16. heinäkuuta 2020. Arkistoitu alkuperäisestä 2. kesäkuuta 2020.

Linkit