ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 5

Часть II  Системное программирование
-----------------------------------------------------------------
Глава 4   Архитектура системы
-----------------------------------------------------------------
Многие свойства архитектуры процессора i486 используются только
системными программистами. В данной главе содержится обзор этих
свойств. Прикладным программистам также может понадобиться
прочесть эту и последующие главы, описывающие свойства
архитектуры процессора, для понимания того, какие аппаратные
средства используются системными программистами для создания
надежной и защищенной среды разработки прикладных программ.
Архитектура системного уровня также поддерживает мощные
отладочные средства, доступные прикладным программистам при
разработке программ.
Свойства системного уровня архитектуры процессора включают в
себя:
     Организация памяти
     Защита
     Многозадачность
     Ввод/вывод
     Особые ситуации и прерывания
     Инициализация
     Сопроцессорная и многопроцессорная обработка
     Отладка
     Организация кеширования памяти
Эти свойства поддерживаются регистрами и командами процессора,
рассматриваемыми в следующих разделах. Назначение данной главы
состоит не в том, чтобы подробно объяснять каждое из этих
свойств, а в том, чтобы дать общую перспективу размещения
посвященных им материалов в главах части II. При упоминании тех
или иных регистров и команд сразу же дается пояснение или ссылка
на их описание в одной из последующих глав.
4.1  Системные регистры
-----------------------------------------------------------------
Регистры, предназначенные для использования системными
программистами, делятся на следующие категории:
     Регистр флагов EFLAGS
     Регистры организации памяти
     Управляющие регистры
     Отладочные регистры
     Тестовые регистры
Системные регистры управляют средой, в которой происходит
выполнение прикладных программ. В большинстве систем доступ к
этим регистрам из прикладных программ запрещен (хотя возможно
построение и таких систем, в которых все программы работают на
наиболее привилегированном уровне, что означает возможность
доступа к системным регистрам и их модификацию из прикладных
программ).
4.1.1  Системные флаги
-----------------------------------------------------------------
Системные флаги в регистре EFLAGS управляют вводом/выводом,
маскируемыми прерываниями, отладкой, переключением между
задачами, а также виртуальным режимом 8086. Прикладными
программами эти флаги должны игнорироваться, а попытки
модификации их состояния из прикладных программ недопустимы. В
большинстве систем попытка изменения системного флага из
прикладной программы приводит к возникновению исключения (особой
ситуации). Флаги показаны на Рисунок 4.1.
AC (Режим контроля выравнивания в памяти, бит 18)
Установка флага AC и бита AM в регистре CR0 разрешает контроль
выравнивания при обращениях к памяти. В случае обращения к
невыравненному операнду в памяти, например к операнду размером в
слово по нечетному адресу памяти или к операнду размером в
двойное слово по адресу памяти, не кратному четырем,
генерируется исключение контроля выравнивания. Исключения
контроля выравнивания генерируются только в режиме пользователя
(уровень привилегированности 3). Ссылки к памяти, по умолчанию
имеющие уровень привилегированности 0, такие как загрузка
дескриптора сегмента, не генерируют данного исключения даже в
тех случаях, когда они былм выполнены в режиме пользователя.
Прерывание контроля выравнивания может быть использовано для
контроля выравнивания данных в памяти. Это средство может быть
полезным при обмене данными с другими процессорами, например, 64
-разрядным микропроцессором i860, который требует выравнивание
всех обрабатываемых им данных. Прерывание контроля выравнивания
может также использоваться интерпретаторами для того, чтобы
отметить некоторый указатель как специальный, намеренно нарушив
для этого выравнивание данного указателя. Тем самым отпадает
необходимость проверять все указатели в поисках искомого и
обрабатывать только специальный указатель, если он был таким
способом обозначен.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Дї
і                                                                
 і
і                           1 1 1 1 1 1 1 1 1                    
 і
