Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова

.pdf
Скачиваний:
36
Добавлен:
31.05.2015
Размер:
4.4 Mб
Скачать

Инструкции условного перехода Jcc (переход по условию cc – например, JNZ для перехода, если результат не ноль), SETcc (установить значение бай-

та-результата в зависимости от условия cc), LOOPcc (организация цикла) и CMOVcc (условное копирование) используют один или несколько флагов со-

стояния для проверки условия. Например, инструкция перехода JLE (jump if less or equal – переход, если «меньше или равен», ≤) проверяет условие «ZF =

1 или SF ≠ OF». На рис. 13 представлен абстрактный пример использования регистра флагов как инструкций перехода по состоянию.

Флаг PF был введен для совместимости с другими микропроцессорны-

ми архитектурами и по прямому назначению используется редко. Более рас-

пространено его использование совместно с остальными флагами состояния в арифметике FPU.

Флаг DF (бит 10 в регистре флагов) управляет строковыми инструк-

циями (MOVS, CMPS, SCAS, LODS и STOS): установка флага заставляет уменьшать адреса (обрабатывать строки от старших адресов к младшим), об-

нуление заставляет адреса увеличивать. Инструкции STD и CLD соответст-

венно устанавливают и обнуляют флаг DF.

41

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

cmp AX,BX

;Сравнение двух регистров

je equal

;Переход, если AX=BX

cmp SI,mem

;Сравнение регистра и ячейки памяти

jne notequ

;Переход, если SI<>mem

int 21h

;Вызов DOS

jc syserr

;Переход, если была ошибка и флаг CF=1

or BX,BX

;Анализ BX

jz zero

;Переход, если BX=0 по флагу ZF

inpt: in AL,DX

;Ввод данного из устройства

test AL,80h

;Анализ бита 7 в данном

je inpt

;Ввод до тех пор, пока

 

;бит 7=0 (ожидание установки бита 7)

test AX,7

;Анализ битов 0,1,2 в AX

jne found

;Переход, если хотя бы 1 бит

 

;из них установлен

test DI,OFh

;Анализ битов 0...3 в DI

jz reset

;Переход, если все они сброшены

Рис. 13. Пример использования инструкций перехода в языке Assembler

для некоторых значений флагов состояния регистра EFLAGS

42

Системные флаги и поле IOPL управляют операционной средой и не предназначены для использования в прикладных программах.

Флаг IF – обнуление этого флага запрещает отвечать на маскируемые запросы на прерывание. Используется в программах для разрешения или запрета обработки внешнего маскируемого прерывания, приходящего по линии INTR магистрали. Когда флаг прерывания сброшен в 0, прерывания запрещены, т. е. запросы внешних маскируемых прерываний игнорируются. На немаскируемые внешние прерывания, появляющиеся в линии NMI магистрали, и на программные прерывания флаг не влияет. Флаг прерывания IF находится в 9-м разряде регистра флагов. В единичное состояние флаг устанавливается командой STI (Set Interrupt), в нулевое – командой CLI (Clear

Interrupt).

Флаг TF – установка этого флага разрешает пошаговый режим отладки, когда после каждой выполненной инструкции происходит прерывание программы и вызов специального обработчика прерывания (см. также: Int3).

INT 3 – команда процессоров семейства x86, которая несет функцию так называемого программного breakpoint, или точки останова. Исполнение команды приводит к вызову обработчика прерывания № 3, зарезервированного для отладочных целей. В отличие от остальных команд вида INT N, которые кодируются двумя байтами, команда INT 3 кодируется только одним байтом с кодом 0xCC, хотя, конечно, 2-байтная инструкция 0xCD 0x03 тоже будет работать. Используется главным образом при отладке программ, отладчик может вставлять INT 3 в код отлаживаемой программы в точках останова.

Флаг IOPL – показывает уровень приоритета (рис. 14) ввода-вывода исполняемой программы или задачи: чтобы программа или задача могла выполнять инструкции ввода-вывода или менять флаг IF, ее текущий уровень приоритета (CPL) должен быть ≤ IOPL.

43

Рис. 14. Уровни (кольца) привилегий

Принципы переходов между кольцами:

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

В то же время в процессе выполнения любой программы необхо-

димо обращаться к программам, находящимся на более высоком

уровне привилегий, например, к драйверам или СУБД.

Для этих целей используются специально установленные точки входа в эти программы (шлюзы).

Передача управления на более низкий уровень привилегий осуще-

ствляется с помощью механизма подчиненных сегментов.

