Регистр процессора

Поделись знанием:
Перейти к: навигация, поиск

Регистр процессора — блок ячеек памяти, образующий сверхбыструю оперативную память (СОЗУ) внутри процессора; используется самим процессором и большой частью недоступен программисту: например, при выборке из памяти очередной команды она помещается в регистр команд (англ.), к которому программист обратиться не может.

Имеются также регистры, которые, в принципе, программно доступны, но обращение к ним осуществляется из программ операционной системы, например, управляющие регистры и теневые регистры дескрипторов сегментов. Этими регистрами пользуются в основном разработчики операционных систем.

Существуют также так называемые регистры общего назначения (РОН), представляющие собой часть регистров процессора, использующихся без ограничения в арифметических операциях, но имеющие определенные ограничения, например, в строковых РОН, не характерные для эпохи мейнфреймов типа IBM/370[1] стали популярными в микропроцессорах архитектуры X86 — Intel 8085, Intel 8086 и последующих[2].

Специальные регистры[3] содержат данные, необходимые для работы процессора — смещения базовых таблиц, уровни доступа и т. д.

Часть специальных регистров принадлежит устройству управления, которое управляет процессором путём генерации последовательности микрокоманд.

Доступ к значениям, хранящимся в регистрах, как правило, в несколько раз быстрее, чем доступ к ячейкам оперативной памяти (даже если кеш-память содержит нужные данные), но объём оперативной памяти намного превосходит суммарный объём регистров (объём среднего модуля оперативной памяти сегодня составляет 1—4 гигабайт[4], суммарная «ёмкость» регистров общего назначения/данных для x86-процессоров, например Intel 80386 и более новых, 8 регистров по 4 байта = 32 байта; в режиме x86 64 - 16 по 8 байт = 128 байт и некоторое количество векторных регистров).





Некоторые примеры

В таблице показано количество регистров общего назначения в нескольких распространенных архитектурах микропроцессоров. Стоит отметить, что в некоторых архитектурах использование отдельных регистров может быть осложнено. Так, в SPARC и MIPS регистр номер 0 не сохраняет информацию и всегда считывается как 0, а в процессорах x86 с регистром ESP (указатель на стек) могут работать лишь некоторые команды.

Архитектура Целочисленных
регистров
FP
регистров
Примечания
x86-32 8 8
x86-64 16 16
IBM System/360 16 4
z/Architecture 16 16
Itanium 128 128
SPARC 31 32 Регистр 0 (глобальный) всегда занулен
IBM Cell 4~16 1~4
IBM POWER 32 32
Power Architecture 32 32
Alpha 32 32
6502 3 0
W65C816S 5 0
PIC 1 0
AVR 32 0
ARM 32-bit[5] 16 varies
ARM 64-bit[6] 31 32
MIPS 31 32 Регистр 0 всегда занулен


Архитектура x86

IP (англ. Instruction Pointer) — регистр, указывающий на смещение (адрес) инструкций в сегменте кода (1234:0100h сегмент/смещение).

IP — 16-битный (младшая часть EIP)

EIP — 32-битный аналог (младшая часть RIP)

RIP — 64-битный аналог

Сегментные регистры — регистры, указывающие на сегменты.

CS (англ. Code Segment), DS (англ. Data Segment), SS (англ. Stack Segment), ES (англ. Extra Segment), 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 (англ. 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-битные

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 бита) — содержит текущее состояние процессора.

Системные регистры GDTR, LDTR и IDTR введены в процессорах начиная с Intel286 и предназначены для хранения базовых адресов таблиц дескрипторов — важнейших составляющих системной архитектуры при работе в защищенном режиме.

Регистр GDTR содержит 32-битный (24-битный для Intel286) базовый адрес и 16-битный предел глобальной таблицы дескрипторов (GDT).

Видимая часть регистра LDTR содержит только селектор дескриптора локальной таблицы дескрипторов (LDT). Сам дескриптор LDT автоматически загружается в скрытую часть LDTR из глобальной таблицы дескрипторов.

Регистр IDTR содержит 32-битный (24-битный для Intel286) базовый адрес и 16-битный предел таблицы дескрипторов прерываний (IDT). В реальном режиме может быть использован для изменения местоположения таблицы векторов прерываний.

Видимая часть регистра TR содержит селектор дескриптора сегмента состояния задачи (TSS). Сам дескриптор TSS автоматически загружается в скрытую часть TR из глобальной таблицы дескрипторов.