і 31                        8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 і
іЪДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВД
їі
іі і і і і і і і і і і і і і і і і і і   і і і і і і і і і і і і 
іі
іі0і0і0і0і0і0і0і0і0і0і0і0і0іAіVіRі0іNіI OіOіDіIіTіSіZі0іAі0іPі1іC
іі
іі і і і і і і і і і і і і іCіMіFі іTіP LіFіFіFіFіFіFі іFі іFі іF
іі
іі і і і і і і і і і і і і і і і і і і   і і і і і і і і і і і і 
іі
іАДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБД
Щі
і                           і і і   і  і      і і                
 і
і   Проверка выравнивания ДДЩ і і   і  і      і і                
 і
і   Флаг режима виртуального ДЩ і   і  і      і і                
 і
і   процессора 8086             і   і  і      і і                
 і
і   Флаг возобновления ДДДДДДДДДЩ   і  і      і і                
 і
і   Флаг вложенности задачи ДДДДДДДДЩ  і      і і                
 і
і   Уровень привилегий ввода-вывода ДДДЩ      і і                
 і
і   Разрешение прерываний ДДДДДДДДДДДДДДДДДДДДЩ і                
 і
і   Флаг ловушки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ                
 і
і                                                                
 і
і                                                                
 і
і 1 или 0 обозначают биты, зарезервированные фирмой Intel        
 і
і Данные регистры не используются, а их значения всегда постоянны
 і
і                                                                
 і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДЩ
                  Рисунок 4-1. Системные флаги
