Mov CL,0FFh ; Работа с байтом (8 бит)

Mov EAX,0FFFFFFFFh; Работа с двойным словом (32 бита)

Mov BX,0FFFFFFFFh; Работа со словом (16 бит)

mov CL,0FFh; Работа с байтом (8 бит)

Рисунок 1.2 – Сегментные регистры и указатель команд

Все сегментные регистры, как и в процессоре 8086, являются 16-разрядными. В их состав включено еще два регистра – FS и GS, которые могут использоваться для хранения сегментных адресов двух дополнительных сегмен­тов данных. Таким образом, при работе в реальном режиме из программы можно обеспечить доступ одновременно к четырем сегментам данных, а не к двум, как при использовании МП 8086.

Регистр указателя команд также является 32-разрядным и обычно при опи­сании процессора его называют EIP. Младшие шестнадцать разрядов этого реги­стра соответствуют регистру IP процессора 8086.

Регистр флагов процессоров, начиная с 486 принято называть EFLAGS. Дополнительно к шести флагам состояния (CF, PF, AF, ZF, SF и OF) и трем флагам управления со­стоянием процессора (TF, IF и DF), назначение которых было описано в предыдущих пособиях, он включает три новых флага NT, RF и VM и двухбайтовое поле IOPL (рисунок 1.3).

Рисунок 1.3 – Регистр флагов EFLAGS

Новые флаги NT, RF и VM, а также поле IOPL используются процессором только в защищенном режиме.

Двухразрядное поле привилегий ввода-вывода IOPL (Input/Output Privilege Level) указывает на максимальное значение уровня текущего приоритета (от 0 до 3), при котором команды ввода-вывода выполняются без генерации исключений.

Флаг вложенной задачи NT (Nested Task) показывает, является ли текущая задача вложенной в выполнение другой задачи. В этом случае NT =1. Флаг уста­навливается автоматически при переключении задач. Значение NT проверяется командой iret для определения способа возврата в вызвавшую задачу.

Управляющий флаг рестарта RF (Restart Flag) используется совместно с от­ладочными регистрами. Если RF =1, то ошибки, возникшие во время отладки при исполнении команды, игнорируются до выполнения следующей команды.

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

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

Для управления режимом работы процессора и указания его состояния ис­пользуются следующие шесть битов регистра CR0:

Рисунок 1.4 – Управляющий регистр CR0

Бит страничного преобразования PG (Paging Enable). Если этот бит установ­лен, то страничное преобразование разрешено; если сброшен, то запрещено.

Бит типа сопроцессора ЕТ (Extension Туре) в МП 80286 и 80386 указывал на тип подключенного сопроцессора. Если ЕТ = 1, то 80387, если ЕТ = 0, то 80287. В более новых процессорах бит ЕТ всегда установлен.

Бит переключения задачи TS (Task Switched). Этот бит автоматически уста­навливается процессором при каждом переключении задачи. Бит может быть очищен командой clts, которую можно использоваться только на нулевом уровне привилегий.

Бит эмуляции сопроцессора ЕМ (Emulate). Если ЕМ = 1, то обработка команд сопроцессора производится программно. При выполнении этих команд или ко­манды wait генерируется исключение отсутствия сопроцессора.

Бит присутствия арифметического сопроцессора MP (Math Present). Опера­ционная система устанавливает МР = 1, если сопроцессор присутствует. Этот бит управляет работой команды wait, используемой для синхронизации работы про­граммы и сопроцессора.

Бит разрешения защиты РЕ (Protection Enable). При РЕ = 1 процессор работа­ет в защищенном режиме; при РЕ = 0 в реальном. РЕ может быть установлен при загрузке регистра CR0 командами lmsw или mov CR0, а сброшен только коман­дой mov CR0.

Регистр CR1 зарезервирован фирмой Intel для последующих моделей про­цессоров. Регистры CR2 и CR3 служат для поддержки страничного преобразова­ния адреса. Эти два регистра используются вместе. CR2 содержит полный линей­ный адрес, вызвавший исключительную ситуацию на последней странице, a CR3 – адрес, указывающий базу каталога страницы.

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

Рисунок 1.5 – Регистры системных адресов

В состав процессора входят четыре регистра системных адресов:

GDTR (Global Descriptor Table Register) – регистр таблицы глобальных деск­рипторов для хранения линейного базового адреса и границы таблицы глобаль­ных дескрипторов.

IDTR (Interrupt Descriptor Table Register) – регистр таблицы дескрипторов прерываний для хранения линейного базового адреса и границы таблицы деск­рипторов прерываний.

LDTR (Local Descriptor Table Register) – регистр таблицы локальных деск­рипторов для хранения селектора сегмента таблицы локальных дескрипторов.

TR (Task Register) – регистр состояния задачи для хранения селектора сег­мента состояния задачи.

Отладочные регистры и регистры тестирования будут рассмотрены в главе 4.

Рассмотрим пример простой программы для 32-разрядного процессора.

Пример 1.1. Программа сложения 32-разрядных операндов

. 386


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: