Скачиваний:
23
Добавлен:
11.05.2015
Размер:
998.91 Кб
Скачать

5.11.2. Указатель инструкций

Регистр EIP (Istruction Pointer) либо его младшая 16-битная часть IP, используется для указания смещения текущей инструкции в сегменте. В реальном режиме процессор всегда использует IP, и только процессоры с 80386, в защищенном режиме, если текущий сегмент кода 32-битный, будет использовать EIP. Обращение к этому регистру стандартными инструкциями, как правило, не допускается. Для его модификации используется специальный набор инструкций — инструкции переходов или ветвлений.

5.11.3. Регистр флагов и управляющие регистры

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

Младшая 16-битная часть регистра флагов присутствовала во всех семействах процессоров и выглядит следующим образом:

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

0

0

0

OF

DF

IF

TF

SF

ZF

0

AF

0

PF

0

CF

Флаг переноса CF (Carry Flag) равен 1, если при сложении произошел перенос единицы из знакового разряда во флаг переноса или заем при вычитании. Кроме того, флаг CF используется при сдвигах.

Флаг четности PF (Parity Flag) равен 1, если в результате операции получен результат, содержащий четное число единиц.

Вспомогательный флаг переноса (или «флаг полупереноса») AF (Auxiliary Flag) аналогичен флагу CF, но контролирует перенос или заем для третьего бита.

Флаг ноля ZF (Zero Flag) равен 1, если в результате операции получен ноль; ненулевой результат сбрасывает ZF в ноль.

Флаг знака SF (Sign Flag) используется только в операциях над числами со знаком. Флаг SF дублирует старший (знаковый) бит результата независимо от того, имеет результат длину 8 или 16 бит.

Если флаг трассировки TF (Trap Flag) установлен в 1, после выполнения каждой команды вызывается внутреннее прерывание 1 (int 1).

Единичное значения флага прерывания IF (Interrupt-enable Flag) разрешает выполнение внешних маскируемых прерываний. Этот флаг не влияет на немаскируемое прерывание NMI (Non Maskable Interrupt) и программное прерывание от команды int nn.

Флаг направления DF (Direction Flag) используется в командах обработки строк. Если DF=1, процессор будет обрабатывать строки от младших адресов к старшим, в противном случае — наоборот.

Флаг переполнения OF равен 1, если результат сложения двух чисел с одинаковыми знаками или вычитания чисел с разными знаками выйдет за пределы допустимого диапазона значений, иначе он равен 0. Также OF=1, если старший бит (знак) операнда изменился в результате операции арифметического сдвига, иначе он равен 0. Кроме того, в сочетании с CF флаг OF указывает длину результата умножения. Если старшая половина произведения отлична от ноля, то CF и OF равны 1, иначе оба флага равны 0. Наконец, OF указывает на ситуацию, в которой частное от деления переполняет результирующий регистр.

Остальные биты в регистре флагов ВСЕГДА должны быть равны 0 и не используются в МП 8086.

В процессоре 80286 слово состояния дополнилось следующими полями, используемыми только в защищенном режиме:

15

14

13

12

0

NT

IOPL

Флаг NT (Nested Task Flag) — флаг вложенной задачи. Равен 1, если текущая задача является вложенной по отношению к какой либо другой.

Поле IOPL (Input/Output Privilege Level) — уровень привилегий ввода/вывода. Программа в защищенном режиме должна иметь уровень привилегий больший или равный IOPL, если ей нужно работать с портами ввода/вывода.

Кроме того, в 80286 появилось т.н. слово состояния машины (Machine State Word). Оно содержит информацию о конфигурации процессора и его общее состояние. Этот регистр применяется для перехода в защищенный режим, поэтому он доступен как в реальном, так и в защищенном режимах. В шестнадцатибитном регистре определены только четыре младших бита, а остальные зарезервированы:

15 .. 4

3

2

1

0

0

TS

MP

EM

PE

TS (Task Switch) — переключение задач. При установке этого флага следующая команда, относящаяся к математическому сопроцессору, вызовет исключение 7, что позволяет программно определить, относится ли контекст сопроцессора к текущей задаче. Флаг устанавливается процессором при переключении задачи автоматически, а сбрасывается обработчиком исключения.

EM (Processor Extension Emulated) — эмуляция сопроцессора. Вызывает исключение 7 при каждой команде, относящейся к сопроцессору. Используется для «прозрачной» эмуляции сопроцессора.

MP (Monitor Processor Extension) — мониторинг сопроцессора, позволяет вызывать исключение 7 по каждой команде wait / fwait (команда синхронизации центрального и сопроцессора).

