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

5.11.4. Регистры сегментов и селекторов

Ранее уже отмечалось, что в ЭВМ, сконструированных на базе МП 8086 и более поздних, программы и данные хранятся в отдельных блоках памяти, или сегментах. В реальном режиме начальные адреса сегментов хранятся в регистрах сегментов. Для защищенного режима ОС создает специальные таблицы, адреса которых находятся в системных адресных регистрах, а номера элементов (селекторов) хранятся в сегментных регистрах, которые в этом случае правильнее назвать селекторными.

В 8086 и 8088 существовало четыре 16-битных сегментных регистра: SS, CS, DS, ES:

SS (Stack Segment) указывает на сегмент стека;

CS (Code Segment) указывает на сегмент кода, содержащий команду, исполняющуюся в данный момент;

DS (Data Segment) указывает на сегмент данных, обрабатываемых программой. В строковых командах этот сегмент является источником;

ES — дополнительный сегмент данных. В строковых операциях является сегментом приемника.

В процессорах 80386 и выше введено еще два дополнительных регистра: GS и FS.

В большинстве команд регистры DS, ES, GS, FS взаимозаменяемы. Но многие из этих команд ориентированы на использование определенного регистра (как правило, DS) и при использовании другого сегмента размер команды и время выполнения возрастают. Регистры CS и SS так же могут быть использованы в ряде команд, ориентированных на другие сегментные регистры, но обратное невозможно.

В процессорах от 80386 и выше разрядность сегментных регистров увеличена, но программно доступны все те же 16 бит. Остальные биты отвечают за размер сегмента, его права, т.е. фактически содержат дескриптор сегмента. Косвенно изменить его может только программа защищенного режима, выполнив операцию загрузки в сегментный регистр, при этом дескриптор будет загружен из специальных таблиц, подготовленных ОС.

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

Системные адресные регистры появились только в процессорах 80386 и предназначены для указания на структуры данных, ответственных за сегментацию в защищенном режиме:

  • GDTR (Global Descriptor Table Register) хранит размер и адрес Глобальной Таблицы Дескрипторов. Размер регистра — 48 бит;

  • IDTR (Interrupt Descriptor Table Register) хранит размер и адрес Таблицы Дескрипторов Прерываний. Размер регистра — 48 бит;

  • LDTR (Local Descriptor Table Register) хранит дескриптор Локальной Таблицы Дескрипторов. Программно доступный размер регистра — 16 бит;

  • TR (Task Register) хранит дескриптор Сегмента Состояния Задачи. Программно доступный размер регистра — 16 бит.

5.11.6. Регистры отладки

Восемь 32-битных регистра DR0-DR7 были введены в процессорах от 80386 и расширены в 80586. Эти регистры позволяют генерировать исключение #DB при обработке определенных адресов или обращении к определенным портам ввода/вывода.

Регистр DR7 (Debug Control Register) управляет процессом отладки и содержит следующие битовые поля:

31..30

29

28

27..26

25

24

LEN3

R

W

LEN2

R

W

23..22

21

20

19..18

17

16

LEN1

R

W

LEN1

R

W

15..14

13

12..11

10

9

8

0

GD

0

1

GE

LE

7

6

5

4

3

2

1

0

G3

L3

G2

L2

G1

L1

G0

L0

Поля LENi определяют размер области, адресуемой регистрами DR0..DR3.

Поля Ri Wi задают тип перехватываемого события: выборка инструкции, запись данных, обращение к порту ввода/вывода, чтение или запись данных.

По типу исключения перехват выборки инструкции классифицируется как отказ, а обращение данным – как ловушка.

Бит GD (Global Debug register access direct) позволяет отслеживать любые попытки обращения к отладочным регистрам.

GE и LE (Global и Local Exact data breakpoint match) определяют, будет ли исключение генерироваться сразу или с задержкой в несколько команд. Ни в [2] ни в [3] не описан смысл использования этих задержек.

Gi и Li разрешают срабатывание по контрольным точкам. Но Li сбрасываются при переключении задачи, в то время как на Gi переключение задачи не действует.

Регистр DR6 (Debug Status Register) позволяет обработчику узнать причину остановки (используется только часть из младших 16 бит):

15

14

13

12

11..4

3

2

1

0

BT

BS

BD

0

1

B3

B2

B1

B0

BT = 1 — ловушка переключения задач (по биту T в таблице состояния задачи).

BS = 1 — ловушка пошагового режима.

BD = 1 — отказ при попытке доступа к регистрам отладки.

Bi = 1 — остановка по контрольной точке в регистре DRi. Достоверны только для Gi или/и Li = 1.

Одновременно могут быть установлены несколько флагов. Возможно также несколько вызовов обработчика, если одна команда имеет несколько причин остановки. Для предотвращения многократного вызова используется флаг RS регистра флагов.

Регистры DR4 и DR5 пока не используются.

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