Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPT_otvety_na_ekzamen.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
417 Кб
Скачать
☆
  1. Теневые регистры и их назначение:

Для ускорения формирования линейного адреса при защищенном режиме работы, пользуются тем обстоятельством, что обращение к памяти производится гораздо чаще, чем изменение содержимого сегментных регистров и переключения задач. Поэтому целесообразно ускорить обращение к памяти за счет замедления загрузки сегментных регистров и переключения задач. Такой компромисс достигается путем ассоциирования с регистрами LDTR, TR и каждым сегментным регистром (CS, DS, SS, ES, FS, GS) так называемых теневых (Shadow) регистров, которые невидимы для пользовательских программ и даже программ операционной системы. Они автоматически модифицируются и невидимо используются схемами процессора.

На рисунке III.13 приведены все регистры преобразования адреса и их теневые регистры. Иногда теневые регистры называют кэш-регистрами, а сам этот прием – кэшированием (caching) дескрипторов, поскольку теневые регистры организованы как регистровая кэш-память.

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

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

Рис.III.13. Теневые регистры дескрипторов.

  1. Регистр флагов и назначение его отдельных битов:

Регистр флагов EFLAFGS/FLAGS содержит флаги, которые можно разделить на флаги состояния (NT, OF, SF, ZF, AF, PF, CF) и флаги управления (ID, VIP, VIF, AC, VM, RF, DF, IF, TF, IOPL).

Флаги состояния сообщают об особенностях результата выполнения команд обработки данных. Команды условных переходов позволяют программе учесть состояние этих флагов и отреагировать на них. Команды простой пересылки данных не воздействуют на флаги состояния. Флаги состояния OF, SF, ZF, AF, PF, CF называют, кроме того, арифметическими флагами, поскольку они отражают ту или иную особенность результата арифметической или логической операции.

Рассмотрим правила установки флагов состояния более подробно.

CF (Carry Flag) – флаг переноса. Устанавливается в 1, если арифметическая операция вызвала перенос (при операции сложения) из старшего бита результата, или заем (при операции вычитания). В противном случае флаг сбрасывается в 0. В зависимости от разрядности операнда, старшим битом может являться бит 7 (байты), 15 (слова) или 31 (двойные слова). Флаг CF может также изменять свое состояние при сдвиговых операциях. С помощью специальных команд этот флаг можно установить в любое состояние или инвертировать его. Используется процессором в основном при исполнении команд условных переходов и при сдвиговых операциях. При арифметических операциях с целыми беззнаковыми числами служит признаком переполнения разрядной сетки. Кроме того, процессор использует этот флаг при обработке многоразрядных чисел, с разрядностью, превышающей разрядность сумматора арифметико-логического устройства (АЛУ).

PF (Parity Flag) – флаг паритета (четности). Флаг устанавливается в 1, если младший байт результата содержит четное число единичных бит; в противном случае флаг устанавливается в состояние 0. Используется процессором при исполнении команд условных переходов, а также для контроля четности/нечетности при передаче данных.

AF (Auxiliary Carry Flag) – флаг дополнительного переноса. Устанавливается в 1, если арифметическая операция вызвала перенос (при сложении) из первой тетрады младшего байта результата, или заем (при вычитании). В противном случае флаг устанавливается в 0. Используется процессором при операциях десятичной арифметики: при AF=1 процессор вводит коррекцию в полученный результат. Программно этот флаг недоступен.

ZF (Zero Flag) – флаг нулевого результата. Устанавливается в состояние 1, когда результат операции равен 0; в противном случае он сбрасывается в 0. В операциях сравнения ZF устанавливается в 1, когда сравниваемые операнды равны, так как операция сравнения производится с помощью вычитания операндов. Используется процессором при выполнении операций условных переходов.