VM (Виртуальный режим 8086, бит 17)
Установка флага VM переводит процессор в виртуальный режим 8086,
в котором эмулируется среда программирования для процессора
8086. Более подробная информация приводится в Главе 23.
RF (Флаг возобновления, бит 16)
Флаг RF временно отменяет действие отладочных исключений,
поэтому после такого исключения может быть выполнена другая
команда и это не приведет к немедленному генерированию другого
отладочного исключения. При входе в отладчик этот флаг
обеспечивает его нормальное функционирование; в противном случае
отладчик выполнял бы рекурсивные вызовы самого себя до тех пор,
пока не произошло бы переполнение стека. Команда POPF на флаг RF
воздействия не оказывает, но команды POPFD и IRET влияют на
состояние этого флага. Более подробная информация приводится в
Главах 7 и 11.
NT (Флаг вложенности задачи, бит 14)
Процессор использует флаг вложенности задачи для управления
последовательностью выполнения прерванных и вызванных задач.
Флаг NT оказывает влияние на работу команды IRET. Команды POPF,
POPFD и IRET воздействуют на состояние флага NT. Неверные
изменения состояния данного флага могут привести к генерации
неожиданных исключений в прикладных программах. Более подробную
информацию о вложенных задачах см. в Главах 7 и 9.
IOPL (Уровень привилегий ввода/вывода, биты 12 и 13)
Уровень привилегированности ввода/вывода используется механизмом
защиты для управления доступом к адресному пространству
ввода/вывода. Уровень привилегированности выполняемого в текущий
момент кодового сегмента (CPL) и IOPL определяют, может ли
данное поле быть модифицировано командами POPF, POPFD и IRET.
Более подробную информацию см. в Главе 8.
IF (Флаг разрешения прерываний, бит 9)
Установка флага IF переводит процессор в режим, в котором он
отвечает на запросы маскируемых прерываний (прерывания INTR).
Очистка флага IF отменяет эти прерывания. Флаг IF не оказывает
воздействия на особые ситуации или немаскируемые (NMI)
прерывания. CPL и IOPL опеределяют, может ли это поле быть
модифицировано командами CLI, STI, POPF, POPFD и IRET. Более
подробную информацию о прерываниях см. в Главе 9.
TF (Флаг ловушки, бит 8)
Установка флага TF переводит процессор в режим пошаговой работы
для отладки программ. В этом режиме процессор после выполнения
каждой команды генерирует отладочное исключение, что позволяет
наблюдать за тем, как выполненяется каждая команда программы.
Пошаговое выполнение представляет собой одно из отладочных
средств процессора i486. Если прикладная программа устанавливает
при помощи команд POPF, POPFD или IRET флаг TF, то генерируется
отладочное исключение. Более подробную информацию см. в Главах 9
и 11.
4.1.2  Регистры управления памятью
-----------------------------------------------------------------
Как показано на Рисунок 4-2, четыре регистра процессора i486
задают расположение структур данных, которые управляют
организацией сегментированной памяти. Для загрузки и сохранения
этих регистров имеются специальные команды. Регистры GDTR и IDTR
могут быть загружены при помощи команд, извлекающих из памяти
шести-байтовые блоки. Регистры LDTR и TR могут быть загружены
при помощи команд, принимающих в качестве операнда 16-битовый
селектор сегмента. Затем остальные байты этих регистров
загружаются процессором автоматически из дескриптора, на который
ссылается переданный операнд.
Большинство систем защищает команды, загружающие регистры
организации памяти от использования в прикладных программах
(хотя возможна и система, не имеющая такого рода защиты).
Регистр таблицы глобальных дескрипторов GDTR
Этот регистр содержит 32-битовый базовый адрес и 16-битовую
границу сегмента для таблицы глобальных дескрипторов (GDT). При
ссылке на данные в памяти для того, чтобы найти дескриптор
сегмента в GDT или LDT используется селектор сегмента.
Дескриптор сегмента содержит базовый адрес сегмента.
Сегментирование рассматривается в Главе 5.
Регистр таблицы локальных дескрипторов LDTR
Этот регистр содержит 32-битовый базовый адрес, 16-битовую
границу сегмента и 16-битовый селектор сегмента для таблицы
локальных дескрипторов (LDT). Сегмент, который содержит LDT,
имеет соответствующий дескриптор сегмента в GDT. Дескриптора
сегмента для GDT не существует. При ссылке на данные в памяти
для того, чтобы найти дескриптор сегмента в GDT или LDT
используется селектор сегмента. Дескриптор сегмента содержит
базовый адрес сегмента. Сегментирование рассматривается в Главе
5.
      Регистры системных адресов
         32-битовый линейный
            базовый адрес           Граница
      47                      16 15          0
      -----------------------------------------
  GDTR |                         |             |
      -----------------------------------------
  LDTR |                         |             |
      -----------------------------------------
     Системные   Регистры дескрипторов (автоматически загружаемые
     сегментные
     регистры
      ___^__      _______________________^_______________________
     /      \    /                                               
                 32-битовый линейный 32-битовая граница  Аттрибут
     15       0  базовый адрес       сегмента
     ----------  ------------------------------------------------
  TR  |селектор|  |                  |                  |  |   | 
 |
     ----------  ------------------------------------------------
  IDTR|селектор|  |                  |                  |  |   | 
 |
     ----------  ------------------------------------------------
            Рисунок 4-2. Регистры управления памятью
Регистр таблицы дескриптора прерываний IDTR
Этот регистр содержит 32-разрядный базовый адрес и 16-разрядную
границу сегмента для таблицы дескрипторов прерываний. Когда
происходит прерывание, вектор прерывания используется в качестве
индекса для получения из данной таблицы дескриптора шлюза.
Последний сдержит указатель, используемый для запуска
обработчика прерываний. Более подробную информацию о механизме
прерываний см. в Главе 9.
Регистр задачи TR
Этот регистр содержит 32-разрядный базовый адрес, 16-разрядную
границу сегмента, аттрибуты дескриптора и 16-разрядный селектор
сегмента для текущей выполняемой задачи. Он содержит ссылку на
дескриптор сегмента состояния задачи (TSS), находящийся в
таблице глобального дескриптора. Более подробную информацию о
средствах мультизадачности процессора i486 см. в Главе 7.
4.1.3  Регистры управления
-----------------------------------------------------------------
На Рисунке 4-3 показан формат управляющих регистров CR0, CR1,
CR2 и CR3. В большинстве систем загрузка управляющих регистров
из прикладных программ невозможна (хотя в незащищенных системах
такая загрузка разрешается). Прикладные программы имеют
возможность считывать эти регистры для определения наличия
математического сопроцессора. Некоторые разновидности команды
MOV позволяют загружать управляющие регистры из регистров общего
назначения, и наоборот. Например,
     MOV  EAX,  CR0
     MOV  CR3,  EBX
Регистр CR0 содержит системные управляющие флаги, которые
управляют режимами или указывают на состояние процессора в
целом, а не относительно выполнения конкретных задач. Программа
не должна пытаться изменить состояние каких-либо битов в
зарезервированных позициях. Эти зарезервированные биты всегда
должны устанавливаться в то состояние, которое они имели ранее
при считывании.
31          23            15             7       3       0
-----------------------------------------------------------
|   Базовый регистр страничного   |           |P|P|       |
|       каталога (PBDR)           |           |C|W|       | CR3
|                                 |           |D|T|       |
-----------------------------------------------------------
|            Линейный адрес сбоя страницы                 | CR2
-----------------------------------------------------------
|                     Зарезервировано                     | CR1
-----------------------------------------------------------
|P|C|N|         |A| |W|   Зарезервировано     |N|E|T|E|M|P| CR0
|G|D|W|         |M| |P|                       |E|T|S|M|P|E|
-----------------------------------------------------------
     29         18  16
               Рисунок 4-3.  Управляющие регистры
Команда LMSW может модифицировать только младшие 16 битов
регистра CR0.
PG (Подкачка страниц, бит 31)
Данный бит разрешает подкачку страниц, если он установлен, и
запрещает ее, если он очищен. Более подробная информация о
подкачке страниц находится в Главе 5. В Главе 10 описано, как
разрешить подкачку страниц.
Когда при подкачке страниц возникает исключение, в регистр CR2
помещается 32-разрядный линейный адрес, вызвавший это
исключение. Информация об обработке исключений, генерируемых при
подкачке страниц (отсутствие нужной страницы) находится в Главе
9.
При использовании подкачки страниц регистр CR3 содержит 20
наиболее значащих битов адреса страничного каталога (таблицы
страниц первого уровня). Регистр CR3 также называется базовым
регистром страничного каталога (PDBR). Отметим, что страничный
каталог должен быть выравнен по границе страницы, поэтому 12
младших битов регистра игнорируются. В отличие от процессора 386
DX, процессор i486 назначает функции двум из этих битов. Это:
PCD (Запрещение  кеширования  на  уровне страниц,  бит 4 регистра
CR3)
Состояние этого бита устанавливается в зависимости от состояния
штырька PCD во время циклов шины, не работающих со страницами
(например, циклов квитирования прерывания), когда подкачка
страниц разрешена. Если подкачка страниц запрещена, то состояние
этого бита устанавливается в любых циклах шины. Штырек PCD
используется для управления работой внешнего кеша по циклам.
PWT (Прозрачность записи на уровне страниц, бит 3 регистра CR3)
Состояние этого бита устанавливается в зависимости от состояния
штырька PWT во время циклов шины, не работающих со страницами
(например, циклов квитирования прерывания), когда подкачка
страниц разрешена. Если подкачка страниц запрещена, то состояние
этого бита устанавливается в любых циклах шины. Штырек PWT
используется для управления сквозной записью во внешний кеш по
циклам.
CD (Запрещение кеширования, бит 30)
Данный бит разрешает внутреннее кеширование, если он очищен, и
запрещает, если он установлен. Когда данный бит установлен,
несовпадения кеша не вызывают заполнения строки кеша. Отметим,
что совпадения кеша при этом не отменяются; для полного
запрещения кеша он должен быть очищен.
NW (Сквозная запись не происходит, бит 29)
Данный бит разрешает сквозную запись и циклы аннулирования кеша,
если он очищен, и запрещает циклы аннулирования и сквозную
запись, ищущую совпадения кеша, если он установлен. Информация о
кешировании находится в Главе 12. Отмена сквозной записи
позволяет хранить в кеше данные о состоянии.
AM (Маска выравнивания, бит 18)
Этот бит позволяет выполнять контроль выравнивания, если он
установлен, и запрещает этот контроль, если он очищен. Контроль
выравнивания выполняется только когда бит AM установлен, флаг AC
установлен, а CLP имеет значение 3 (режим пользователя).
WP (Защита записи, бит 16)
Если этот бит установлен, то он защищает от записи страницы
уровня пользователя при доступе в режиме супервизора. Если этот
бит очищен, то страницы уровня пользователя, предназначенные
только для чтения, могут быть затерты записью процессом
супервизора. Это свойство может быть полезным для реализации
метода "записи в копию" создания нового процесса (ветвления
параллельных процессов), используемого некоторыми операционными
системами (например, UNIX).
NE (Числовая ошибка, бит 5)
Этот бит разрешает стандартный механизм сообщений об ошибках при
числовых операциях с плавающей точкой, если он установлен. Когда
NE очищен, а вход IGNNE# активен, числовые ошибки игнорируются.
Когда бит NE очищен, а вход IGNNE# не активен, числовая ошибка
ведет к останову процессора и ожиданию прерывания. Прерывание
генерируется при помощи штырька FERR#, формирующего ввод в
контроллер прерываний (штырек FERR# эмулирует штырек ERROR#
сопроцессоров 80287 и 387 DX). Бит NE, штырек IGNNE # и штырек
FERR# используются внешними логическими схемами для реализации
сообщений об ошибках в стиле PC.
ET (Тип расширения, бит 4)
Этот бит служит для того, чтобы указывать на поддержку команд
математического сопроцессора 387 DX (Intel резервируется).
TS (Переключение задачи, бит 3)
Процессор устанавливает бит TS при каждом переключении задачи и
проверяет его при интерпретации арифметических команд с
плавающей точкой. Данный бит позволяет откладывать
сохранение/восстановление числовых данных до их фактического
использования. Команда CLTS очищает этот бит.
EM (Эмуляция, бит 2)
Если установлен один из битов, EM или TS, то выполнение команды
WAIT или числовой команды генерирует исключение "сопроцессор
недоступен". EM может быть установлен для получения исключения 7
для каждой команды WAIT или числовой команды.
MP (Математический сопроцессор присутствует, бит 1)
В случае процессоров 80286 и 386 DX бит MP управляет работой
команды WAIT, используемой для синхронизации с сопроцессором.
При выполнении программ на процессоре i486 данный бит должен
быть установлен.
PE (Разрешение защиты, бит 0)
Установка бита PE разрешает защиту на уровне сегмента. Более
подробную информацию о защите см. в Главе 6. Информацию о
разрешении и запрещении подкачки страниц см. в Главах 10 и 22.
4.1.4  Отладочные регистры
-----------------------------------------------------------------
Отладочные регистры дают процессору i486 расширенные возможности
отладки, включая контрольные точки данных и средство
устанавливать контрольные точки команд без модификации кодовых
сегментов (что может быть полезным при отладке ПЗУ-резидентного
программного обеспечения). Доступ к этим регистрам имеют только
программы с наивысшим уровнем привилегированности. В Главе 11
находится полное описание их форматов и способа использования.
Отладочные регистры показаны на Рисунке 4-4.
4.1.5  Тестовые регистры
----------------------------------------------------------------
Тестовые регистры не являются формальной частью архитектуры
процессора. Они представляют собой зависящее от конкретной
реализации средство, предназначенное для тестирования
ассоциативного буфера трансляции (TLB) и кеша. Полное описание
их формата и использования см. в Главе 10. Тестовые регистры
показаны на Рисунок 4-5.
31               23              15              7             0
-----------------------------------------------------------------
|LEN|R/W|LEN|R/W|LEN|R/W|LEN|R/W|0 0|0|0 0 0|G|L|G|L|G|L|G|L|G|L|
DR7
| 3 | 3 | 2 | 2 | 1 | 1 | 0 | 0 |   | |     |E|E|3|3|2|2|1|1|0|0|
-----------------------------------------------------------------
|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|S|S|S|0 0 0 0 0 0 0 0 0|S|S|S|S|
DR6
|                               |T|S|D|                 |3|2|1|0|
----------------|---------------|---------------|----------------
|                        Зарезервировано                        |
DR5
----------------|---------------|---------------|----------------
|                        Зарезервировано                        |
DR4
----------------|---------------|---------------|----------------
|                Линейный адрес контрольн.точки 3               |
DR3
----------------|---------------|---------------|----------------
|                Линейный адрес контрольн.точки 2               |
DR2
----------------|---------------|---------------|----------------
|                Линейный адрес контрольн.точки 1               |
DR1
----------------|---------------|---------------|----------------
|                Линейный адрес контрольн.точки 0               |
DR0
----------------|---------------|---------------|----------------
     Рисунок 4-4.  Отладочные регистры
                                       1 1 1
31                                     2 1 0 9 8 7 6 5 4 3 2 1 0
-----------------------------------------------------------------
|                                       |P|P| LRU |0 0|P| R |0 0|
| Физический адрес                      |C|W|     |   |L| E |   |
TR7
|                                       |D|T|     |   | | P |   |
-----------------------------------------------------------------
|                                       | | |D| |U| |W|       | |
| Линейный адрес                        |V|D|#|U|#|W|#|0 0 0 0|C|
TR6
|                                       | | | | | | | |       | |
-----------------------------------------------------------------
|                                         |             | E | C |
| Не используется                         |   Выбор     | N | T |
TR5
|                                         | набора      | T | L |
-----------------------------------------------------------------
|                                         | |     |       |     |
| Линейный адрес                          |V| LRU | VALID |0 0 0|
TR4
|                                         | |     |       |     |
-----------------------------------------------------------------
|                      Данные                                   |
TR3
-----------------------------------------------------------------
LRU - признак наиболее давнего использования для метода "удаления
      стариков"
V     VALID    (Допустимо)
CTL   CONTROL  (Управление)
ENT   ENTRY    (Вход)
                Рисунок 4-5.  Тестовые регистры
4.2  Системные команды
-----------------------------------------------------------------
Системные команды выполняют следующие функции:
1. Верификация параметров указателей (см. Главу 6):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| ARPL    | Настройка RPL               |   Нет     |   Нет     |
| LAR     | Загрузка прав доступа       |   Да      |   Нет     |
| LSL     | Загрузка границы сегмента   |   Да      |   Нет     |
| VERR    | Верификация для чтения      |   Да      |   Нет     |
| VERW    | Верификация для записи      |   Да      |   Нет     |
-----------------------------------------------------------------
2. Адресация таблиц дескриптора (см. Главу 5):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| LLDT    | Загрузка регистра LDT       |   Да      |   Нет     |
| SLDT    | Сохранение регистра LDT     |   Да      |   Нет     |
| LGDT    | Загрузка регистра GDT       |   Нет     |   Да      |
| SGDT    | Сохранение регистра GDT     |   Нет     |   Нет     |
-----------------------------------------------------------------
3. Мультизадачность (см. Главу 7):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| LTR     | Загрузка регистра задачи    |   Нет     |   Да      |
| STR     | Сохранение регистр задачи   |   Да      |   Нет     |
-----------------------------------------------------------------
4. Числовые операции с плавающей точкой (см. Часть III):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| CLTS    | Очистка бита TS в CR0       |   Нет     |   Да      |
| ESC     | Управляющие команды         |   Да      |   Нет     |
| WAIT    | Ждать освобождения          |   Да      |   Нет     |
|         | сопроцессора (Not Busy)     |           |           |
-----------------------------------------------------------------
5.  Ввод и вывод (см. Главу 8):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| IN      | Ввод                        |   Да      | Может быть|
| OUT     | Вывод                       |   Да      | Может быть|
| INS     | Ввод строки                 |   Да      | Может быть|
| OUTS    | Вывод строки                |   Да      | Может быть|
-----------------------------------------------------------------
6.  Управление прерываниями (см. Главу 9):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| CLI     | Очистить флаг IF            | Может быть| Может быть|
| STI     | Сохранить флаг IF           | Может быть| Может быть|
| LIDT    | Загрузить регистр IDT       |   Нет     |   Да      |
| SIDT    | Сохранить регистр IDT       |   Нет     |   Нет     |
-----------------------------------------------------------------
7.  Отладка (см. Главу 11):
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| MOV     | Загрузка и сохранение       |   Нет     |   Да      |
|         | отладочных регистров        |           |           |
-----------------------------------------------------------------
8.  Организация кеша:
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| INVD    | Аннулирование кеша          |   Нет     |   Да      |
|         | с обратной записью          |           |           |
| WBINVD  | Аннулирование кеша          |   Нет     |   Да      |
|         | без обратной записи         |           |           |
| INVLPG  | Аннулирование ввода TLB     |   Нет     |   Да      |
-----------------------------------------------------------------
9.  Управление системой:
-----------------------------------------------------------------
| Команда |          Описание           |Полезна в  |Защищена от|
|         |                             |прикладных |прикладных |
|         |                             |программах?|программ?  |
-----------------------------------------------------------------
| SMSW    | Сохранение MSW              |   Нет     |   Нет     |
| LMSW    | Загрузка MSW                |   Нет     |   Да      |
| MOV     | Загрузка и сохранение       |   Нет     |   Да      |
|         | управляющего регистра       |           |           |
| HLT     | Останов процессора          |   Нет     |   Да      |
| LOCK    | Захват шины                 |   Нет     | Может быть|
-----------------------------------------------------------------
Команды SMSW и LMSW обеспечивают совместимость с процессором
80286. Программа для процессора i486 не должна использовать эти
команды. Доступ к управляющим регистрам выполняется при помощи
разновидностей команды MOV. Команда LMSW не влияет на биты PG,
CD, NW, AM, WP, NE или ET и не может быть использована для
очистки бита PE.
Команда HLT останавливает процессор до приема разрешенного
прерывания или сигнала RESET. (Отметим, что немаскируемые
прерывания разрешены всегда). Процессор генерирует специальный
цикл шины, которым обозначает вход в режим останова. Аппаратное
обеспечение может отреагировать на этот сигнал несколькими
способами. Может включиться светодиод индикатора на передней
панели. Может быть генерировано немаскируемое прерывание для
записи диагностической информации. Может произойти активизация
инициализатора сброса системы. Разработчики программного
обеспечения должны знать аппаратную реакцию на режим останова
процессора.
Командный префикс LOCK используется для запуска монопольной
(элементарной) операции чтения-модификации-записи при
модификации операнда памяти. Выдается сигнал LOCK#, и процессор
не реагирует на запросы на управление шиной до окончания
монопольной операции. Этот механизм служит для обеспечения
надежной связи между процессорами в многопроцессорных системах.
     Помимо упомянутых  выше  глав,  подробная  информация о кажд
ой из
этих команд приводится в справочнике по командам  процессора,  ко
торый
находится в Главе 26.


Яндекс цитирования