Флаг NT – этот флаг устанавливается, когда текущая задача «вложена» в другую, прерванную задачу, и сегмент состояния TSS текущей задачи обеспечивает обратную связь с TSS предыдущей задачи. Флаг NT проверяет-

ся инструкцией IRET для определения типа возврата – межзадачного или внутризадачного.

44

Флаг RF – флаг маскирования ошибок отладки.

Флаг VM – установка этого флага в защищенном режиме вызывает переключение в режим виртуального 8086, в частности VM = 0 – переход из виртуального в защищенный режим, и VM = 1 – переход из защищенного в виртуальный режим.

Флаг AC – установка этого флага вместе с битом AM в регистре CR0

включает контроль выравнивания операндов при обращениях к памяти – об-

ращение к невыравненному операнду вызывает исключительную ситуацию.

Флаг VIF – виртуальная копия флага IF; используется совместно с

флагом VIP.

Флаг VIP – устанавливается для указания наличия отложенного пре-

рывания; используется совместно с флагом VIF.

Флаг ID – возможность программно изменить этот флаг в регистре флагов указывает на поддержку инструкции CPUID.

4.2.8. Управляющие регистры

Регистры CR[0–4] хранят признаки состояния процессора, общие для всех задач (рис. 15). Регистр CR0 содержит системные флаги, управляю-

щие режимами работы микропроцессора и отражающие его состояние гло-

бально, независимо от конкретных выполняющихся задач.

Рис. 15. Управляющие регистры

45

Назначение битов регистра CR0 следующее:

PE (Protect Enable), бит 0 – разрешение защищенного режима работы. Состояние этого флага показывает, в каком из двух режимов – реальном (PE = 0) или защищенном (PE = 1) – работает микропроцес-

сор в данный момент времени.

MP (Math Present), бит 1 – наличие сопроцессора. Для современ-

ных процессоров всегда 1.

TS (Task Switched), бит 3 – переключение задач. Процессор ав-

томатически устанавливает этот бит при переключении на выполнение

другой задачи.

AM (Aligment Mask), бит 18 – маска выравнивания. Этот бит разрешает (AM = 1) или запрещает (AM = 0) контроль выравнивания.

CD (Cache Disable), бит 30 – запрещение кэш-памяти. С помо-

щью этого бита можно запретить (CD = 1) или разрешить (CD = 0) ис-

пользование внутренней кэш-памяти (кэш-памяти первого уровня).

PG (PaGing), бит 31 – разрешение (PG = 1) или запрещение (PG

=0) страничного преобразования. Флаг используется при страничной модели организации памяти.

Регистр CR0 является расширением регистра MSW процессора 80286, в

котором были определены лишь биты PE, MP, EM и TS.

Регистр CR1 не используется.

Регистр CR2 (Page Fault Linear Address) хранит 32-битный линейный ад-

рес (в зависимости от разрядности процессора), по которому был получен последний отказ страницы памяти. В частности, регистр CR2 используется при страничной организации оперативной памяти для регистрации ситуации,

когда текущая команда обратилась по адресу, содержащемуся в странице па-

мяти, отсутствующей в данный момент времени в памяти. В такой ситуации в микропроцессоре возникает исключительная ситуация с номером 14 (int 14h – the serial communication interrupt), и линейный 32-битный адрес коман-

46

ды, вызвавшей это исключение, записывается в регистр CR2. Имея эту ин-

формацию, обработчик исключения 14 определяет нужную страницу, осуще-

ствляет ее подкачку в память и возобновляет нормальную работу программы.

Регистр CR3 (Page Directory Base Register) в старших 20 битах хранит физический базовый адрес таблицы каталога страниц. Из младших 12 бит ис-

пользуются следующие:

PCD (Page-Level Cache Disable) – запрет кэширования страни-

цы (один из источников аппаратного сигнала PCD для управления внешним кэшем);

PWT (Page-Level Writes Through) – кэширование страницы со сквозной записью (один из источников аппаратного сигнала PWT для управления внешним кэшем).

Регистр CR3 также используется при страничной организации памяти.

Это так называемый регистр каталога страниц первого уровня. Он содержит

20-битный физический базовый адрес каталога страниц текущей задачи. Этот каталог содержит 210 32-битных дескриптора, каждый из которых содержит адрес таблицы страниц второго уровня. В свою очередь каждая из таблиц страниц второго уровня содержит 1024 32-битных дескриптора, адресующих

страничные кадры в памяти. Размер страничного кадра – 4 Кбайт.

Регистр CR4 содержит биты разрешения архитектурных расширений.

Назначение битов регистра CR4 следующее:

