Регистры микропроцессоров, их виды и назначение

Пример HTML-страницы

Регистры микропроцессоров 1Общие сведения.

При составлении программ в первую очередь необходимо

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

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

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

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

• регистры блока

FPU

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

• регистры блока

SSE

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

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

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

(MTRR

–регистры).

О неоднородности регистров.

Регистровая область памяти микропроцессора (

RSEG

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

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

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

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

PUSH

и

POP

) адресации;

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

Функциональная неоднородность области

RSEG

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

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

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

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

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

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

Регистры данных.

Среди регистров данных важное место занимает аккуму­лятор А (

Accumulator

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

R

0,

R

1, …., используемые как сверхскоростные регистровые ОЗУ.

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

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

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

Адресные регистры.

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

программный счетчик (

Program

Counter

PC

), или указатель инструкций–команд (

Instruction

Pointer

IP

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

PC

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

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

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

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

указатель стека (

Stack

Pointer

SP),

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

Last

In

First

Out

LIFO),

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

Указатель стека

SP

всегда показывает на последнюю заполненную ячейку, называемую вершиной стека (

Top

of

Stack

TOS).

Поэтому при операции за­писи (

PUSH

) в стек элемента данных сначала содержимое указателя

SP

уменьшается на 1 или 2 в зависимости от длины элемента (байт, два байта), формируя адрес ячейки, в которую затем помещается элемент. При операции считывания (

POP

или

PULL

) сначала элемент данных извлекается из стека, после чего содержимое указателя

SP

увеличивается на 1 или 2.

Принцип взаимодействия указателя

SP

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

При операциях со стеком значение указателя

SP

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

Frame

Pointer

FP

) — специально зарезерви­рованный адресный регистр. Регистр

FP

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

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

• регистры косвенного адреса (

Data

Pointer

DP

), содержащие непосред­ственно адрес операнда;

• регистры базы (

Base

Pointer

BP

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

индексные регистры I или X (

Index

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

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

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

Специальные регистры.

К специальным регистрам следует отнести регистр флагов (

Flag

), или регистр слова состояния программы (

Program

Status

Word

PSW),

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

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

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

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

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

Ниже приведены обозначение, название и назначение флагов признаков состояния, а также показан принцип формирования некоторых флагов из отдельных бит

n

–разрядных операндов вида

Dn

–1

Dn

–2

D

1

D

0

, которые могут быть как исходным операндом, так и результатом выполненной операции:

CF (Carry Fl

ag)

флаг

переноса

.

При арифметических операциях

CF =

Dn

— бит результата, полученный как перенос из старшего (

n

– 1) –го разряда АЛУ. При циклическом сдвиге влево

CF

=

Dn–1

и вправо

CF =

D0,

где

Dn–1, D0

— выдвинутое значение старшего, младшего разряда исходного операнда;

PF (Parity

Fl

ag)

флаг четности результата: ¯

PF =

n

-1

k=0

Dk,

где

— логическая операция исключающее ИЛИ. Значение

PF

=

1 фиксирует четное количество нулей в младшем байте;

AF

(Auxiliary Carry Flag)

флаг дополнительного переноса или переноса из младшей тетрады:

AF

=

D

4

;

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, если в предыду­щей команде выполнялось вычитание (использовался в процессоре

Z

80).

Регистры общего назначения.

В процессорах имеются регистры, функции которых не специализированы. Такие регистры получили название регистров об­щего назначения

POH

(

General

Purpose

Register

GPR

). В процессоре, не име­ющем

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

Point

SP

) и указатель базы (

Base

Point

BP

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

указатель

SP

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

PUSH

и

POP

;

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

указатель базы

BP

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

индексные регистры источника (

Source

Index

SI

) и назначения (

Destination

Index

DI)

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

SI,

а операнда–приемника — в регистре

DI.

Существует и более узкая специализация регистров. В частности, регистр АХ выполняет функции аккумулятора; регистр

DX

может служить расширением акку­мулятора до 32 разрядов.

Сегментные регистры.

Сегментные регистры играют важную роль при адресации операндов в памяти. Дело в том, что объем памяти 16–разрядных процессоров составляет 220 = 1М байт, а адреса имеют дли­ну всего 16 бит и не могут адресовать всю память. Поэтому в памяти выделяются четыре сегмента емкостью 216 = 64К байт: кодовый сегмент (

Code

Segment

CS

), сегмент стека (

Stack

Segment

SS

), сегмент данных (

Data

Segment

) и дополни­тельный сегмент данных (

Extra

Segment

ES).

Для задания начального, или ба­зового, адреса

(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 фирмы

I

ntel

рассмотрен выше.

В процессоре

Z8001

(рис. 2.2.4, б) имеется шестнадцать 16–разрядных

POH

R0…R15,

из которых

R0…R7

можно использовать как шестнадцать восьмиразряд­ных регистров. Составленные из

R0…R15

восемь регистровых пар

RR0 (R0, R1), RR1 (R1, R2)…

,

RR14 (R14, R15)

служат для хранения адресов. Имеется два составных регистра

RR

14, один из которых выполняет функцию указателя систем­ного стека, другой — указателя стека пользователя.

Регистровая структура МП MC68000 (рис. 2.4.4, в

) объединяет шестнадцать 32–разрядных РОН: восемь регистров данных

D

0, ….,

D

7 и восемь адресных ре­гистров А0, …, А7. Регистры

D

0, …,

D

7 позволяют получать формат данных в виде байта, 16–разрядного слова одинарной и двойной длины. При формировании ад­ресов возможно сложение содержимого адресных регистров, кроме того, допус­кается использование адресов длиной в одно и два слова. Имеется два регистра А7, один из которых выполняет функцию указателя системного стека, другой — указателя стека пользователя. Регистровая структура MC68000 может использо­ваться в 32–разрядных процессорах.

Программный счетчик

PC

и регистр флагов

F

(регистр состояния) имеются в регистровых структурах всех рассмотренных процессоров.


Понравилась статья? Поделиться с друзьями:
Все об энергетике, электротехнике и электронике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: