Processzor regiszter

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. június 17-én felülvizsgált verziótól ; az ellenőrzések 24 szerkesztést igényelnek .

A processzorregiszter  egy adott hosszúságú mező a processzoron belüli ultragyors véletlen hozzáférésű memóriában (SRAM). Maga a processzor használja, lehet szoftveresen elérhető vagy elérhetetlen. Például amikor a következő utasítást lekérjük a memóriából, az az utasításregiszterbe kerül, amelyhez a programozó nem fér hozzá.

Programozottan elérhetetlen regiszterek

A programozottan hozzáférhetetlen regiszterek minden olyan processzorregiszter, amely a végrehajtó programból ilyen vagy olyan módon nem érhető el. Ilyen regiszterekre példa a már említett utasításregiszter .

Szoftverrel elérhető regiszterek

A programozottan elérhető regiszterek olyan regiszterek, amelyek a végrehajtó programból ilyen vagy olyan módon elérhetők. Szinte minden ilyen regisztert a névazonosítója jelöl össze assembly nyelvi szinten , és a megfelelő numerikus azonosító kódja gépi nyelvi szinten. Az elérhetőség szempontjából a programozottan elérhető regiszterek nem ugyanazok, és gyakorlatilag két nagy alcsoportra oszthatók:

A speciális regiszterek [3] tartalmazzák a processzor működéséhez szükséges adatokat - alaptábla eltolásokat, hozzáférési szinteket stb.

A speciális regiszterek egy része a vezérlőeszközhöz tartozik, amely mikroutasítás -sorozat generálásával vezérli a processzort .

A regiszterekben tárolt értékekhez való hozzáférés közvetlenül a processzor órajel-frekvenciáján történik , és általában többször gyorsabban, mint a RAM-ban lévő mezők elérése (még akkor is, ha a gyorsítótár tartalmazza a szükséges adatokat), de a RAM mennyisége messze. meghaladja a processzorregiszterek teljes mennyiségét, az általános célú / adatregiszterek teljes "kapacitása" x86 processzorokhoz (például Intel 80386 és újabb) 8 regiszter 4 bájtos = 32 bájt ( x86-64 processzorokban - 16 a 8 bájtból = 128 bájt és néhány vektorregiszter).

Néhány példa

A táblázat bemutatja az általános célú regiszterek számát számos elterjedt mikroprocesszor architektúrában. Érdemes megjegyezni, hogy egyes architektúrákban az egyes regiszterek használata bonyolult lehet. Tehát SPARC-ban és MIPS-ben a 0-s regiszterszám nem tárol információt, és mindig 0-ként olvasható, a regiszterrel ESP(a veremre mutató mutatóval) rendelkező x86-os processzorokban pedig csak néhány parancs működhet.

Építészet egész
regiszterek
FP -
regiszterek
Megjegyzések
x86-32 nyolc nyolc
x86-64 16 16
IBM System/360 16 négy
z/Architektúra 16 16
Itanium 128 128
SPARC 31 32 A 0 (globális) regiszter mindig fut
IBM Cell 4~16 1~4
IBM POWER 32 32
teljesítmény architektúra 32 32
Alpha 32 32
6502 3 0
W65C816S 5 0
PIC egy 0
AVR 32 0
ARM 32 bites [4] 16 különféle
ARM 64 bites [5] 31 32
MIPS 31 32 A 0 regiszter mindig nulla
RISC-V 31 32 Ezenkívül van egy 0 regiszter, amely mindig nullát ad vissza
Elbrus 2000 256 -hoz igazodik

egész szám

32 kétjegyű regiszter,

256 = 32 globális regiszter + 224 eljárási verem regiszter [6]

x86 architektúra

IP ( English  Instruction Pointer ) - egy regiszter, amely jelzi az utasítások eltolását (címét) a kódszegmensben (1234: 0100h szegmens / eltolás).

IP – 16 bites (az EIP alsó része)

EIP – 32 bites analóg (a RIP alsó része)

RIP - 64 bites analóg

A szegmensregiszterek  olyan regiszterek, amelyek szegmensekre mutatnak.

Minden szegmensregiszter 16 bites.

CS ( kódszegmens ) ,  DS ( adatszegmens ) , SS ( veremszegmens ) , ES ( extra szegmens ) , FS, GS    

A processzor valós üzemmódjában a szegmensregiszterek a 64Kb-es szegmens kezdetének címét tartalmazzák, 4 bittel jobbra tolva.

A processzor védett üzemmódjában a szegmensregiszterek tartalmazzák az operációs rendszer által lefoglalt memóriaszegmens választóját .

A CS egy kódszegmensre mutató mutató. A CS:IP összerendelés (CS:EIP/CS:RIP - biztonságos/64 bites módban) a következő utasítás memóriacímére mutat.

64 bites módban a CS, DS, ES és SS szegmensregiszterek nem vesznek részt a lineáris (folyamatos) cím kialakításában, mivel ebben a módban a szegmentálás nem támogatott.

Az adatregiszterek  a köztes számítások tárolására szolgálnak.

RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 - R15 – 64 bites (nyilvántartó AX)

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D - R15D - 32 bites (bővített AX)

AX ( Akkumulátor ) ,  CX ( számlálóregiszter ) , DX ( adatregiszter ) , BX ( alapregiszter ) , SP ( veremmutató ) , BP ( alapmutató ) SI (, forrásindex ), DI ( célindex ), R8W - R15W - 16 bites        

AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B - 8 bites (16 bites regiszterek fele)

például AH - magas AX - 8 bit magas fele

AL - alacsony AX - 8 bit alacsony fele

RAX RCX RDX RBX
EAX ECX EDX EBX
FEJSZE 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

ahol x 8..15.
A RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL regiszterek csak 64 bites processzor módban érhetők el.

Flags regiszter FLAGS (16 bit) / EFLAGS (32 bit) / RFLAGS (64 bit) - tartalmazza a processzor aktuális állapotát.

A GDTR, LDTR és IDTR rendszerregisztereket az Intel286-tól kezdődő processzorokban vezették be, és arra tervezték, hogy tárolják a leíró táblák alapcímeit  - a rendszerarchitektúra legfontosabb összetevőit védett módban végzett munka során.

A GDTR regiszter 32 bites (24 bites Intel286 esetén) alapcímet és 16 bites globális leíró tábla ( GDT ) korlátot tartalmaz.

Az LDTR regiszter látható része csak a helyi leírótábla (LDT) leíró választót tartalmazza. Maga az LDT-leíró automatikusan betöltődik a globális leíró táblából az LDTR rejtett részébe.

Az IDTR regiszter 32 bites (24 bites Intel286 esetén) alapcímet és 16 bites megszakításleíró tábla ( IDT ) korlátot tartalmaz. Valós módban a megszakítási vektortábla helyének megváltoztatására használható.

A TR regiszter látható része tartalmazza a Task State Segment Descriptor ( TSS ) választót. Maga a TSS-leíró automatikusan betöltődik a TR rejtett részébe a globális leíró táblából.

A regiszter egy funkcionális egység, amely információkat fogad, tárol és továbbít. A regiszterek triggerek csoportjából állnak , általában D. Az információ fogadásának és kiadásának típusa szerint 2 típusú regisztert különböztetünk meg:

A Shift regiszterek flip- flopok sorba kapcsolt lánca . A fő működési mód a kód bitjeinek eltolása az egyik triggerről a másikra az órajel minden impulzusa esetén.

Céljuk szerint a nyilvántartások a következőkben különböznek:

Parancsszámláló

IP

IP ( angol  utasításmutató ) – egy regiszter, amely tartalmazza a következő végrehajtandó utasítás címeltolását a CS kódszegmenshez viszonyítva az x86 család processzoraiban .

Az IP-regiszter a CS-hez CS:IP-ként van társítva, ahol a CS az aktuális kódszegmens, az IP pedig az adott szegmenshez viszonyított aktuális eltolás.

Az IP-regiszter egy 16 bites mutatóregiszter. Ezen kívül az ilyen típusú regiszterek közé tartozik az SP ( angol  Stack Pointer  - veremmutató) és a BP ( angol  alapmutató  - alapmutató).

Működés elve

Például a CS tartalmazza az értéket , az IP-regiszter pedig az eltolást . 2CB5[0]H123H

A következő végrehajtandó utasítás címét úgy számítjuk ki, hogy a CS-ben (Kódszegmensben) lévő címet hozzáadjuk az IP-regiszterben lévő offsethez:

2CB50H + 123H = 2CC73H

Így a következő végrehajtandó utasítás címe: 2CC73H.

Az aktuális utasítás végrehajtásakor a processzor automatikusan megváltoztatja az IP regiszterben lévő értéket, így a CS:IP regiszterpár mindig a következő végrehajtandó utasításra mutat.

EIP

A 80386-os processzortól kezdve bevezették a mutatóregiszter 32 bites változatát, az EIP -t ( Extended Instruction Pointer ) .  Ebben az esetben az IP ennek a regiszternek az alsó vége (az első 16 bit). Az EIP működési elve általában hasonló az IP-regiszter működéséhez. A fő különbség az, hogy védett módban a valós módtól eltérően a CS regiszter egy szelektor (a szelektor nem magára a szegmensre mutat a memóriában, hanem a leíró táblázatban lévő szegmensleíróra ).

RIP

A 64 bites processzorok saját utasításmutató regiszterüket használják - RIP .

Ennek a regiszternek az alsó része az EIP regiszter.

A RIP alapján egy új RIP-relatív címzési módszert vezettek be a 64 bites processzorokban. A RIP többi munkája hasonló az EIP regiszter munkájához.

Jegyzetek

  1. Barbara J. Burian. Az S/370 assembly nyelvű programozás egyszerű megközelítése. – New York: Prentice-Hall, Inc., 1977.
  2. Pogorely S. D., Slobodyanyuk T. F. Szoftver mikroprocesszoros rendszerekhez. Könyvtár. — 2., átdolgozva és kiegészítve. - Kijev: Technika, 1989. - S. 7, 48-51. — 301 p. - (Szakértői kézikönyv). — 50.000 példány.  — ISBN 5-335-00169-0 .
  3. Intel 64 és IA-32 architektúrák szoftverfejlesztői kézikönyve. 1. kötet: Alapépítészet. 3.4 ALAP PROGRAM VÉGREHAJTÁSI JEGYZÉK , archiválva : 2011. május 24. a Wayback Machine -nél 
  4. Eljáráshívási szabvány az ARM architektúrához . ARM Holdings (2009. október 16.). Letöltve: 2012. április 24. Az eredetiből archiválva : 2013. április 28..
  5. Eljáráshívási szabvány az ARM 64 bites architektúrához . ARM Holdings (2011. november 25.). Letöltve: 2012. április 24. Az eredetiből archiválva : 2013. április 28..
  6. MCST. Bevezetés az Elbrus építészetébe  (orosz)  ? . Alt Linux (2020. május 31.). Letöltve: 2020. július 16. Az eredetiből archiválva : 2020. június 2.

Linkek