SF (Sign Flag) – флаг знака результата. Устанавливается в то же состояние, в каком находится старший байт результата. В зависимости от разрядности операндов этим битом может быть бит 7, 15 или 31. При использовании целых чисел со знаком, представляемых в дополнительном коде, флаг SF показывает знак результата. Используется процессором при выводе результатов операций, а также при исполнении команд условных переходов.

OF (Overflow Flag) – флаг переполнения разрядной сетки. Флаг OF устанавливается в 1, если при арифметических операциях с целыми знаковыми операндами результат превышает диапазон представления чисел; в противном случае флаг OF устанавливается в 0. Этот флаг введен потому, что при знаковых операндах, установление флага CF в 1 не может служить критерием переполнения разрядной сетки (также как и установка флага ОF в состояние 1 еще не может служить признаком переполнения разрядной сетки при операциях с беззнаковыми целыми числами). Значение флага OF определяется логической функцией неравнозначности сигналов переноса в старший (знаковый) бит результата и из старшего бита. В зависимости от размера операндов старшим битом может являться бит 7, 15 или 31. Флаг OF используется процессором при контроле правильности выполнения арифметических операций и исполнении команд условных переходов.

NT (Nested Task) – флаг вложенной задачи. Этот флаг действует только в защищенном режиме (Р – режиме) и устанавливается в 1, когда текущая задача производит переключение на другую задачу с помощью команды вызова CALL. Таким образом, с помощью этого флага организуется цепь вложенных задач аналогично вложению подпрограмм. Состояние флага NT проверяется процессором при выполнении команды возврата из прерывания IRET и при NT = 1 осуществляется переключение задачи, а при NT = 0 происходит обычный возврат из подпрограммы с восстановлением из стека содержимого регистров CS, EIP, EFLAGS.

Флаги управления в регистре флагов воздействуют на те или иные аспекты работы процессора.

IOPL (Input/Output Privilege Level) – уровень привилегий ввода/вывода. Это двухбитовое поле является составной частью системы защиты процессора и действует только в P – режиме. Оно показывает тот минимальный уровень привилегий выполняющейся задачи, на котором разрешается производство операций ввода/вывода. Таким образом, эти два бита используются для управления доступом к адресному пространству ввода/вывода. Запись информации в эти два бита может быть произведена командами программ, расположенными только на уровне 0 колец защиты.

TF (Trap Flag или Trace Flag) – флаг пошаговой работы (трассировки). Когда этот шаг установлен в состояние 0, процессор работает обычным образом, а при TF =1 он переводится в режим пошаговой (покомандной) работы, т.е. после выполнения каждой команды генерируется внутреннее прерывание. При этом управление передается отладчику, который обычно выводит на экран дисплея состояние процессора в данный момент времени, и останавливает работу процессора в ожидании действий пользователя. Этот флаг является одним из средств, предназначенных для отладки программ.

IF (Interrupt Flag) – флаг управления прерываниями. Когда флаг IF установлен в состояние 1, процессор распознает и обрабатывает внешние маскируемые аппаратные прерывания, запрос на которые поступает от контроллера прерываний по входу INTR. Таким образом, установка флага IF в состояние 1 разрешает процессору реагировать на внешние прерывания. Если же флаг IF=0, внешние прерывания запрещены, и процессор игнорирует сигналы прерывания по входу INTR. Однако на внешние прерывания по входу NMI установка флага IF влияния не оказывает, так же как и на прерывания внутренние. Отметим, что на выполнение команд, задающих состояние флага IF, влияет механизм защиты процессора.

DF (Direction Flag) – флаг направления обработки цепочек. После операции над одним элементом цепочки производится автоматический инкремент (при DF=0) или декремент (при DF=1) содержимого индексных регистров ESI/SI и EDI/DI, в которых формируются адресные смещения в соответствующих сегментах. Таким образом, при DF=0 цепочки обрабатываются от младших адресов к старшим, а при DF=1 обработка цепочек осуществляется от старших адресов к младшим. Величина инкремента/декремента, составляет 1,2 или 4 в зависимости от размера элементов цепочек (байт, слово или двойное слово). Для задания нужного состояния флага DF в системе команд процессора предусмотрены специальные инструкции.

