Processor register

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 17. juni 2019; checks kræver 24 redigeringer .

Processorregisteret  er et felt af en given længde i in - processor ultra-fast random access memory (SRAM). Det bruges af processoren selv, det kan enten være tilgængeligt eller utilgængeligt af software. For eksempel, når den næste instruktion hentes fra hukommelsen, placeres den i instruktionsregisteret , som ikke kan tilgås af programmøren.

Programmatisk utilgængelige registre

Programmatisk utilgængelige registre er alle processorregistre, der ikke kan tilgås på den ene eller anden måde fra det eksekverende program. Et eksempel på sådanne registre er det allerede nævnte instruktionsregister .

Software-tilgængelige registre

Programmatisk tilgængelige registre er registre, der kan tilgås på den ene eller anden måde fra det eksekverende program. Næsten hvert sådant register er udpeget af dets navn-identifikator på assemblersprogniveau og den tilsvarende numeriske identifikationskode på maskinsprogniveau. Med hensyn til tilgængelighed er programmatisk tilgængelige registre ikke det samme og er praktisk talt opdelt i to store undergrupper:

Særlige registre [3] indeholder data, der er nødvendige for driften af ​​processoren - basistabelforskydninger, adgangsniveauer osv.

En del af de specielle registre tilhører styreenheden , som styrer processoren ved at generere en sekvens af mikroinstruktioner .

Adgang til værdier gemt i registre udføres direkte ved processorens clockfrekvens og som regel flere gange hurtigere end adgang til felter i RAM (selvom cachehukommelsen indeholder de nødvendige data), men mængden af ​​RAM langt overstiger det samlede antal processorregistre, den samlede "kapacitet" af generelle formål / dataregistre for x86-processorer (for eksempel Intel 80386 og nyere) 8 registre på 4 bytes = 32 bytes (I x86-64-processorer - 16 af 8 bytes = 128 bytes og nogle vektorregistre).

Nogle eksempler

Tabellen viser antallet af generelle registre i flere almindelige mikroprocessorarkitekturer. Det er værd at bemærke, at i nogle arkitekturer kan brugen af ​​individuelle registre være kompliceret. Så i SPARC og MIPS gemmer register nummer 0 ikke information og læses altid som 0, og i x86-processorer med et register ESP(peger til stakken) kan kun nogle kommandoer fungere.

Arkitektur heltalsregistre
_
FP -
registre
Noter
x86-32 otte otte
x86-64 16 16
IBM System/360 16 fire
z/Arkitektur 16 16
Itanium 128 128
SPARC 31 32 Register 0 (global) kører altid
IBM Cell 4~16 1~4
IBM POWER 32 32
magt arkitektur 32 32
Alfa 32 32
6502 3 0
W65C816S 5 0
PIC en 0
AVR 32 0
ARM 32-bit [4] 16 forskellige
ARM 64-bit [5] 31 32
MIPS 31 32 Register 0 er altid nul
RISC-V 31 32 Derudover er der register 0, som altid returnerer nul
Elbrus 2000 256 på linie med

heltal

32 tocifrede registre,

256 = 32 globale registre + 224 procedurestakregistre [6]

x86 arkitektur

IP ( English  Instruction Pointer ) - et register, der angiver offset (adresse) af instruktioner i kodesegmentet (1234: 0100h segment / offset).

IP - 16-bit (nedre del af EIP)

EIP - 32-bit analog (nedre del af RIP)

RIP - 64-bit analog

Segmentregistre  er registre, der peger på segmenter.

Alle segmentregistre er 16-bit.

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

I processorens reelle tilstand indeholder segmentregistrene adressen på begyndelsen af ​​64Kb-segmentet, forskudt til højre med 4 bit.

I processorens beskyttede tilstand indeholder segmentregistrene selektoren for hukommelsessegmentet, som er tildelt af OS.

CS er en pegepind til et kodesegment. CS:IP-bindingen (CS:EIP/CS:RIP - i sikker/64-bit-tilstand) peger på hukommelsesadressen for den næste instruktion.

I 64-bit tilstand deltager segmentregistrene CS, DS, ES og SS ikke i dannelsen af ​​en lineær (kontinuerlig) adresse, da segmentering ikke understøttes i denne tilstand.

Dataregistre  bruges til at lagre mellemberegninger.

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

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

AX ( Akkumulator ) ,  CX ( Tælleregister ) , DX ( Dataregister ) , BX ( Base Register ) , SP ( Stack Pointer ) , BP ( Base Pointer ) SI (, Kildeindeks ), DI ( Destination Index ), R8W - R15W - 16-bit        

AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B - 8-bit (halvdele af 16-bit registre)

for eksempel AH - høj AX - høj halvdel af 8 bit

AL - lav AX - lav halvdel af 8 bits

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

hvor x er 8...15.
Registre RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL er kun tilgængelige i 64-bit processortilstand.

Flagregister FLAGS (16 bit) / EFLAGS (32 bit) / RFLAGS (64 bit) - indeholder den aktuelle tilstand for processoren.