PE (Protect Enable) — установка этого флага в 1 переводит процессор в защищенный режим. Обратный возврат процессора 80286 возможен только по сигналу Reset.

Сочетание MP=EM=TS=0 устанавливается по аппаратному сбросу и обеспечивает полную совместимость с 8086 / 8088. Сочетание MP=1, EM=0 используется при наличии 80287 (сопроцессор). MP=0, EM=1 — про программной эмуляции сопроцессора. MP=1 и EM=1 переводит процессор в режим производственного контроля.

Для операций с MSW введены две новые команды: lmsw и smsw.

В процессорах 80386 и более поздних появились дополнительные регистры. Это произошло следующим образом.

  • Регистр флагов был расширен до 32 бит.

  • Были введены 32-битные регистры Cr0..Cr4 (Control Register), причем регистр MSW стал младшей частью регистра Cr0.

  • Команды lmsw и smsw оперируют только младшими четырьмя битами Cr0. Для доступа к остальным битам используются команды MOV.

Новые биты регистра флагов:

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

0

0

0

0

0

0

0

0

0

0

ID

VIP

VIF

AC

VM

RF

ID (Id Flag) — флаг доступности команды идентификации CPUID (80586 и более поздние, некоторые 80486). Если программа может изменить значение этого флага, значит команда CPUID доступна.

VIP (Virtual Interrupt Pending) — виртуальный флаг запроса прерывания (80586 и более поздние).

VIF (Virtual Interrupt Flag) — виртуальная версия флага IF для многозадачных систем (80586 и более поздние).

AC (Aligment Chech) — флаг контроля выравнивания (80486 и более поздние). Работает только при установленном AM (расположенном в регистре Cr0).

VM (Virtual 8086 Mode) — в защищенном режиме включает режим виртуального 8086.

RF (Resume Flag) — флаг возобновления. Используется совместно с регистрами точек останова. Если этот флаг установлен, отладочные прерывания временно запрещены.

Опишем назначение регистров Cr0 .. Cr4.

Регистр Cr4 начал использоваться только в процессорах 80586 и выше. Он имеет следующий формат:

32 .. 10

9

8

7

6

5

4

3

2

1

0

0

FSR

PMC

PGE

MCE

PAE

PSE

DE

TSD

PVI

VME

Флажок VME (Virtual-8086 Mode Extension) разрешает использование виртуального флага прерываний (VIF) в режиме V86.

PVI (Protect-mode Virtual Interrupts) — расширение использования виртуального флага прерываний (VIF) в защищенном режиме.

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

DE (Debug Extension) разрешает использование точек останова по обращению к заданным портам ввода/вывода.

PSE (Page Size Extension) — расширение размера страницы с 4 Кб до 4 Мб.

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

MCE (Machine-Check Enable) — разрешение машинного контроля (самоконтроля).

PGE (Paging Global Extension) — разрешение глобальности в страничной адресации.

PCE/PMC7 (Perfomance Monitoring Counter Enable) — разрешение обращения к счетчикам событий (RDPMC) на любом уровне привелегий.

FSR — разрешает команды быстрого сохранения / восстановления состояния сопроцессора (FXSAVE / FXRSTOR).

Вообще говоря, не все флажки регистра Cr4 и связанные с ними возможности могут присутствовать в конкретном процессоре. Прежде чем использовать какую-либо из них, нужно убедиться в ее наличии, проанализировав результат команды CPUID.

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

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

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

Регистр Cr0, как было сказано выше, включает в себя описанное ранее MSW. Остальные биты, определенные в 80386 и более поздних, описаны далее:

31

30

29

28 .. 19

18

17

16

15.. 6

5

4

3 .. 0

PG

CD

NW

0

AM

0

WP

0

NE

ET

MSW

ET (Extension Type) использовался только на 80386 и 80486 и указывал на то, что сопроцессор присутствует.

NE (Numeric Error) включает режим, в котором ошибки сопроцессора вызывают исключение #MF, а не прерывание 13.

WP (Write Protect) запрещает запись в страницы, помеченные как «только для чтения» на любом уровне привилегий (в противном случае запись запрещена только уровню 3).

AM (Aligment Mask) разрешает работу флага AC (расположенного в слове флагов).

NW (Not Writethrough) запрещает сквозную запись во внутренний КЭШ: данные, записываемые в КЭШ, не появляются на внешних выводах процессора.

CD (Cache Disable) запрещает заполнение КЭШа. Чтение, по возможности, все равно будет происходить из КЭШа.

PG (Paging Enable) разрешает работу механизма страничного преобразования.

Соседние файлы в папке Введение в вычислительную технику.