RF (Resume Flag) – флаг возобновления. Этот флаг является составной частью новых средств отладки и действует совместно с регистрами отладки. Используется при отладке программ с помощью контрольных точек. Значение флага проверяется между командами перед прерыванием. Если этот флаг установлен в 1, то любая ошибка отладки перед выполнением следующей команды игнорируется. Флаг RF автоматически сбрасывается при успешном завершении каждой команды, сигнализируя об отсутствии ошибки. Исключения составляют команды IRET, POPF, JMP, CALL и INT, вызывающие переключения задач. Перечисленные команды устанавливают значение флага RF в соответствии с содержимым EFLAGS, вызываемым из памяти.

VM (Virtual Mode) – флаг виртуального режима (V – режима) процессора. Когда VM = 0, процессор может работать в R – или P – режиме, а при VM = 1 процессор превращается в многозадачный высокопроизводительный процессор 8086. Каждой такой задаче выделяется 1 Мбайт адресного пространства. Флаг VM можно установить в состояние 1 только в защищенном режиме работы, т.е. в P – режиме: командой IRET на нулевом уровне привилегий или переключением задач на любом уровне привилегий. Таким образом, установка флага VM в состояние 1 переводит процессор в V – режим, который эмулирует программную среду процессора 8086.

AC (Alignment Cheсk) – флаг контроля выравнивания. Установка в 1 флага AC (а также бита AM в регистре управления CR0) разрешает контроль выравнивания при обращении к памяти. Особый случай контроля выравнивания возникает при обращении к невыравненному операнду, например к слову с нечетным байтовым адресом или к двойному слову, адрес которого не кратен четырем. Особые случаи выравнивания генерируются только в режиме пользователя (уровень привилегий 3). Обращение к памяти, которые по умолчанию относятся к уровню привилегий 0, например, загрузка дескриптора сегмента, не формируют этого особого случая при обращении к памяти даже в режиме пользователя. Наличие контроля выравнивания удобно при обмене данными с другими процессорами, например с процессором i860, который требует выравнивания всех данных.

ID (Identification – опознание, выяснение) – флаг идентификации. Этот флаг предназначен для проверки, поддерживается ли процессором команда CPUID или нет. Если в программе можно установить и сбросить этот флаг, значит, команда CPUID данным процессом поддерживается. Команда же CPUID предоставляет программному обеспечению информацию о продавце, семействе, модели и поколении процессора, на котором она выполнена. Входное значение, загружаемое в регистр EAX, указывает какую информацию необходимо вернуть командой CPUID. После выполнения команды CPUID со значением 0 в EAX, регистр EAX будет содержать максимальное значение, понимаемое командой CPUID. Для процессоров Pentium значение в EAX будет равно 1. В выходное значение этой команды будет также включена строка идентификации продавца, содержащаяся в регистрах EBX, EDX, и ECX. Регистр EBX содержит первые четыре символа данной строки, регистр EDX содержит следующие четыре символа и, наконец, регистр ECX содержит последние четыре символа строки. Для процессоров Intel строка идентификации продавца имеет следующий вид: «GenuineIntel». После выполнения команды CPUID со значением 1 в EAX, EAX[3:0] содержит номер разработки микропроцессора, EAX[7:4] содержит номер модели, (первая модель будет указана в этих битах как 0001B), и EAX[11:8] содержит семейство (5 для линии процессоров Pentium). Регистры EAX [31:12], EBX и ECX – зарезервированы. В EDX указаны еще несколько характеристик (какие свойства данная модель поддерживает).

VIP (Virtual Interrupt Pending) – ожидание виртуального прерывания, а также:

VIF (Virtual Interrupt Flag) – флаг виртуального прерывания, позволяют каждой прикладной программе, в многозадачном режиме, иметь виртуальную версию флага IF.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]