VWE (Virtual Mode Extensions) – разрешение использования виртуального флага прерываний в режиме V86, что позволяет повысить производительность за счет сокращения лишних вызовов монитора виртуальных машин.

PVI (Protected-Mode Virtual Interrupts) – разрешение использо-

вания виртуального флага прерываний в защищенном режиме.

TSD (Time Stamp Disable) – превращение инструкции RDTSC (чтение счетчика меток реального времени) в привилегированную.

47

DE (Debugging Extension) – расширение возможностей отладки

(разрешение точек останова на инструкции обращения к заданным пор-

там ввода-вывода).

PSE (Page Size Extension) – расширение размера страниц (4 кб

и4 Мб).

PAE (Physical Address Extension) – расширение физического адреса (страницы 4 кб и 2 Мб, 36-битная адресация).

MCE (Machine-Check Enable) – разрешение машинного контро-

ля (выработка исключения #MC по машинной ошибке).

PGE (Paging Global Extensions) – разрешение глобальности в страничной переадресации. При PG = 1 по команде MOV CR3 в TLB

(буфер ассоциативной трансляции) очищаются только вхождения с не-

установленным битом глобальности G.

PCE (Perfomance-monitoring Counter Enable) – разрешение об-

ращения к счетчикам событий (инструкция RDPMC) на любом уровне привилегий.

OSFXSR – флаг использования инструкций

FXSAVE/FXRSTOR для быстрого сохранения и восстановления со-

стояния FPU/MMX при переключении контекста. При инициализации процессора флаг обнуляется; он может быть установлен операционной системой, если она эти инструкции использует, а процессор их под-

держивает. Признак поддержки инструкций – бит FXSR (EDX.24) по-

сле вызова CPUID(1).

OSXMMEXCPT – флаг поддержки операционной системы ис-

ключений от XMM.

4.2.9. Системные адресные регистры

Эти регистры еще называют регистрами управления памятью

(рис. 16).

48

Рис. 16. Системные адресные регистры Они предназначены для защиты программ и данных в мультизадачном

режиме работы микропроцессора. При работе в защищенном режиме микро-

процессора адресное пространство делится на: 1) глобальное – общее для всех задач; 2) локальное – отдельное для каждой задачи.

Разделением и объясняется присутствие в архитектуре микропроцессора следующих системных регистров:

регистра таблицы глобальных дескрипторов GDTR (Global Descriptor Table Register), имеющего размер 48 бит и содержащего

32-битовый (биты 16–47) базовый адрес глобальной дескриптор-

ной таблицы GDT и 16-битовое (биты 0–15) значение предела,

представляющее собой размер в байтах таблицы GDT;

регистра таблицы локальных дескрипторов LDTR (Local Descriptor Table Register), имеющего размер 16 бит и содержащего так назы-

ваемый селектор дескриптора локальной дескрипторной таблицы

LDT. Этот селектор является указателем в таблице GDT, который

49

и описывает сегмент, содержащий локальную дескрипторную таб-

лицу LDT;

регистра таблицы дескрипторов прерываний IDTR (Interrupt Descriptor Table Register), имеющего размер 48 бит и содержащего

32-битовый (биты 16–47) базовый адрес дескрипторной таблицы прерываний IDT и 16-битовое (биты 0–15) значение предела, пред-

ставляющее собой размер в байтах таблицы IDT;

16-битового регистра задачи TR(Task Register), который, подобно регистру LDTR, содержит селектор, т. е. указатель на дескриптор в таблице GDT. Этот дескриптор описывает текущий сегмент со-

стояния задачи (TSS – Task Segment Status). Этот сегмент создает-

ся для каждой задачи в системе, имеет жестко регламентирован-

ную структуру и содержит контекст (текущее состояние) задачи.

Основное назначение сегментов TSS – сохранять текущее состоя-

ние задачи в момент переключения на другую задачу.

4.2.10. Регистры тестирования

Состав регистров тестирования (Test Register) варьируется в зависимо-

сти от типа процессора. Для процессоров семейства х86 регистры TR6 и TR7

предназначены для тестирования кэша страничной переадресации (TR6 (Test Control) – управляющий регистр для теста кэширования страниц, TR7 (Test Status) – регистр данных для теста кэширования страниц). TR3 – регистр данных внутреннего кэша, TR4 – тестовый регистр состояния кэша, TR5 –

управляющий регистр тестирования кэша.

Важно отметить, что в современных процессорах семейства х86 тесто-

вые регистры входят в группу модельно-специфических регистров MSR.

5.Организация памяти

Впроцессорах семейства х86 предусматривается разделение про-

странств памяти и ввода-вывода. Пространство памяти (Memory Space)

50