Регистром называется функциональный узел, осуществляющий приём, хранение и передачу информации. Регистры состоят из группы триггеров, обычно 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 (англ.  Extended Instruction Pointer). В данном случае IP является младшей частью этого регистра (первые 16 разрядов). Принцип работы EIP в целом схож с работой регистра IP. Основная разница состоит в том, что в защищённом режиме, в отличие от реального режима, регистр CS является селектором (селектор указывает не на сам сегмент в памяти, а на дескриптор сегмента в таблице дескрипторов).

RIP

В 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 York: Prentice-Hall, Inc, 1977.
  2. Погорелый С. Д., Слободянюк Т. Ф. Программное обеспечение микропроцессорных систем. Справочник. — 2-е, переработанное и дополненное. — К: Тэхника, 1989. — С. 7, 48-51. — 301 с. — (Справочник специалиста). — 50 000 экз. — ISBN 5-335-00169-0.
  3. [download.intel.com/design/processor/manuals/253665.pdf Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 1: Basic Architecture. 3.4 BASIC PROGRAM EXECUTION REGISTERS] (англ.)
  4. [store.steampowered.com/hwsurvey/ Статистика объёма оперативной памяти ПК, используемых для игр], Steam  (англ.)
  5. [infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf Procedure Call Standard for the ARM Architecture]. ARM Holdings (16 October 2009). Проверено 24 апреля 2012. [www.webcitation.org/6GDOoNh8S Архивировано из первоисточника 28 апреля 2013].
  6. [infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf Procedure Call Standard for the ARM 64-bit Architecture]. ARM Holdings (25 November 2011). Проверено 24 апреля 2012. [www.webcitation.org/6GDOosNTA Архивировано из первоисточника 28 апреля 2013].

Ссылки

  • [www.club155.ru/x86internalreg-system Внутренние регистры: Системные регистры]

Отрывок, характеризующий Регистр процессора