Systemregistrene GDTR, LDTR og IDTR blev introduceret i processorer startende med Intel286 og er designet til at gemme basisadresserne for deskriptortabeller  - de vigtigste komponenter i systemarkitekturen, når man arbejder i beskyttet tilstand.

GDTR-registret indeholder en 32-bit (24-bit for Intel286) baseadresse og en 16-bit global descriptor table ( GDT ) grænse.

Den synlige del af LDTR- registret indeholder kun den lokale descriptor table (LDT) descriptor selector. Selve LDT-deskriptoren indlæses automatisk i den LDTR-skjulte del fra den globale deskriptor-tabel.

IDTR-registret indeholder en 32-bit (24-bit for Intel286) baseadresse og en 16-bit interrupt descriptor table ( IDT ) grænse. I real mode kan den bruges til at ændre placeringen af ​​interrupt vektor tabellen.

Den synlige del af TR-registret indeholder Task State Segment Descriptor ( TSS )-vælgeren. Selve TSS-deskriptoren indlæses automatisk i den skjulte del af TR'en fra den globale deskriptor-tabel.

Et register er en funktionel enhed, der modtager, lagrer og transmitterer information. Registre består af en gruppe af udløsere , sædvanligvis D. Afhængig af typen af ​​modtagelse og udstedelse af information skelnes der mellem 2 typer registre:

Skifteregistre er en serieforbundet kæde af flip- flops . Hoveddriftsmåden er skiftet af kodens bits fra en trigger til en anden for hver impuls af ursignalet.

Efter formål adskiller registrene sig i:

Kommandotæller

IP

IP ( English  Instruction Pointer ) - et register, der indeholder adresseforskydningen af ​​den næste instruktion, der skal udføres i forhold til CS -kodesegmentet i x86 - familieprocessorer .

IP-registret er knyttet til CS som CS:IP, hvor CS er det aktuelle kodesegment og IP er den aktuelle offset fra det segment.

IP-registret er et 16-bit pointerregister. Ud over det inkluderer denne type registre SP ( English  Stack Pointer  - stack pointer) og BP ( English  Base Pointer  - base pointer).

Funktionsprincip

For eksempel indeholder CS værdien , IP-registret gemmer forskydningen . 2CB5[0]H123H

Adressen på den næste instruktion, der skal udføres, beregnes ved at tilføje adressen i CS (Code Segment) til offset i IP-registret:

2CB50H + 123H = 2CC73H

Således er adressen på den næste instruktion, der skal udføres 2CC73H.

Når den aktuelle instruktion udføres, ændrer processoren automatisk værdien i IP-registeret, således at CS:IP-registerparret altid peger på den næste instruktion, der skal udføres.

EIP

Startende med 80386-processoren blev en 32-bit version af pointerregisteret introduceret - EIP ( Extended Instruction Pointer ) .  I dette tilfælde er IP den lave ende af dette register (de første 16 bit). Princippet om driften af ​​EIP svarer generelt til driften af ​​IP-registret. Den største forskel er, at i beskyttet tilstand, i modsætning til reel tilstand, er CS-registret en vælger (vælgeren peger ikke på selve segmentet i hukommelsen, men på segmentbeskrivelsen i deskriptortabellen).

RIP

64-bit processorer bruger deres eget instruktions pointer register - RIP .

Den nederste del af dette register er EIP-registret.

Baseret på RIP er en ny RIP-relativ adresseringsmetode blevet introduceret i 64-bit processorer. Resten af ​​arbejdet i RIP ligner arbejdet i EIP-registret.

Noter

  1. Barbara J. Burian. En enkel tilgang til S/370 assemblersprogprogrammering. — New York: Prentice-Hall, Inc., 1977.
  2. Pogorely S. D., Slobodyanyuk T. F. Software til mikroprocessorsystemer. Vejviser. — 2., revideret og suppleret. - Kiev: Technika, 1989. - S. 7, 48-51. — 301 s. - (Specialisthåndbog). — 50.000 eksemplarer.  — ISBN 5-335-00169-0 .
  3. Softwareudviklermanual til Intel 64 og IA-32 Architectures. Bind 1: Grundlæggende arkitektur. 3.4 REGISTRE FOR GRUNDLÆGGENDE PROGRAMUDFØRELSE Arkiveret 24. maj 2011 på Wayback Machine 
  4. Procedure Call Standard for ARM-arkitekturen . ARM Holdings (16. oktober 2009). Hentet 24. april 2012. Arkiveret fra originalen 28. april 2013.
  5. Procedure Call Standard for ARM 64-bit arkitekturen . ARM Holdings (25. november 2011). Hentet 24. april 2012. Arkiveret fra originalen 28. april 2013.
  6. MCST. Introduktion til Elbrus-arkitektur  (russisk)  ? . Alt Linux (31. maj 2020). Hentet 16. juli 2020. Arkiveret fra originalen 2. juni 2020.

Links