Здавалка
Главная | Обратная связь

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

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

Процессор содержит двенадцать 16-разрядных программно - адресуемых регистров, которые принято объединять в три груп­пы: регистры данных, регистры-указатели и сегментные регис­тры. Кроме того, в состав процессора входят счетчик команд и регистр флагов (рис. 1.2).

В группу регистров данных включаются регистры АХ, ВХ, СХ и DX. Программист может использовать их по своему ус­мотрению для временного хранения любых объектов (данных или адресов) и выполнения над ними требуемых операций. При этом регистры допускают независимое обращение к стар­шим (АН, ВН, СН и DH) и младшим (AL, BL, CL и DL) по­ловинам. Так команда mov BL, AH пересылает старший байт регистра АХ в младший байт регистра ВХ, не затрагивая при этом вторых байтов этих регистров.

Заметьте, что сначала указывается операнд-приемник, а после запятой - операнд-источник. Во многих случаях регистры дан­ных вполне эквивалентны, однако предпочтительнее пользовать­ся регистром АХ, поскольку многие команды занимают в памя­ти меньше места и выполняются быстрее, если их операндом является регистр АХ (или его половины AL или АН). С другой стороны, ряд команд использует определенные регистры неяв­ным образом. Так, все команды циклов используют регистр СХ в качестве счетчика числа повторений; в командах умножения и деления регистры АХ и DX выступают в качестве неявных операндов; операции ввода-вывода можно осуществлять только через регистр АХ (или AL) и т.д.

Индексные регистры SI и DI так же, как и регистры дан­ных, могут использоваться произвольным образом. Однако их основное назначение - хранить индексы (смещения) относитель­но некоторой базы (т.е. начала массива) при выборке операн­дов из памяти. Адрес базы при этом может находиться в базо­вых регистрах ВХ или ВР. Специально предусмотренные команды работы со строками используют регистры SI и DI в качестве неявных указателей в обрабатываемых строках.

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

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

Регистры SI, DI, ВР и SP, в отличие от регистров данных, не допускают побайтовую адресацию.

Четыре сегментных регистра CS, DS, ES и SS являются важнейшим элементом архитектуры процессора, обеспечивая адресацию 20-разрядного адресного пространства с помощью 16-разрядных операндов.


АН AL
       
ВН BL
       
СН CL
       
DH DL
 

Регистры-указатели SI DI ВР SP Сегментные регистры CS DS ES SS Прочие регистры IP FLAGS

Аккумулятор Базовый регистр Счетчик Регистр данных   Индекс источника Индекс приемника Указатель базы Указатель стека   Регистр программного сегмента Регистр сегмента данных Регистр дополнительного сегмента данных Регистр сегмента стека     Указатель команд     Регистр флагов

 

 

Рис.1.1. Регистры процессора.


 

Обращение к памяти (как к стандартной памяти в пределах 640 Кбайт, так и к буферам или ПЗУ в области 640 Кбайт -1 Мбайт) осуществляется исключительно посредством сегментов - логических образований, накладываемых на любые участки физического адресного пространства. Размер сегмента должен находиться в пределах 0 байт - 64 Кбайт (допустимы и иногда используются сегменты нулевой длины). Начальный адрес сег­мента, деленный на 16, т.е. без младшей 16-ричной цифры, заносится в один из сегментных регистров. Как правило, это действие выполняет программист с помощью соответствующих программных строк. При обращении к памяти процессор извле­кает из сегментного регистра сегментный базовый адрес, умно­жает его на 16 сдвигом влево на 4 двоичных разряда и скла­дывает с заданным каким-либо образом относительным адресом (смещением), получая 20-разрядный физический адрес адресуе­мой ячейки памяти (слова или байта). Этот процесс проиллю­стрирован на рис. 1.3 на конкретном примере команды inc meml.

Оперативная память слова

 


           
Программный сегмент     06FF
       
           
     
       
Сегмент данных    
    Ячейка meml
           

 


 

Код команды inc meml

Смещение к ячейке meml

I—— Содержимое DS - 10E2h

10E20h Базовый адрес сегмента (на границе параграфа) lDE22h

lDE24h lDE26h Физический адрес ячейки meml

10Е28П Вычисление физического адреса:

lDE2h * 10h = lDE20h + ООО6h

=1DE26h

 

 

Рис. 1.2. Формирование физического адреса


В примере предполагается, что сегмент данных, адресуемый через регистр DS, имеет базовый адрес lDE20h, а ячейка meml расположена в байтах 6 и 7 этого сегмента (смещение meml относительно начала сегмента равно 6).

Поскольку младшая 16-ричная цифра базового адреса сег­мента должна быть равна 0, сегмент всегда начинается с адре­са, кратного 16, т.е. на границе 16-байтового блока памяти (параграфа). Число, хранящееся в сегментном .регистре, называ­ют сегментным адресом. Следует помнить, что сегментный ад­рес в 16 раз меньше физического; его можно рассматривать, как номер параграфа, с которого начинается данный сегмент.

Регистр CS обеспечивает адресацию к сегменту, в котором находятся программные коды, регистры DS и ES - к сегментам с данными (таким образом, в любой момент времени програм­ма может иметь доступ к 128 Кбайт данных), а регистр SS -к сегменту стека, который на машинах типа IBM PC, в отли­чие от других вычислительных систем, может быть очень большим и достигать 64 Кбайт. Сегментные регистры, естест­венно, не могут выступать в качестве регистров общего назна­чения.

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

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

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 Разряды

        OF DF IF TF SF ZF   AF   PF   CF

Рис. 1.3. Регистр флагов.

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

Флаг паритета PF (Parity Flag) устанавливается в 1, если результат операции содержит четное число двоичных единиц.

Флаг вспомогательного переноса AF (Auxiliary Flag) исполь­зуется в операциях над упакованными двоично-десятичными числами. Он индицирует перенос или заем из старшей тетрады (бита 3).

Флаг нуля ZF (Zero Flag) устанавливается в 1, если резуль­тат операции равен 0.

Флаг знака SF (Sign Flag) показывает знак результата опе­рации, устанавливаясь в 1 при отрицательном результате.

Управляющий флаг трассировки (ловушки) TF (Trace Flag) используется для осуществления пошагового выполнения про­граммы. Если TF«1, то после выполнения каждой команды процессор реализует процедуру прерывания типа 1 (через век­тор, расположенный по адресу 04).

Управляющий флаг разрешения прерываний IF (Interrupt Flag) разрешает (если равен 1) или запрещает (если равен 0) процессору реагировать на прерывания от внешних устройств.

Управляющий флаг направления DF (Direction Flag) исполь­зуется командами обработки строк. Если DF-0, строка обраба­тывается в прямом направлении, от меньших адресов к боль­шим; если DF*1, обработка строки идет в обратном направле­нии.

Флаг переполнения OF (Overflow Flag) фиксирует перепол­нение, т.е. выход результата за пределы допустимого диапазона значений.

Для работы с регистром флагов предусмотрен ряд команд. Установка и сброс флагов CF, DF и IF осуществляется коман­дами STC, STD и STI (установка) и CLC, CLD и CLI (сброс). Все содержимое регистра флагов можно сохранить в стеке ко­мандой PUSHF и извлечь из стека командой POPF; кроме то­го, младший байт регистра флагов (флаги CF, PF, AF, ZF и SF) можно переслать в регистр АН командой LAHF или загру­зить в регистр флагов из АН командой SAHF.

 





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.