ñòàòüèGNU Free Documentation License ìàòåðèàëû âçÿòû èç Âèêèïåäèè Ñòàòüÿ áûëà èçìåíåíà. Îðèãèíàë ñòàòüè.

Ðåãèñòð ïðîöåññîðà

Ìàòåðèàë èç Ýíöèêëîïåäèè â ñâîáîäíîé ýíöèêëîïåäèè
Ïåðåéòè ê: íàâèãàöèÿ, ïîèñê

Ðåãèñòð ïðîöåññîðà â áëîê ÿ÷ååê ïàìÿòè, îáðàçóþùèé ñâåðõáûñòðóþ îïåðàòèâíóþ ïàìÿòü (ÑÎÇÓ) âíóòðè ïðîöåññîðà; èñïîëüçóåòñÿ ñàìèì ïðîöåññîðîì è áîëüøîé ïàëëåòíûé ÷àñòüþ íåäîñòóïåí ïðîãðàììèñòó: íàïðèìåð, ïðè âûáîðêå èç ïàìÿòè î÷åðåäíîé êîìàíäû îíà ïîìåùàåòñÿ â ðåãèñòð êîìàíä, ê êîòîðîìó ïðîãðàììèñò îáðàòèòüñÿ íå ìîæåò. (Èìåþòñÿ òàêæå ðåãèñòðû, êîòîðûå â ïðèíöèïå ïðîãðàììíî äîñòóïíû, íî îáðàùåíèå ê íèì îñóùåñòâëÿåòñÿ èç ïðîãðàìì îïåðàöèîííîé ñèñòåìû, íàïðèìåð, óïðàâëÿþùèå ðåãèñòðû è òåíåâûå ðåãèñòðû äåñêðèïòîðîâ ñåãìåíòîâ. Ýòèìè ðåãèñòðàìè ïîëüçóþòñÿ â îñíîâíîì ðàçðàáîò÷èêè îïåðàöèîííûõ ñèñòåì).

Ñóùåñòâóþò òàêæå òàê íàçûâàåìûå ðåãèñòðû îáùåãî íàçíà÷åíèÿ (ÐÎÍ), ïðåäñòàâëÿþùèå ñîáîé ÷àñòü ðåãèñòðîâ ïðîöåññîðà, èñïîëüçóþùèõñÿ áåç îãðàíè÷åíèÿ â àðèôìåòè÷åñêèõ îïåðàöèÿõ, íî èìåþùèå îïðåäåëåííûå îãðàíè÷åíèÿ, íàïðèìåð â ñòðîêîâûõ. ÐÎÍ, íå õàðàêòåðíûå äëÿ ýïîõè ìåéíôðåéìîâ òèïà IBM/370[1] ñòàëè ïîïóëÿðíûìè â ìèêðîïðîöåññîðàõ àðõèòåêòóðû X86 â i8085, i8086 è ïîñëåäóþùèõ[2].

Ñïåöèàëüíûå ðåãèñòðû[3] ñîäåðæàò äàííûå, íåîáõîäèìûå äëÿ ðàáîòû ïðîöåññîðà â ñìåùåíèÿ áàçîâûõ òàáëèö, óðîâíè äîñòóïà è ò. ä.

×àñòü ñïåöèàëüíûõ ðåãèñòðîâ ïðèíàäëåæèò óñòðîéñòâó óïðàâëåíèÿ, êîòîðîå óïðàâëÿåò ïðîöåññîðîì ïóò¸ì ãåíåðàöèè ïîñëåäîâàòåëüíîñòè ìèêðîêîìàíä.

Äîñòóï ê çíà÷åíèÿì, õðàíÿùèìñÿ â ðåãèñòðàõ, êàê ïðàâèëî, â íåñêîëüêî ðàç áûñòðåå, ÷åì äîñòóï ê ÿ÷åéêàì îïåðàòèâíîé ïàìÿòè (äàæå åñëè êåø-ïàìÿòü ñîäåðæèò íóæíûå äàííûå), íî îáú¸ì îïåðàòèâíîé ïàìÿòè íàìíîãî ïðåâîñõîäèò ñóììàðíûé îáú¸ì ðåãèñòðîâ (îáú¸ì ñðåäíåãî ìîäóëÿ îïåðàòèâíîé ïàìÿòè ñåãîäíÿ ñîñòàâëÿåò 1-4 Ãá[4], ñóììàðíàÿ «¸ìêîñòü» ðåãèñòðîâ îáùåãî íàçíà÷åíèÿ/äàííûõ äëÿ ïðîöåññîðà Intel 80x86 16 áèòîâ * 4 = 64 áèòà (8 áàéò)).

