Регистры микропроцессоров 1Общие сведения. При составлении программ в первую очередь необходимо

знать, какие из регистров микропроцессора являются программно–доступными регистрами, в которых можно хранить подлежащие обработке данные (операн­ды), адреса и управляющие сигналы (команды). Совокупность программно–до­ступных регистров образуют регистровую модель микропроцессора. Адресация регистровой области процессора и быстрый доступ к ней обеспечивают создание эффективно исполняемых программ.

В регистровой модели современных процессоров обычно выделяют следу­ющие группы регистров:

●     регистры, используемые при выполнении прикладных программ. К ним относят:

 •     основные функциональные регистры (регистры общего назначения; ука­затель команд, или программный счетчик; сегментные регистры; регистр флагов, или слова состояния);

•      регистры блока FPU обработки чисел с плавающей точкой (регистры данных, тегов, состояния, управления, регистры–указатели команды и операнда);

•      регистры блока SSE обработки пакетов чисел с плавающей точкой (регист­ры пакетов данных и регистр управления–состояния);

●     системные регистры (регистры управления режимом, регистры системных адресов, регистры отладки);

●     служебные (модельно–специфические) регистры, которые используются в про­цессе отладки систем, содержат информацию о процессе выполнения про­граммы (число декодированных команд, полученных запросов прерывания, число загрузок в кэш–память и т. п.), обеспечивают различные режимы рабо­ты кэш–памяти при обращении к определенным областям основной памяти (MTRR–регистры).

О неоднородности регистров. Регистровая область памяти микропроцессора (RSEG — регистровый сегмент) представляет собой набор неоднородных по возможности доступа и по выполняемым функциям регистров. Например, в рас­смотренном выше 8–разрядном процессоре:

●     регистр команд является неадресуемым регистром и предназначен только для приема первого байта (кода команды) из памяти;

●     адресуемые регистры В и С могут быть использованы для хранения одного байта данных или 16–разрядного адреса (в паре);

●     указатель стека, представляющий собой 16–разрядный регистр, использует­ся для доступа к стеку путем явной и неявной (с помощью специальных ко­манд PUSH и POP) адресации;

●     программный счетчик, или указатель команд, выполняет строго определен­ные функции и не может быть использован для хранения 16–разрядных опе­рандов.

Функциональная неоднородность области RSEG процессора проявляется в специализации регистров. В зависимости от выполняемых функций можно вы­делить три группы регистров:

●     регистры данных, используемые в операциях АЛУ в качестве источника и приемника операндов;

●     адресные регистры, или указатели, предназначенные для формирования ад­ресов данных и команд;

●     специальные регистры, служащие для индикации текущего состояния про­цессора и управления режимами его работы.

Функциональная специализация затрудняет программирование (из–за необхо­димости учета организации регистров), однако позволяет создать быстро испол­няемую программу с меньшим требуемым объемом памяти для ее хранения.

Регистры обозначаются латинскими буквами, используемыми для символи­ческого кодирования и отражающими назначение регистра.

Регистры данных. Среди регистров данных важное место занимает аккуму­лятор А (Accumulator), который выполняет функции временного хранения исход­ных операндов и результатов операций арифметическо–логических устройств (АЛУ). Интенсивное использование аккумулятора и связанное с ним большинство команд арифметической и логической обработки операндов способствует сниже­нию загруженности шины данных, упрощению адресации, повышению быстро­действия процессора. В системах команд микропроцессора выделяются опера­ции с аккумулятором. Поэтому ссылка на аккумулятор при адресации, как прави­ло, производится неявно с помощью кода операции. Неявная адресация позволя­ет не указывать в командах месторасположение одного из операндов и (или) результата операции, что уменьшает длину их кода. В составе микропроцессора может быть не один, а два аккумулятора (например, в МС6809). К регистрам данных относятся явно адресуемые рабочие регистры R0, R1, ...., используемые как сверхскоростные регистровые ОЗУ.

Рабочие регистры могут использоваться в операциях совместно с аккумулятором. Некоторые из них могут совмещать функцию хранения данных с функцией адресации. Для образования полноразмерного адреса регистры данных объединяются в пары.