Люди русского войска были так измучены этим непрерывным движением по сорок верст в сутки, что не могли двигаться быстрее.
Чтобы понять степень истощения русской армии, надо только ясно понять значение того факта, что, потеряв ранеными и убитыми во все время движения от Тарутина не более пяти тысяч человек, не потеряв сотни людей пленными, армия русская, вышедшая из Тарутина в числе ста тысяч, пришла к Красному в числе пятидесяти тысяч.
Быстрое движение русских за французами действовало на русскую армию точно так же разрушительно, как и бегство французов. Разница была только в том, что русская армия двигалась произвольно, без угрозы погибели, которая висела над французской армией, и в том, что отсталые больные у французов оставались в руках врага, отсталые русские оставались у себя дома. Главная причина уменьшения армии Наполеона была быстрота движения, и несомненным доказательством тому служит соответственное уменьшение русских войск.
Вся деятельность Кутузова, как это было под Тарутиным и под Вязьмой, была направлена только к тому, чтобы, – насколько то было в его власти, – не останавливать этого гибельного для французов движения (как хотели в Петербурге и в армии русские генералы), а содействовать ему и облегчить движение своих войск.
Но, кроме того, со времени выказавшихся в войсках утомления и огромной убыли, происходивших от быстроты движения, еще другая причина представлялась Кутузову для замедления движения войск и для выжидания. Цель русских войск была – следование за французами. Путь французов был неизвестен, и потому, чем ближе следовали наши войска по пятам французов, тем больше они проходили расстояния. Только следуя в некотором расстоянии, можно было по кратчайшему пути перерезывать зигзаги, которые делали французы. Все искусные маневры, которые предлагали генералы, выражались в передвижениях войск, в увеличении переходов, а единственно разумная цель состояла в том, чтобы уменьшить эти переходы. И к этой цели во всю кампанию, от Москвы до Вильны, была направлена деятельность Кутузова – не случайно, не временно, но так последовательно, что он ни разу не изменил ей.
Кутузов знал не умом или наукой, а всем русским существом своим знал и чувствовал то, что чувствовал каждый русский солдат, что французы побеждены, что враги бегут и надо выпроводить их; но вместе с тем он чувствовал, заодно с солдатами, всю тяжесть этого, неслыханного по быстроте и времени года, похода.
Но генералам, в особенности не русским, желавшим отличиться, удивить кого то, забрать в плен для чего то какого нибудь герцога или короля, – генералам этим казалось теперь, когда всякое сражение было и гадко и бессмысленно, им казалось, что теперь то самое время давать сражения и побеждать кого то. Кутузов только пожимал плечами, когда ему один за другим представляли проекты маневров с теми дурно обутыми, без полушубков, полуголодными солдатами, которые в один месяц, без сражений, растаяли до половины и с которыми, при наилучших условиях продолжающегося бегства, надо было пройти до границы пространство больше того, которое было пройдено.
В особенности это стремление отличиться и маневрировать, опрокидывать и отрезывать проявлялось тогда, когда русские войска наталкивались на войска французов.
Так это случилось под Красным, где думали найти одну из трех колонн французов и наткнулись на самого Наполеона с шестнадцатью тысячами. Несмотря на все средства, употребленные Кутузовым, для того чтобы избавиться от этого пагубного столкновения и чтобы сберечь свои войска, три дня у Красного продолжалось добивание разбитых сборищ французов измученными людьми русской армии.
Толь написал диспозицию: die erste Colonne marschiert [первая колонна направится туда то] и т. д. И, как всегда, сделалось все не по диспозиции. Принц Евгений Виртембергский расстреливал с горы мимо бегущие толпы французов и требовал подкрепления, которое не приходило. Французы, по ночам обегая русских, рассыпались, прятались в леса и пробирались, кто как мог, дальше.
Милорадович, который говорил, что он знать ничего не хочет о хозяйственных делах отряда, которого никогда нельзя было найти, когда его было нужно, «chevalier sans peur et sans reproche» [«рыцарь без страха и упрека»], как он сам называл себя, и охотник до разговоров с французами, посылал парламентеров, требуя сдачи, и терял время и делал не то, что ему приказывали.
– Дарю вам, ребята, эту колонну, – говорил он, подъезжая к войскам и указывая кавалеристам на французов. И кавалеристы на худых, ободранных, еле двигающихся лошадях, подгоняя их шпорами и саблями, рысцой, после сильных напряжений, подъезжали к подаренной колонне, то есть к толпе обмороженных, закоченевших и голодных французов; и подаренная колонна кидала оружие и сдавалась, чего ей уже давно хотелось.
Под Красным взяли двадцать шесть тысяч пленных, сотни пушек, какую то палку, которую называли маршальским жезлом, и спорили о том, кто там отличился, и были этим довольны, но очень сожалели о том, что не взяли Наполеона или хоть какого нибудь героя, маршала, и упрекали в этом друг друга и в особенности Кутузова.
Люди эти, увлекаемые своими страстями, были слепыми исполнителями только самого печального закона необходимости; но они считали себя героями и воображали, что то, что они делали, было самое достойное и благородное дело. Они обвиняли Кутузова и говорили, что он с самого начала кампании мешал им победить Наполеона, что он думает только об удовлетворении своих страстей и не хотел выходить из Полотняных Заводов, потому что ему там было покойно; что он под Красным остановил движенье только потому, что, узнав о присутствии Наполеона, он совершенно потерялся; что можно предполагать, что он находится в заговоре с Наполеоном, что он подкуплен им, [Записки Вильсона. (Примеч. Л.Н. Толстого.) ] и т. д., и т. д.
Мало того, что современники, увлекаемые страстями, говорили так, – потомство и история признали Наполеона grand, a Кутузова: иностранцы – хитрым, развратным, слабым придворным стариком; русские – чем то неопределенным – какой то куклой, полезной только по своему русскому имени…