Ñîäåðæàíèå

[ïðàâèòü] Àðõèòåêòóðà x86

IP (àíãë. Instruction Pointer) â ðåãèñòð, îáîçíà÷àþùèé ñìåùåíèå ñëåäóþùåé êîìàíäû îòíîñèòåëüíî êîäîâîãî ñåãìåíòà.

IP â 16-áèòíûé (ìëàäøàÿ ÷àñòü EIP)

EIP â 32-áèòíûé àíàëîã (ìëàäøàÿ ÷àñòü RIP)

RIP â 64-áèòíûé àíàëîã

Ñåãìåíòíûå ðåãèñòðû â Ðåãèñòðû óêàçûâàþùèå íà ñåãìåíòû.

CS (àíãë. Code Segment), DS (àíãë. Data Segment), SS (àíãë. Stack Segment), ES, FS, GS

 ðåàëüíîì ðåæèìå ðàáîòû ïðîöåññîðà ñåãìåíòíûå ðåãèñòðû ñîäåðæàò àäðåñ íà÷àëà 64Kb ñåãìåíòà, ñìåùåííûé âïðàâî íà 4 áèòà.

 çàùèùåííîì ðåæèìå ðàáîòû ïðîöåññîðà ñåãìåíòíûå ðåãèñòðû ñîäåðæàò ñåëåêòîð ñåãìåíòà ïàìÿòè, âûäåëåííîãî ÎÑ.

CS â óêàçàòåëü íà êîäîâûé ñåãìåíò. Ñâÿçêà CS:IP (CS:EIP/CS:RIP â â çàùèùåííîì/64-áèòíîì ðåæèìå) óêàçûâàåò íà àäðåñ â ïàìÿòè ñëåäóþùåé êîìàíäû.

Ðåãèñòðû äàííûõ â ñëóæàò äëÿ õðàíåíèÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé.

RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 â R15  â 64-áèòíûå

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D â R15D  â 32-áèòíûå (extended AX)

AX, CX, DX, BX, SP, BP, SI, DI, R8W â R15W â 16-áèòíûå

AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B â R15B â 8-áèòíûå (ïîëîâèíêè 16-òè áèòíûõ ðåãèñòðîâ)

íàïðèìåð, AH â high AX â ñòàðøàÿ ïîëîâèíêà 8 áèò

AL â low AX â ìëàäøàÿ ïîëîâèíêà 8 áèò

RAX RCX RDX RBX
EAX ECX EDX EBX
AX CX DX BX
AH AL CH CL DH DL BH BL


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

ãäå x â 8..15.
Ðåãèñòðû RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL äîñòóïíû òîëüêî â 64-áèòíîì ðåæèìå ðàáîòû ïðîöåññîðà.

Ðåãèñòð ôëàãîâ FLAGS (16 áèò) / EFLAGS (32 áèòà) / RFLAGS (64 áèòà) â ñîäåðæèò òåêóùåå ñîñòîÿíèå ïðîöåññîðà.

Ðåãèñòðîì íàçûâàåòñÿ ôóíêöèîíàëüíûé óçåë, îñóùåñòâëÿþùèé ïðè¸ì, õðàíåíèå è ïåðåäà÷ó èíôîðìàöèè. Ðåãèñòðû ñîñòîÿò èç ãðóïïû òðèããåðîâ, îáû÷íî D. Ïî òèïó ïðè¸ìà è âûäà÷è èíôîðìàöèè ðàçëè÷àþò 2 òèïà ðåãèñòðîâ:

  • Ñ ïîñëåäîâàòåëüíûì ïðè¸ìîì è âûäà÷åé èíôîðìàöèè â ñäâèãîâûå ðåãèñòðû.
  • Ñ ïàðàëëåëüíûì ïðè¸ìîì è âûäà÷åé èíôîðìàöèè â ïàðàëëåëüíûå ðåãèñòðû.