В процессорах, предназначенных для работы в реальном времени, могут быть предусмотрены не один, а два или даже четыре (например, в некоторых микро­контроллерах) набора рабочих регистров. Один из регистров резервируется для системных целей или обработки прерываний, а остальные — для прикладных задач пользователя. В каждый момент времени доступен только один набор ра­бочих регистров, выбираемый специальным указателем.

К регистрам данных также относятся рассматриваемые ниже регистры общего назначения, которые совмещают функции хранения данных и адресов.

Адресные регистры. Среди регистров, на которые возложена функция адре­сации, следует выделить:

    программный счетчик (Program CounterPC), или указатель инструкций–команд (Instruction PointerIP), хранящий адрес следующей команды выпол­няемой программы. Его разрядность обычно соответствует числу линий ад­ресной шины. При выполнении программы с последовательно возрастающи­ми адресами команд содержимое PC увеличивается на 1 или 2 для указания следующего байта или слова. Увеличение содержимого счетчика происходит автоматически сразу после начала выполнения команды. Изменение после­довательной выборки команд из ячеек памяти осуществляется путем загруз­ки программного счетчика адресом требуемой ячейки. Такая ситуация возни­кает, например:

•      при выполнении команд условных и безусловных переходов;

•      при инициализации микропроцессора путем сброса;

•      при обслуживании запросов на прерывание;

●     указатель стека (Stack PointerSP), используемый для обращений к систем­ному стеку. Стек представляет собой область памяти, предназначенную для хранения адресов возврата и состояний процессора (содержимого регист­ров) при вызове подпрограмм и обслуживании прерываний. Доступ к стеку организован по принципу «последним пришел — первым ушел» (LastIn FirstOutLIFO), т. е. в него можно только последовательно добавлять (втал­кивать) или извлекать (выталкивать) элементы данных. Типовой стек, приме­няемый в большинстве процессоров, заполняется в сторону уменьшения ад­ресов.

Указатель стека SP всегда показывает на последнюю заполненную ячейку, называемую вершиной стека (Top of  Stack TOS). Поэтому при операции за­писи (PUSH) в стек элемента данных сначала содержимое указателя SP уменьшается на 1 или 2 в зависимости от длины элемента (байт, два байта), формируя адрес ячейки, в которую затем помещается элемент. При операции считывания (POP или PULL) сначала элемент данных извлекается из стека, после чего содержимое указателя SP увеличивается на 1 или 2.

Принцип взаимодействия указателя SP со стеком проиллюстрирован на примере записи в стек и считывания из него четырех однобайтных элементов (рис. 2.4.1, а).

рис. 2.4.1

При операциях со стеком значение указателя SP непрерывно меняется, поэтому применять его в качестве точки отсчета при доступе к хранящимся в стеке данным вызывает определенные трудности. Поэтому в ряде случаев, например, при хранении в стеке локальных переменных или при обмене па­раметрами между вызываемой и вызывающей процедурой (подпрограммой), используется указатель кадра (Frame PointerFP) — специально зарезерви­рованный адресный регистр. Регистр FP, указывающий на начало области па­раметров в стеке (рис. 2.4.1, б), принадлежит к классу базовых регистров. В 16–разрядных процессорах указателем кадра служит индексный регистр ВХ;

    регистры, предназначенные для хранения адресов обращения к основной па­мяти. Такие регистры, называемые указательными или индексными, позволя­ют сократить размер кода (программы). К ним следует отнести:

•      регистры косвенного адреса (Data PointerDP), содержащие непосред­ственно адрес операнда;

•      регистры базы (Base PointerBP), хранящие начальные (базовые) адреса массивов и записей;

•      индексные регистры I или X (Index), содержимое которых является относи­тельным (смещенным) адресом операнда;

•   регистры автоинкрементной и автодекрементной адресации, автоматиче­ски увеличивающие или уменьшающие свое содержимое после выполне­ния операции;

•      регистры расширения адресного пространства (до 1М байт).

