На современном компьютерном рынке наблюдается большое разнообразие
различных типов компьютеров. Поэтому возможно предположить возникновение
у потребителя вопроса — как оценить возможности конкретного типа (или модели)
компьютера и его отличительные особенности от компьютеров
других типов (моделей). Рассмотрения для этого одной лишь только структурной схемы компьютера
недостаточно, так как она принципиально
мало чем различается у разных машин: у всех компьютеров есть
оперативная память, процессор, внешние устройства.
Различными
являются способы, средства и используемые ресурсы, с помощью
которых компьютер функционирует как единый механизм. Чтобы
собрать воедино все понятия, характеризующие компьютер с точки
зрения его функциональных программно-управляемых свойств,
существует специальный термин — архитектура ЭВМ.
Впервые понятие архитектура ЭВМ стало упоминаться с появлением машин 3-го поколения
для их сравнительной оценки.
К изучению языка ассемблера любого компьютера имеет смысл приступать
только после выяснения того, какая часть компьютера оставлена
видимой и доступной для программирования на этом языке. Это
так называемая программная модель компьютера,
частью которой является программная модель микропроцессора, которая
содержит 32 регистра в
той или иной мере доступных для использования программистом.
Данные регистры можно разделить на две большие группы:
Рис. 1. Пользовательские регистры микропроцессоров i486 и Pentium
Почему многие из этих регистров приведены с наклонной
разделительной чертой?
Нет, это не разные регистры — это
части одного большого 32-разрядного регистра. Их можно
использовать в программе как отдельные объекты.
Так сделано для обеспечения работоспособности программ,
написанных для младших 16-разрядных моделей микропроцессоров
фирмы Intel, начиная с i8086.
Микропроцессоры i486 и Pentium
имеют в основном 32-разрядные регистры. Их количество, за
исключением сегментных регистров, такое же, как и у i8086, но
размерность больше, что и отражено в их обозначениях — они
имеют
приставку e (Extended).
Разберемся подробнее с составом и назначением
пользовательских регистров.
Регистры общего назначения
Все регистры этой группы позволяют обращаться к своим
“младшим” частям (см. рис. 1).
Рассматривая этот рисунок,
заметьте, что использовать для самостоятельной адресации можно
только младшие 16 и 8-битные части этих регистров. Старшие 16
бит этих регистров как самостоятельные объекты недоступны. Это
сделано, как мы отметили выше, для совместимости с младшими 16-разрядными моделями микропроцессоров фирмы Intel.
Перечислим регистры, относящиеся к группе регистров общего назначения. Так как эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), то их еще называют регистрами АЛУ:
Для того чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и предназначены сегментные регистры. Фактически, с небольшой поправкой, как мы увидим далее, в этих регистрах содержатся адреса памяти с которых начинаются соответствующие сегменты. Логика обработки машинной команды построена так, что при выборке команды, доступе к данным программы или к стеку неявно используются адреса во вполне определенных сегментных регистрах. Микропроцессор поддерживает следующие типы сегментов:
eflags/flags (flag register) — регистр флагов. Разрядность
eflags/flags — 32/16 бит. Отдельные биты данного регистра
имеют определенное функциональное назначение и называются
флагами. Младшая часть этого регистра полностью аналогична
регистру flags для i8086. На рис. 2 показано содержимое
регистра eflags.
Рис. 2. Содержимое регистра eflags
Исходя из особенностей использования, флаги регистра
eflags/flags можно разделить на три группы:
eip/ip (Instraction Pointer register) — регистр-указатель команд.
Само название этих регистров говорит о том, что они
выполняют специфические функции в системе. Использование системных
регистров жестко регламентировано. Именно они обеспечивают
работу защищенного режима. Их также можно рассматривать как
часть архитектуры микропроцессора, которая намеренно оставлена
видимой для того, чтобы квалифицированный системный
программист мог выполнить самые низкоуровневые операции.
Системные регистры можно разделить на три группы:
Эти регистры предназначены для общего управления
системой.
Хотя микропроцессор имеет четыре
регистра управления, доступными являются только три из них —
исключается cr1, функции которого пока не определены (он
зарезервирован для будущего использования).
Регистр cr0 содержит системные флаги, управляющие режимами
работы микропроцессора и отражающие его состояние глобально,
независимо от конкретных выполняющихся задач.
Регистр cr2 используется при страничной организации
оперативной памяти для регистрации ситуации, когда текущая
команда обратилась по адресу, содержащемуся в странице памяти,
отсутствующей в данный момент времени в памяти.
Регистр cr3 также используется при страничной организации
памяти.
При работе в защищенном режиме микропроцессора адресное пространство
делится на:
Регистры dr0, dr1, dr2, dr3 имеют разрядность 32 бит и
предназначены для задания линейных адресов четырех точек
прерывания. Используемый при этом механизм следующий: любой
формируемый текущей программой адрес сравнивается с адресами в
регистрах dr0...dr3, и при совпадении генерируется исключение
отладки с номером 1.
Регистр dr6 называется регистром состояния отладки. Биты
этого регистра устанавливаются в соответствии с причинами,
которые вызвали возникновение последнего исключения с номером 1.
Перечислим эти биты и их назначение:
Регистр dr7 называется регистром управления отладкой. В нем
для каждого из четырех регистров контрольных точек отладки
имеются поля, с помощью которых можно уточнить следующие
условия, при которых следует сгенерировать прерывание:
Большинство из системных регистров программно доступны. Не
все из них понадобятся в нашем дальнейшем изложении, но, тем не
менее, я коротко рассмотрел их с тем, чтобы возбудить у
читателя интерес к дальнейшему исследованию архитектуры
микропроцессора.
Флаги состояния регистра eflags
отражают особенности результата исполнения арифметических или
логических операций. Это дает возможность анализировать
состояние вычислительного процесса и реагировать на него с
помощью команд условных переходов и вызовов подпрограмм. В
табл. 1 приведены флаги состояния и указано их назначение;
Он находится в 10-м бите регистра eflags и используется
цепочечными командами. Значение флага df определяет
направление поэлементной обработки в этих операциях: от начала
строки к концу (df = 0) либо наоборот, от конца строки к ее
началу (df = 1).
Для работы с флагом df существуют специальные
команды: cld (снять флаг df) и std (установить флаг df).
Применение этих команд позволяет привести флаг df в
соответствие с алгоритмом и обеспечить автоматическое
увеличение или уменьшение счетчиков при выполнении операций со
строками;
Прикладным программам не
рекомендуется модифицировать без необходимости эти флаги, так
как в большинстве случаев это приведет к прерыванию работы
программы. В табл. 2 перечислены системные флаги, их
назначение.
Таблица 1. Флаги состояния
Мнемоника флага Флаг Номер бита в eflags Содержание и назначение cf Флаг переноса
(Carry Flag)0
1 — арифметическая операция произвела перенос из старшего бита результата. Старшим
является 7, 15 или 31-й бит в зависимости от размерности операнда;
0 — переноса не былоpf Флаг паритета
(Parity Flag)2
1 — 8 младших разрядов (этот флаг — только для 8 младших разрядов операнда любого
размера) результата содержат четное число единиц;
0 — 8 младших разрядов результата содержат нечетное число единицaf Вспомогательный флаг переноса
(Auxiliary carry Flag)4
Только для команд работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата:
1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд
или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;
0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не былоzf Флаг нуля (Zero Flag) 6
1 — результат нулевой;
0 — результат ненулевойsf Флаг знака
(Sign Flag)7
Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных
операндов соответственно):
1 — старший бит результата равен 1;
0 — старший бит результата равен 0of Флаг переполнения
(Overflow Flag)11
Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях:
1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата
(биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно);
0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результатаiopl Уровень Привилегий ввода-вывода
(Input/Output Privilege Level)
12, 13 Используется в защищенном режиме работы микропроцессора для контроля доступа к командам
ввода-вывода в зависимости от привилегированности задачи nt флажок вложенности задачи
(Nested Task)14
Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна
задача вложена в другую Таблица 2. Системные флаги
Мнемоника флага Флаг Номер бита в eflags Содержание и назначение tf Флаг трассировки
(Trace Flag)8
Предназначен для организации пошаговой работы микропроцессора.
1 — микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной
команды. Может использоваться при отладке программ, в частности отладчиками;
0 — обычная работаif Флаг прерывания
(Interrupt enable Flag)9
Предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний
по входу INTR).
1 — аппаратные прерывания разрешены;
0 — аппаратные прерывания запрещеныrf Флаг возобновления
(Resume Flag)16
Используется при обработке прерываний от регистров отладки. vm Флаг виртуального
(Virtual 8086 Mode)17
Признак работы микропроцессора в режиме виртуального 8086.
1 — процессор работает в режиме виртуального 8086;
0 — процессор работает в реальном или защищенном режимеac Флаг контроля выравнивания
(Alignment Check)18
Предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется
совместно с битом am в системном регистре cr0. К примеру, Pentium разрешает размещать команды и
данные с любого адреса. Если требуется контролировать выравнивание данных и команд по
адресам кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по
некратным адресам будут возбуждать исключительную ситуацию
Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение
следующей подлежащей выполнению команды относительно
содержимого сегментного регистра cs в текущем сегменте команд.
Этот регистр непосредственно недоступен программисту, но
загрузка и изменение его значения производятся различными
командами управления, к которым относятся команды условных и
безусловных переходов, вызова процедур и возврата из процедур.
Возникновение прерываний также приводит к модификации регистра
eip/ip.
Системные регистры микропроцессора
Регистры управления
В группу регистров управления входят 4 регистра:
cr0, cr1, cr2, cr3.
Регистры управления доступны только программам с
уровнем привилегий 0.
Назначение системных флагов:
Состояние этого флага показывает, в каком из
двух режимов — реальном (pe=0) или защищенном (pe=1) —
работает микропроцессор в данный момент времени.
Процессор автоматически устанавливает этот бит при
переключении на выполнение другой задачи.
Этот бит разрешает (am = 1) или запрещает (am = 0) контроль выравнивания.
С помощью этого бита можно запретить (cd = 1) или разрешить
(cd = 0) использование внутренней кэш-памяти (кэш-памяти первого уровня).
Флаг используется при страничной модели организации памяти.
В такой ситуации в микропроцессоре возникает исключительная ситуация с
номером 14, и линейный 32-битный адрес команды, вызвавшей это
исключение, записывается в регистр cr2. Имея эту информацию,
обработчик исключения 14 определяет нужную страницу,
осуществляет ее подкачку в память и возобновляет нормальную
работу программы;
Это так называемый регистр каталога страниц первого
уровня. Он содержит 20-битный физический базовый адрес
каталога страниц текущей задачи. Этот каталог содержит 1024 32-битных дескриптора, каждый из которых содержит адрес таблицы
страниц второго уровня. В свою очередь каждая из таблиц
страниц второго уровня содержит 1024 32-битных дескриптора,
адресующих страничные кадры в памяти. Размер страничного
кадра — 4 Кбайт.
Регистры системных адресов
Эти регистры еще называют регистрами управления памятью.
Они предназначены для защиты программ и данных в
мультизадачном режиме работы микропроцессора.
Этим разделением и объясняется присутствие в архитектуре
микропроцессора следующих системных регистров:
Регистры отладки
Это очень интересная группа регистров, предназначенных для
аппаратной отладки. Средства аппаратной отладки впервые
появились в микропроцессоре i486. Аппаратно микропроцессор
содержит восемь регистров отладки, но реально из них
используются только 6.
Все остальные биты в этом регистре заполняются нулями.
Обработчик исключения 1 по содержимому dr6 должен определить
причину, по которой произошло исключение, и выполнить
необходимые действия.
Первый бит из каждой пары — это так
называемое локальное разрешение; его установка говорит о том,
что точка прерывания действует если она находится в пределах
адресного пространства текущей задачи.
Второй бит в каждой
паре определяет глобальное разрешение, которое говорит о том,
что данная контрольная точка действует в пределах адресных
пространств всех задач, находящихся в системе;