Ñäâèãîâûå ðåãèñòðû ïðåäñòàâëÿþò ñîáîé ïîñëåäîâàòåëüíî ñîåäèí¸ííóþ öåïî÷êó òðèããåðîâ. Îñíîâíîé ðåæèì ðàáîòû â ñäâèã ðàçðÿäîâ êîäà îò îäíîãî òðèããåðà ê äðóãîìó íà êàæäûé èìïóëüñ òàêòîâîãî ñèãíàëà.

Ïî íàçíà÷åíèþ ðåãèñòðû ðàçëè÷àþòñÿ íà:

  • àêêóìóëÿòîð â èñïîëüçóåòñÿ äëÿ õðàíåíèÿ ïðîìåæóòî÷íûõ ðåçóëüòàòîâ àðèôìåòè÷åñêèõ è ëîãè÷åñêèõ îïåðàöèé è èíñòðóêöèé ââîäà-âûâîäà;
  • ôëàãîâûå â õðàíÿò ïðèçíàêè ðåçóëüòàòîâ àðèôìåòè÷åñêèõ è ëîãè÷åñêèõ îïåðàöèé;
  • îáùåãî íàçíà÷åíèÿ â õðàíÿò îïåðàíäû àðèôìåòè÷åñêèõ è ëîãè÷åñêèõ âûðàæåíèé, èíäåêñû è àäðåñà;
  • èíäåêñíûå â õðàíÿò èíäåêñû èñõîäíûõ è öåëåâûõ ýëåìåíòîâ ìàññèâà;
  • óêàçàòåëüíûå â õðàíÿò óêàçàòåëè íà ñïåöèàëüíûå îáëàñòè ïàìÿòè (óêàçàòåëü òåêóùåé îïåðàöèè, óêàçàòåëü áàçû, óêàçàòåëü ñòåêà);
  • ñåãìåíòíûå â õðàíÿò àäðåñà è ñåëåêòîðû ñåãìåíòîâ ïàìÿòè;
  • óïðàâëÿþùèå â õðàíÿò èíôîðìàöèþ, óïðàâëÿþùóþ ñîñòîÿíèåì ïðîöåññîðà, à òàêæå àäðåñà ñèñòåìíûõ òàáëèö.

[ïðàâèòü] Ñ÷¸ò÷èê êîìàíä

[ïðàâèòü] IP

IP (àíãë. Instruction Pointer) â ðåãèñòð, ñîäåðæàùèé àäðåñ-ñìåùåíèå ñëåäóþùåé êîìàíäû, ïîäëåæàùåé èñïîëíåíèþ, îòíîñèòåëüíî êîäîâîãî ñåãìåíòà CS â ïðîöåññîðàõ ñåìåéñòâà x86.

Ðåãèñòð IP ñâÿçàí ñ CS â âèäå CS:IP, ãäå CS ÿâëÿåòñÿ òåêóùèì êîäîâûì ñåãìåíòîì, à IP â òåêóùèì ñìåùåíèåì îòíîñèòåëüíî ýòîãî ñåãìåíòà.

Ðåãèñòð IP ÿâëÿåòñÿ 16-ðàçðÿäíûì ðåãèñòðîì-óêàçàòåëåì. Êðîìå íåãî, â ñîñòàâ ðåãèñòðîâ ýòîãî òèïà âõîäÿò SP (àíãë. Stack Pointer â óêàçàòåëü ñòåêà) è BP (àíãë. Base Pointer â áàçîâûé óêàçàòåëü).

Ïðèíöèï ðàáîòû

Íàïðèìåð, CS ñîäåðæèò çíà÷åíèå 2CB5[0]H, â ðåãèñòðå IP õðàíèòñÿ ñìåùåíèå 123H.

Àäðåñ ñëåäóþùåé èíñòðóêöèè, ïîäëåæàùåé èñïîëíåíèþ, âû÷èñëÿåòñÿ ïóòåì ñóììèðîâàíèÿ àäðåñà â CS (ñåãìåíòå êîäà) ñî ñìåùåíèåì â ðåãèñòðå IP:

2CB50H + 123H = 2CC73H

Òàêèì îáðàçîì, àäðåñ ñëåäóþùåé èíñòðóêöèè äëÿ èñïîëíåíèÿ ðàâåí 2CC73H.

Ïðè âûïîëíåíèè òåêóùåé èíñòðóêöèè ïðîöåññîð àâòîìàòè÷åñêè èçìåíÿåò çíà÷åíèå â ðåãèñòðå IP, â ðåçóëüòàòå ÷åãî ðåãèñòðîâàÿ ïàðà CS:IP âñåãäà óêàçûâàåò íà ñëåäóþùóþ ïîäëåæàùóþ èñïîëíåíèþ èíñòðóêöèþ.

[ïðàâèòü] EIP

Íà÷èíàÿ ñ ïðîöåññîðà 80386 áûëà ââåäåíà 32-ðàçðÿäíàÿ âåðñèÿ ðåãèñòðà-óêàçàòåëÿ â EIP.  äàííîì ñëó÷àå IP ÿâëÿåòñÿ ìëàäøåé ÷àñòüþ ýòîãî ðåãèñòðà (ïåðâûå 16 ðàçðÿäîâ). Ïðèíöèï ðàáîòû EIP â öåëîì ñõîæ ñ ðàáîòîé ðåãèñòðà IP. Îñíîâíàÿ ðàçíèöà ñîñòîèò â òîì, ÷òî â çàùèù¸ííîì ðåæèìå, â îòëè÷èå îò ðåàëüíîãî ðåæèìà, ðåãèñòð CS ÿâëÿåòñÿ ñåëåêòîðîì (ñåëåêòîð óêàçûâàåò íå íà ñàì ñåãìåíò â ïàìÿòè, à íà åãî äåñêðèïòîð ñåãìåíòà â òàáëèöå äåñêðèïòîðîâ).

[ïðàâèòü] RIP

Ñòðóêòóðà ðåãèñòðà RIP.gif

 64-ðàçðÿäíûõ ïðîöåññîðàõ èñïîëüçóåòñÿ ñâîé ðåãèñòð-óêàçàòåëü èíñòðóêöèé â RIP.

Ìëàäøåé ÷àñòüþ ýòîãî ðåãèñòðà ÿâëÿåòñÿ ðåãèñòð EIP.

Íà îñíîâå RIP â 64-ðàçðÿäíûõ ïðîöåññîðàõ ââåä¸í íîâûé ìåòîä àäðåñàöèè RIP-relative.  îñòàëüíîì ðàáîòà RIP àíàëîãè÷íà ðàáîòå ðåãèñòðà EIP.

[ïðàâèòü] Ñì. òàêæå

[ïðàâèòü] Ïðèìå÷àíèÿ

  1. â‘ Barbara J. Burian Ïðîãðàììèðîâàíèå íà ÿçûêå àññåìáëåðà ñèñòåìû IBM/370 óïðîù¸ííûé ïîäõîä = A simple approach to S/370 assembly language programming. â New Jersy: Prentice-Hall, Inc, 1977.
  2. â‘ Ïîãîðåëûé Ñ. Ä., Ñëîáîäÿíþê Ò. Ô. Ïðîãðàììíîå îáåñïå÷åíèå ìèêðîïðîöåññîðíûõ ñèñòåì. Ñïðàâî÷íèê. â 2-å, ïåðåðàáîòàííîå è äîïîëíåííîå. â Ê: Òýõíèêà, 1989. â Ñ. 7, 48-51. â 301 ñ. â (Ñïðàâî÷íèê ñïåöèàëèñòà). â 50 000 ýêç. â ISBN 5-335-00169-0
  3. â‘ Intel 64 and IA-32 Architectures Software Developerâ™s Manual. Volume 1: Basic Architecture. 3.4 BASIC PROGRAM EXECUTION REGISTERS (àíãë.)
  4. â‘ Ñòàòèñòèêà îáú¸ìà îïåðàòèâíîé ïàìÿòè ÏÊ, èñïîëüçóåìûõ äëÿ èãð


Ïðîñòðàíñòâà èì¸í

Âàðèàíòû
Äåéñòâèÿ