Специальные регистры. К специальным регистрам следует отнести регистр флагов (Flag), или регистр слова состояния программы (Program Status WordPSW), а также ряд регистров, используемых в сопроцессорах и микроконтроллерах.

На регистр флагов возлагается функция хранения признаков. С каждым при­знаком связывается одноразрядная переменная (бит), называемая флагом (флажком). Регистр флагов содержит:

●     биты признаков состояния процессора. Обычно эти признаки формируются в АЛУ после выполнения операции и характеризуют ее результат;

●     биты управления и системных признаков, которые устанавливаются операци­онной системой (некоторые пользователем) и задают режим процессора при организации ввода–вывода данных, обслуживании прерываний и исключений, решении последовательности вызываемых задач и реализации ряда других процедур.

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

Ниже приведены обозначение, название и назначение флагов признаков состояния, а также показан принцип формирования некоторых флагов из отдельных бит n–разрядных операндов вида Dn–1Dn–2...D1D0, которые могут быть как исходным операндом, так и результатом выполненной операции:

●     CF (Carry Flag) флаг переноса. При арифметических операциях CF = Dn — бит результата, полученный как перенос из старшего (n – 1) –го разряда АЛУ. При циклическом сдвиге влево CF = Dn–1 и вправо CF = D0, где Dn–1, D0 — выдвинутое значение старшего, младшего разряда исходного операнда;

●     PF (Parity Flag) флаг четности результата: ¯PF = n-1 k=0 Dk, где — логическая операция исключающее ИЛИ. Значение PF = 1 фиксирует четное количество нулей в младшем байте;

●     AF (Auxiliary Carry Flag) флаг дополнительного переноса или переноса из младшей тетрады: AF = D4;

●     ZF (Zero Flag) флаг признака нуля: ¯ZF = V n-1 k=0 Dk,  где V — операция логического сложения; Dk — биты результата операции (ZF = 0 — ненулевой результат, ZF = 1 — нулевой результат);

●     SF (Sign Flag) флаг знака результата: SF = Dn–1, при целочисленной арифме­тике со знаком (SF = 0 — знак плюс, SF = 1 — минус);

●     OF (Overflow Flag) флаг арифметического переполнения. При выполне­нии арифметики в дополнительном коде OF = Dn Dn–1, где Dn, Dn–1 — биты переноса и старший бит результата. Флаг OF = 1 фиксирует разные значения Dn  и  Dn–1.

Назначение и функции некоторых флагов системных признаков:

●     DF (Direction Flag) флаг направления (бит управления): DF = 0/1 вызывает автоматический инкремент/декремент содержимого индексных регистров SI, DI после выполнения команды обработки символа. Значение DF устанавлива­ется пользователем и задает порядок обработки строк символов (от младших адресов к старшим или в обратном направлении) при выполнении соответствующих команд;

●     IF (Interrupt Enable Flag) — флаг прерывания. При IF = 1 разрешает обслужи­вание прерывания по внешнему входу INTR;

●     TF (Trap Flag) — флаг трассировки. При IF = 1 разрешает пошаговое исполне­ние команд; используется при отладке программ;

●     NF (Add/Subtract Flag) — флаг сложения/вычитания: NF = 1, если в предыду­щей команде выполнялось вычитание (использовался в процессоре Z80).

Регистры общего назначения. В процессорах имеются регистры, функции которых не специализированы. Такие регистры получили название регистров об­щего назначения POH (General Purpose RegisterGPR). В процессоре, не име­ющем POH, каждая команда должна считывать свои операнды из памяти и воз­вращать результат также в память. На обращение к памяти расходуется время, которое можно уменьшить, если временно хранить часто используемые, операнды и результаты в быстродоступном месте, каким является POH.

Регистры общего назначения обладают гибкими, взаимозаменяемыми (во многих командах) функциями. Применение РОИ дает возможность создавать ре­гулярную систему команд, большинство из которых используют любой регистр многими способами. Поэтому в процессорах POH находят широкое применение.

