Processorregister

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 17 juni 2019; kontroller kräver 24 redigeringar .

Processorregistret  är ett fält av en given längd i in - processorns ultrasnabba direktminne (SRAM). Den används av processorn själv, den kan antingen vara tillgänglig eller oåtkomlig av programvara. Till exempel, när nästa instruktion hämtas från minnet, placeras den i instruktionsregistret , som inte kan nås av programmeraren.

Programmatiskt otillgängliga register

Programmatiskt otillgängliga register är alla processorregister som inte kan nås på ett eller annat sätt från det exekverande programmet. Ett exempel på sådana register är det redan nämnda instruktionsregistret .

Programvarutillgängliga register

Programmatiskt tillgängliga register är register som kan nås på ett eller annat sätt från det exekverande programmet. Nästan varje sådant register betecknas med sin namnidentifierare på assemblerspråksnivå och motsvarande numeriska identifieringskod på maskinspråksnivå. När det gäller tillgänglighet är programmässigt tillgängliga register inte samma sak och är praktiskt taget uppdelade i två stora undergrupper:

Specialregister [3] innehåller data som är nödvändiga för driften av processorn - bastabelloffset, åtkomstnivåer, etc.

En del av specialregistren tillhör styrenheten , som styr processorn genom att generera en sekvens av mikroinstruktioner .

Åtkomst till värdena som är lagrade i register utförs direkt vid processorns klockfrekvens och som regel flera gånger snabbare än att komma åt fält i RAM (även om cacheminnet innehåller nödvändiga data), men mängden RAM långt överskrider den totala mängden processorregister, den totala "kapaciteten" för allmänna ändamål/ dataregister för x86-processorer (till exempel Intel 80386 och nyare) 8 register på 4 byte = 32 byte (I x86-64-processorer - 16 av 8 byte = 128 byte och några vektorregister).

Några exempel

Tabellen visar antalet allmänna register i flera vanliga mikroprocessorarkitekturer. Det är värt att notera att i vissa arkitekturer kan användningen av enskilda register vara komplicerad. Så i SPARC och MIPS lagrar inte register nummer 0 information och läses alltid som 0, och i x86-processorer med ett register ESP(pekare till stacken) kan bara vissa kommandon fungera.

Arkitektur heltalsregister
_
FP -
register
Anteckningar
x86-32 åtta åtta
x86-64 16 16
IBM System/360 16 fyra
z/Arkitektur 16 16
Itanium 128 128
SPARC 31 32 Register 0 (globalt) är alltid igång
IBM Cell 4~16 1~4
IBM POWER 32 32
makt arkitektur 32 32
Alfa 32 32
6502 3 0
W65C816S 5 0
BILD ett 0
AVR 32 0
ARM 32-bitars [4] 16 olika
ARM 64-bitars [5] 31 32
MIPS 31 32 Register 0 är alltid noll
RISC-V 31 32 Dessutom finns register 0 som alltid returnerar noll
Elbrus 2000 256 i linje med

heltal

32 tvåsiffriga register,

256 = 32 globala register + 224 procedurstackregister [6]

x86- arkitektur

IP ( English  Instruction Pointer ) - ett register som indikerar offset (adress) för instruktioner i kodsegmentet (1234: 0100h segment / offset).

IP - 16-bitars (nedre delen av EIP)

EIP - 32-bitars analog (nedre delen av RIP)

RIP - 64-bitars analog

Segmentregister  är register som pekar på segment.

Alla segmentregister är 16-bitars.

CS ( Code Segment ) ,  DS ( Data Segment ) , SS ( Stack Segment ) , ES ( Extra Segment ) , FS, GS    

I processorns verkliga läge innehåller segmentregistren adressen till början av 64Kb-segmentet, skiftat åt höger med 4 bitar.

I processorns skyddade mod innehåller segmentregistren väljaren för minnessegmentet som tilldelats av operativsystemet.

CS är en pekare till ett kodsegment. CS:IP-bindningen (CS:EIP/CS:RIP - i säkert/64-bitarsläge) pekar på minnesadressen för nästa instruktion.

I 64-bitarsläge deltar inte segmentregistren CS, DS, ES och SS i bildandet av en linjär (kontinuerlig) adress, eftersom segmentering inte stöds i detta läge.

Dataregister  används för att lagra mellanliggande beräkningar.

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

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

AX ( Accumulator ) ,  CX ( Count Register ) , DX ( Data Register ) , BX ( Base Register ) , SP ( Stack Pointer ) , BP ( Base Pointer ) SI (, Source Index ), DI ( Destination Index ), R8W - R15W - 16-bitars        

AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B - 8-bitars (halvor av 16-bitars register)

till exempel AH - hög AX - hög halva av 8 bitar

AL - låg AX - låg halva på 8 bitar

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

där x är 8...15.
Register RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL är endast tillgängliga i 64-bitars processorläge.