В 12 м и 13 м годах Кутузова прямо обвиняли за ошибки. Государь был недоволен им. И в истории, написанной недавно по высочайшему повелению, сказано, что Кутузов был хитрый придворный лжец, боявшийся имени Наполеона и своими ошибками под Красным и под Березиной лишивший русские войска славы – полной победы над французами. [История 1812 года Богдановича: характеристика Кутузова и рассуждение о неудовлетворительности результатов Красненских сражений. (Примеч. Л.Н. Толстого.) ]
Такова судьба не великих людей, не grand homme, которых не признает русский ум, а судьба тех редких, всегда одиноких людей, которые, постигая волю провидения, подчиняют ей свою личную волю. Ненависть и презрение толпы наказывают этих людей за прозрение высших законов.
Для русских историков – странно и страшно сказать – Наполеон – это ничтожнейшее орудие истории – никогда и нигде, даже в изгнании, не выказавший человеческого достоинства, – Наполеон есть предмет восхищения и восторга; он grand. Кутузов же, тот человек, который от начала и до конца своей деятельности в 1812 году, от Бородина и до Вильны, ни разу ни одним действием, ни словом не изменяя себе, являет необычайный s истории пример самоотвержения и сознания в настоящем будущего значения события, – Кутузов представляется им чем то неопределенным и жалким, и, говоря о Кутузове и 12 м годе, им всегда как будто немножко стыдно.
А между тем трудно себе представить историческое лицо, деятельность которого так неизменно постоянно была бы направлена к одной и той же цели. Трудно вообразить себе цель, более достойную и более совпадающую с волею всего народа. Еще труднее найти другой пример в истории, где бы цель, которую поставило себе историческое лицо, была бы так совершенно достигнута, как та цель, к достижению которой была направлена вся деятельность Кутузова в 1812 году.
Кутузов никогда не говорил о сорока веках, которые смотрят с пирамид, о жертвах, которые он приносит отечеству, о том, что он намерен совершить или совершил: он вообще ничего не говорил о себе, не играл никакой роли, казался всегда самым простым и обыкновенным человеком и говорил самые простые и обыкновенные вещи. Он писал письма своим дочерям и m me Stael, читал романы, любил общество красивых женщин, шутил с генералами, офицерами и солдатами и никогда не противоречил тем людям, которые хотели ему что нибудь доказывать. Когда граф Растопчин на Яузском мосту подскакал к Кутузову с личными упреками о том, кто виноват в погибели Москвы, и сказал: «Как же вы обещали не оставлять Москвы, не дав сраженья?» – Кутузов отвечал: «Я и не оставлю Москвы без сражения», несмотря на то, что Москва была уже оставлена. Когда приехавший к нему от государя Аракчеев сказал, что надо бы Ермолова назначить начальником артиллерии, Кутузов отвечал: «Да, я и сам только что говорил это», – хотя он за минуту говорил совсем другое. Какое дело было ему, одному понимавшему тогда весь громадный смысл события, среди бестолковой толпы, окружавшей его, какое ему дело было до того, к себе или к нему отнесет граф Растопчин бедствие столицы? Еще менее могло занимать его то, кого назначат начальником артиллерии.
Не только в этих случаях, но беспрестанно этот старый человек дошедший опытом жизни до убеждения в том, что мысли и слова, служащие им выражением, не суть двигатели людей, говорил слова совершенно бессмысленные – первые, которые ему приходили в голову.
Но этот самый человек, так пренебрегавший своими словами, ни разу во всю свою деятельность не сказал ни одного слова, которое было бы не согласно с той единственной целью, к достижению которой он шел во время всей войны. Очевидно, невольно, с тяжелой уверенностью, что не поймут его, он неоднократно в самых разнообразных обстоятельствах высказывал свою мысль. Начиная от Бородинского сражения, с которого начался его разлад с окружающими, он один говорил, что Бородинское сражение есть победа, и повторял это и изустно, и в рапортах, и донесениях до самой своей смерти. Он один сказал, что потеря Москвы не есть потеря России. Он в ответ Лористону на предложение о мире отвечал, что мира не может быть, потому что такова воля народа; он один во время отступления французов говорил, что все наши маневры не нужны, что все сделается само собой лучше, чем мы того желаем, что неприятелю надо дать золотой мост, что ни Тарутинское, ни Вяземское, ни Красненское сражения не нужны, что с чем нибудь надо прийти на границу, что за десять французов он не отдаст одного русского.
И он один, этот придворный человек, как нам изображают его, человек, который лжет Аракчееву с целью угодить государю, – он один, этот придворный человек, в Вильне, тем заслуживая немилость государя, говорит, что дальнейшая война за границей вредна и бесполезна.
Но одни слова не доказали бы, что он тогда понимал значение события. Действия его – все без малейшего отступления, все были направлены к одной и той же цели, выражающейся в трех действиях: 1) напрячь все свои силы для столкновения с французами, 2) победить их и 3) изгнать из России, облегчая, насколько возможно, бедствия народа и войска.
Он, тот медлитель Кутузов, которого девиз есть терпение и время, враг решительных действий, он дает Бородинское сражение, облекая приготовления к нему в беспримерную торжественность. Он, тот Кутузов, который в Аустерлицком сражении, прежде начала его, говорит, что оно будет проиграно, в Бородине, несмотря на уверения генералов о том, что сражение проиграно, несмотря на неслыханный в истории пример того, что после выигранного сражения войско должно отступать, он один, в противность всем, до самой смерти утверждает, что Бородинское сражение – победа. Он один во все время отступления настаивает на том, чтобы не давать сражений, которые теперь бесполезны, не начинать новой войны и не переходить границ России.