Рассмотрим регистры общего назначения 16–разрядных процессоров. Они представляют интерес, поскольку составляют основу POH архитектуры 32–раз­рядных процессоров (IA–32) и используются до настоящего времени в реальном режиме. К обозначению имен 32–разрядных POH добавилась приставка E (Extended – расширенный).

Память RSEG 16–битных процессоров 8086 содержит восемь регистров обще­го назначения АХ, BХ, СХ, DX, BP, SP DI, SI, входящих в его регистровую модель (см. рис. 2.4.4, а). Допускается несколько применений регистров, причем их мож­но адресовать произвольно. Типичные команды могут привлекать любой регистр и ячейку памяти в качестве источника или (и) приемника. Большинство команд допускают нахождение обоих операндов в регистрах общего назначения. Следова­тельно, в команде можно указывать любую пару 16– или 8–битных регистров.

Регистры АХ, DХ, СХ и ВХ обычно используются для хранения данных и допус­кают отдельные обращения к их 8–битным половинам, каждой из которых дано свое название: младшие (Low) половины называются AL, BL, CL и DL, а старшие (High) — АН, ВН, СН и DH. Разделение POH на две половины позволяет одинаково легко оперировать байтами и словами. Обычно один РОH (а иногда и два) уча­ствует в пересылках данных и в вычислениях. В некоторых командах функции от­дельных регистров специализированы, например:

●     регистры АХ (Accumulator — аккумулятор), ВХ (Base — база) и DX (Data — данные) наделены специальными функциями, вытекающими из их названия;

●     регистр СХ (Counter — счетчик) может хранить в цепочечных командах число элементов цепочки (для этого нельзя использовать регистры АХ, ВХ и DX). Пять регистров общего назначения (ВХ, SI, DI, BP, SP) могут хранить адреса и данные и привлекаются для вычисления адреса:

●     регистр базы (ВХ), указатель стека (Stack PointSP) и указатель базы (Base PointBP) почти всегда используются как адресные регистры для хранения смещений. Смещение показывает расстояние от начала (базы) сегмента до операнда;

●     указатель SP адресует вершину стека в памяти и автоматически использует­ся в стековых командах PUSH и POP;

●     регистр ВХ обычно применяется для хранения смещения в структуре данных, а не в текущем стеке. Без специального указания смещение в регистре ВХ относится к сегменту данных;

●     указатель базы BP также часто используется для хранения смещения в теку­щем сегменте стека;

●     индексные регистры источника (Source IndexSI) и назначения (Destination IndexDI) наиболее часто используются для доступа к данным в текущем сегменте данных. Предполагается, что смещение операнда–источника содер­жится в регистре SI, а операнда–приемника — в регистре DI. Существует и более узкая специализация регистров. В частности, регистр АХ выполняет функции аккумулятора; регистр DX может служить расширением акку­мулятора до 32 разрядов.

Сегментные регистры. Сегментные регистры играют важную роль при адресации операндов в памяти. Дело в том, что объем памяти 16–разрядных процессоров составляет 220 = 1М байт, а адреса имеют дли­ну всего 16 бит и не могут адресовать всю память. Поэтому в памяти выделяются четыре сегмента емкостью 216 = 64К байт: кодовый сегмент (Code SegmentCS), сегмент стека (Stack SegmentSS), сегмент данных (Data Segment) и дополни­тельный сегмент данных (Extra SegmentES). Для задания начального, или ба­зового, адреса (base20) каждого из указанных сегментов в процессоре предус­мотрены четыре 16–битных сегментных регистра с именами CS, DS, SS и ES. Базовый адрес текущего сегмента однозначно определяются содержимым сег­ментного регистра:

base20 = 16 x sel,

где sel — селектор, или значение (содержимое) сегментного регистра.

рис. 2.4.2

Адресация памяти реализуется следующим образом (рис. 2.4.2): команда за­дает смещение (offset) в сегменте, а сегментные регистры определяют требу­емый сегмент. Выбор сегмента зависит от того, как команда использует смеще­ние. Смещение может определять:

●     следующую команду. Поскольку выборки всех команд осуществляются из те­кущего сегмента кода CS, в качестве регистра, содержащего смещение для следующей выполняемой команды, используется программный счетчик, или указатель команды;

●     операнд для выполнения текущей команды. Сегмент, из которого считывается  операнд, может быть задан в префиксе команды, указательном регистре или дополнительном регистре ES.

Сегментация памяти и сегментные регистры играют важную роль в архи­тектуре процессора:

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

●     придают коду и данным переместимость. Так как базовый адрес сегмента служит дополнительным компонентом механизма адресации программиста, любой сегмент можно перемещать в физической памяти, а затем правильно адресовать его, корректируя при этом только значение базы сегмента. Сегмен­ты можно передавать как параметры, используя одно значение селектора;

●     реализуют управление виртуальным адресным пространством, защиту памя­ти, многозадачность и другие функции.

Регистровые структуры микропроцессоров. Рассмотрим наборы программ­но доступных регистров некоторых 8– и 16–разрядных процессоров, составля­ющих их регистровые модели.

рис. 2.4.3

8–разрядные процессоры. На рис. 2.4.3, а приведен набор программно доступных регистров микропроцессора 8080 фирмы Intel, содержащий аккумуля­тор А, регистр флагов F и регистры общего назначения B–L.

Регистровые пары А и F (PSW), В и С (В), D и Е (D) Н и L (Н) могут быть исполь­зованы как 16–разрядные регистры для косвенной адресации. В них хранится ад­рес ячейки памяти. Наиболее часто используется регистровая пара Н.

Микропроцессор Z80 фирмы Zilog имеет два блока регистров A–L (рис. 2.4.3, б), переключение которых осуществляется командой ЕХХ. Второй блок целесообраз­но использовать при вызове подпрограммы или при обработке запросов пре­рываний внешних устройств, так как в этом случае не потребуется стек.

В набор регистров входят также регистр вектора прерывания I (для хранения старшего байта адреса в режиме прерывания), регистр регенерации памяти R динамических ОЗУ и 16–разрядные индексные регистры IX, IY.

В микропроцессоре МС6800 отсутствуют POH (рис. 2.4.3, в), однако имеется два аккумулятора А и В. Кроме них в процессоре содержится 16–разрядный ре­гистр X для хранения адресов.

Указатель стека SP и программный счетчик PC имеется в регистровых структу­рах всех рассмотренных процессоров.

Как видно из рис. 2.4.3, б регистровая структура процессора Z80 сложнее, чем 8080, хотя оба процессора имеют одинаковую архитектуру.

рис. 2.4.4

16–разрядные микропроцессоры. Приведенный на рис. 2.4.4, а набор программно доступных регистров микропроцессора 8086 фирмы Intel рассмотрен выше.

В процессоре Z8001 (рис. 2.2.4, б) имеется шестнадцать 16–разрядных POH R0...R15, из которых R0...R7 можно использовать как шестнадцать восьмиразряд­ных регистров. Составленные из R0...R15 восемь регистровых пар RR0 (R0, R1),  RR1 (R1, R2)..., RR14 (R14, R15) служат для хранения адресов. Имеется два составных регистра RR14, один из которых выполняет функцию указателя систем­ного стека, другой — указателя стека пользователя.

Регистровая структура МП MC68000 (рис. 2.4.4, в) объединяет шестнадцать 32–разрядных РОН: восемь регистров данных D0, ...., D7 и восемь адресных ре­гистров А0, ..., А7. Регистры D0, ...,  D7 позволяют получать формат данных в виде байта, 16–разрядного слова одинарной и двойной длины. При формировании ад­ресов возможно сложение содержимого адресных регистров, кроме того, допус­кается использование адресов длиной в одно и два слова. Имеется два регистра А7, один из которых выполняет функцию указателя системного стека, другой — указателя стека пользователя. Регистровая структура MC68000 может использо­ваться в 32–разрядных процессорах.

 

Программный счетчик PC и регистр флагов F (регистр состояния) имеются в регистровых структурах всех рассмотренных процессоров.


Рекомендуйте эту статью другим!