Flaggregister FLAGS (16 bitar) / EFLAGS (32 bitar) / RFLAGS (64 bitar) - innehåller processorns aktuella tillstånd.

Systemregistren GDTR, LDTR och IDTR introducerades i processorer som börjar med Intel286 och är designade för att lagra basadresserna för deskriptortabeller  - de viktigaste komponenterna i systemarkitekturen när man arbetar i skyddat läge.

GDTR-registret innehåller en 32-bitars (24-bitars för Intel286) basadress och en 16-bitars gräns för global deskriptortabell ( GDT ).

Den synliga delen av LDTR- registret innehåller endast den lokala deskriptortabellen (LDT) deskriptorväljaren. Själva LDT-deskriptorn läses automatiskt in i den LDTR-dolda delen från den globala deskriptortabellen.

IDTR-registret innehåller en 32-bitars (24-bitars för Intel286) basadress och en gräns för 16-bitars avbrottsdeskriptortabell ( IDT ). I verkligt läge kan den användas för att ändra platsen för avbrottsvektortabellen.

Den synliga delen av TR-registret innehåller väljaren Task State Segment Descriptor ( TSS ). Själva TSS-beskrivningen laddas automatiskt in i den dolda delen av TR:n från den globala deskriptortabellen.

Ett register är en funktionell enhet som tar emot, lagrar och överför information. Register består av en grupp triggers , vanligtvis D. Beroende på typen av mottagning och utfärdande av information särskiljs 2 typer av register:

Skiftregister är en seriekopplad kedja av vippor . Huvuddriftssättet är förskjutningen av kodens bitar från en trigger till en annan för varje puls av klocksignalen.

Av syftet skiljer sig registren åt i:

Kommandoräknare

IP

IP ( English  Instruction Pointer ) - ett register som innehåller adressförskjutningen för nästa instruktion som ska exekveras i förhållande till CS -kodsegmentet i x86 - familjens processorer .

IP-registret är associerat med CS som CS:IP, där CS är det aktuella kodsegmentet och IP är den aktuella offseten från det segmentet.

IP-registret är ett 16-bitars pekarregister. Utöver det inkluderar denna typ av register SP ( English  Stack Pointer  - stack pointer) och BP ( English  Base Pointer  - baspekare).

Funktionsprincip

Till exempel innehåller CS värdet , IP-registret lagrar offset . 2CB5[0]H123H

Adressen för nästa instruktion som ska exekveras beräknas genom att addera adressen i CS (Code Segment) till offseten i IP-registret:

2CB50H + 123H = 2CC73H

Således är adressen för nästa instruktion som ska exekveras 2CC73H.

När den aktuella instruktionen exekveras ändrar processorn automatiskt värdet i IP-registret, så att CS:IP-registerparet alltid pekar på nästa instruktion som ska exekveras.

EIP

Från och med 80386-processorn introducerades en 32-bitarsversion av pekarregistret - EIP ( Extended Instruction Pointer ) .  I det här fallet är IP den nedre delen av detta register (de första 16 bitarna). Principen för driften av EIP liknar i allmänhet driften av IP-registret. Huvudskillnaden är att i skyddat läge, till skillnad från verkligt läge, är CS-registret en väljare (väljaren pekar inte på själva segmentet i minnet, utan på segmentbeskrivningen i deskriptortabellen).

RIP

64-bitars processorer använder sitt eget instruktionspekarregister - RIP .

Den nedre delen av detta register är EIP-registret.

Baserat på RIP har en ny RIP-relativ adresseringsmetod introducerats i 64-bitars processorer. Resten av arbetet med RIP liknar arbetet i EIP-registret.

Anteckningar

  1. Barbara J. Burian. Ett enkelt sätt att programmera S/370 assemblerspråk. — New York: Prentice-Hall, Inc., 1977.
  2. Pogorely S. D., Slobodyanyuk T. F. Programvara för mikroprocessorsystem. Katalog. — 2:a, reviderad och kompletterad. - Kiev: Technika, 1989. - S. 7, 48-51. — 301 sid. - (Specialisthandbok). — 50 000 exemplar.  — ISBN 5-335-00169-0 .
  3. Intel 64 and IA-32 Architectures Software Developer's Manual. Volym 1: Grundläggande arkitektur. 3.4 UTFÖRANDEREGISTER FÖR GRUNDLÄGGANDE PROGRAM Arkiverade 24 maj 2011 på Wayback Machine 
  4. Proceduranropsstandard för ARM-arkitekturen . ARM Holdings (16 oktober 2009). Hämtad 24 april 2012. Arkiverad från originalet 28 april 2013.
  5. Proceduranropsstandard för ARM 64-bitars arkitektur . ARM Holdings (25 november 2011). Hämtad 24 april 2012. Arkiverad från originalet 28 april 2013.
  6. MCST. Introduktion till Elbrus arkitektur  (ryska)  ? . Alt Linux (31 maj 2020). Hämtad 16 juli 2020. Arkiverad från originalet 2 juni 2020.

Länkar