Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
20.06.2014
Размер:
1.08 Mб
Скачать

Контрольные задания

  1. Определить формат данной команды.

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

  3. Выделить команды, влияющие на флаги.

  4. Пояснить влияние данной команды на флаги.

  5. Выделить команды с данным способом адресации.

  6. Выделить команды с данным сочетанием способов адресации.

  7. Определить содержимое стека после выполнения данной команды.

  8. Выделить в программе команды, влияющие на стек.

  9. Выделить в программе команды, уменьшающие регистр SP.

  10. Выделить в программе команды, увеличивающие регистр SP.

  11. Выделить в программе команды, уменьшающие стек.

  12. Выделить в программе команды, увеличивающие стек.

  13. Выделить в программе команды, не изменяющие стек, но имеющие к нему отношение.

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

Лабораторная работа №4. Системная архитектура процессоров IA-32. Сегментирование и обработка прерываний в защищенном режиме

Цель работы и рассматриваемые вопросы

Цель работы — изучение сегментирования и обработки прерываний в защищенном режиме процессоров IA-32.

Рассматриваемые вопросы:

  1. Системные регистры и структуры данных процессоров IA-32.

  2. Сегментные регистры и селекторы сегментов.

  3. Дескрипторы и таблицы дескрипторов. Формат несистемного дескриптора.

  4. Глобальная таблица дескрипторов GDT и регистр глобальной таблицы дескрипторов GDT.

  5. Таблица дескрипторов прерываний IDT и регистр таблицы дескрипторов прерываний IDTR.

  6. Специальные дескрипторы — шлюзы. Формат шлюза прерывания.

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

  8. Порядок обработки прерываний в защищенном режиме.

  9. Ввод с клавиатуры в защищенном режиме.

Теоретическая информация

Системные регистры и структуры данных процессоров IA-32 и Intel64

Системные задачи

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

  • управления памятью;

  • защиты программных модулей;

  • реализации многозадачности;

  • реализации многопроцессорности;

  • обработки исключений и прерываний;

  • управления кэш-памятью;

  • управления питанием;

  • управления аппаратными средствами;

  • отладки и мониторинга производительности.

Системная архитектура неразрывно связана с защищенным режимом, поскольку все ее особенности проявляются только в нем. В реальном режиме процессоры x86 выглядят как i8086, только с регистрами общего назначения большего размера.

Основные структуры данных защищенного режима

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

  1. Селектор сегмента — 16-битная структура данных, содержащая индекс (номер) дескриптора сегмента в указанной таблице, текущий или запрашиваемый уровень привилегий. Для доступа к сегменту селектор должен быть загружен в соответствующий сегментный регистр.

  2. Дескриптор сегмента — 8- или 16-байтная структура данных, содержащая базовый адрес (адрес начала) сегмента, лимит (предел) сегмента, другую необходимую информацию о сегменте. Дескриптор содержится в другой структуре — таблице дескрипторов, находящейся в памяти. При обращении к сегменту по его селектору дескриптор сегмента автоматически загружается в скрытую часть сегментного регистра.

  3. Специальный дескриптор — дескриптор шлюза, специальной структуры, предназначенной для перехода между участками кода с различными свойствами.

  4. Таблица страниц — структура, содержащая указатели на страницы.

  5. Каталог страниц — структура, содержащая указатели на таблицы страницы.

  6. Таблица указателей на каталоги страниц и т. д.

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

Системные регистры IA-32

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

  1. Регистры управления памятью:

  • GDTR (Global Descriptor Table Register, регистр глобальной таблицы дескрипторов) — 6-байтный регистр, содержит базу и лимит (размер минус один) GDT (Global Descriptor Table, глобальной таблицы дескрипторов);

  • LDTR (Local Descriptor Table Register, регистр локальной таблицы дескрипторов) — 10-байтный регистр, содержит селектор и дескриптор LDT (Local Descriptor Table, локальной таблицы дескрипторов);

  • IDTR (Interrupt Descriptor Table Register, регистр таблицы дескрипторов прерываний) — 6-байтный регистр, содержит базу и лимит (размер минус один) IDT (Interrupt Descriptor Table, таблицы дескрипторов прерываний);

  • TR (Task Register, регистр задачи) — 10-байтный регистр, содержит селектор и дескриптор TSS (Task State Segment, сегмента состояния задачи) текущей задачи.

  1. Регистры управления (Control Register, CR), пять 32-разрядных регистров: CR0, CR1, CR2, CR3, CR4. Содержат различные поля и флаги для управления процессором на системном уровне. В частности, бит 0 (PE, Protected mode Enable) регистра CR0 при установке в 1 переводит процессор в защищенный режим работы.

  2. Отладочные регистры (Debug Register, DR), восемь 32-разрядных регистров: DR0-DR7. Позволяют отлаживать программу, определяя точки останова, не модифицируя код программ.

  3. Машинно-специфичные регистры. Их число и назначение зависит от модели процессора. Например, в Pentium есть регистр TSC, счетчик тактов процессора. В Pentium Pro — регистры, используемые для подсчета различных событий: обращений к кэшу, умножений, команд MMX и т. п.

Особенности архитектуры Intel64

Основные особенности архитектуры Intel 64:

  • 64-битное линейное адресное пространство для программного обеспечения;

  • физическое адресное пространство до 40 бит;

  • 8 дополнительных регистров общего назначения (GPRs): R8-R15;

  • 8 дополнительных регистров XMM (SSE, SSE2, SSE3, SSSE3);

  • 64-битные GPRs и IP, в названии вместо буквы E используется буква R — RAX, RIP и т. п.;

  • 64-битный регистр флагов RFLAGS, старшие 32 бита зарезервированы, младшие равны EFLAGS;

  • 64-битный указатель стека RSP;

  • 64-битные управляющие регистры, дополнительный управляющий регистр CR8 или TPR (task priority register);

  • 64-битные отладочные регистры;

  • регистр глобальной таблицы дескрипторов (GDTR) регистр таблицы дескрипторов прерываний (IDTR) расширены до 10 байт, так что они содержат полный 64-битный базовый адрес;

  • регистр локальной таблицы дескрипторов (LDTR) и регистр задач (TR) также расширены для содержания полного 64-битного базового адреса.

Размер и использование регистров общего назначения определяет префикс REX (табл.8).

Таблица 8.

Влияние префикса REX на использование регистров общего назначения

Размер регистра

без префикса REX

с префиксом REX

Byte

AL, BL, CL, DL, AH, BH, CH, DH

AL, BL, CL, DL, DIL, SIL, BPL, SPL, R8L - R15L

Word

AX, BX, CX, DX, DI, SI, BP, SP

AX, BX, CX, DX, DI, SI, BP, SP, R8W - R15W

Doubleword

EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP

EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, R8D - R15D

Quadword

N.A.

RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8 - R15

Сегментные регистры и селектор сегмента

Сегментные регистры используются и в реальном, и в защищенном режимах, но по разному. В реальном режиме сегментный регистр содержит базовый (начальный) адрес сегмента, деленный на 16, а в защищенном режиме — селектор сегмента (рис.3).

Рис.3 Формат селектора.

RPL (Requested Privilege Level) — запрошенный программой уровень привилегий.

TI (Table Indicator) — указатель таблицы. Если TI=0, то дескриптор, на который указывает индекс селектора находится в глобальной таблице дескрипторов (Global Descriptor Table, GDT), в противном случае — в локальной таблице дескрипторов (Local Descriptor Table, LDT).

Индекс — номер (указатель) дескриптора в указанной таблице дескрипторов.

Таким образом, селектор содержит указатель на дескриптор, а дескриптор — указатель на сегмент — базу или начальный адрес сегмента.

В защищенном режиме логический адрес представляет собой пару "селектор:смещение".

Первая часть логического адреса — селектор, находящийся в сегментном регистре, указывает на дескриптор, из которого берется база и прибавляется ко второй части логического адреса — смещению, которое теперь уже может быть 32- или 64-битным. Эта сумма представляет собой линейный адрес, который является физическим, если не включена страничная адресация. При включенной страничной адресации используются дополнительные преобразования линейного адреса с использованием каталогов и таблиц страниц. Страничная адресация в данной лабораторной работе не рассматривается.

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

Загрузить сегментные регистры можно явно: MOV, POP, LDS, LES, LSS, LGS, LFS — или неявно: CALL, JMP, RET, SYSENTER, SYSEXIT, IRET, INT n, INTO, INT3. Как видно, явно загружаются все сегментные регистры, кроме CS, неявно — CS и в некоторых случаях другие сегментные регистры.

Селектор сегмента состояния задачи (TSS) находится в регистре задачи (TR).

Системные флаги

Регистр флагов в процессорах семейства IA-32 называется EFLAGS и имеет размер 32 бита, семейства Intel64 — RFLAGS и имеет размер 64 бита. Однако множество флагов и распределение флагов по битам в этих регистрах одинаково, поскольку старшие 32 бита в RFLAGS зарезервированы, а младшие равны EFLAGS.

Регистр флагов в целом используется и в реальном, и в защищенном режимах. Но в его составе имеется группа системных флагов, которая используется только в защищенном режиме:

  • бит 21 — ID, флаг идентификации, если программа может изменить значение этого флага, то процессор поддерживает команду CPUID (начиная с Pentium);

  • бит 20 — VIP, флаг ожидания виртуального прерывания, указывает процессору, что произошло аппаратное прерывание;

  • бит 19 — VIF, флаг виртуального прерывания — виртуальный образ флага IF (начиная с Pentium);

  • бит 18 — AC, флаг контроля выравнивания в памяти. Если установить этот флаг и флаг AM в регистре CR0, то каждое обращение к памяти из программ, выполняющихся с CPL=3, невыравненное на границу слова для слов и на границу двойного слова для двойных слов, будет вызывать исключение #AC;

  • бит 17 — VM, флаг режима виртуального 8086 (V86). Его установка переводит процессор в режим V86;

  • бит 16 — RF, флаг возобновления (продолжения задачи). Когда он равен 1, отладочные исключения запрещены. Устанавливается командой IRETD из обработчика отладочного прерывания, для того чтобы #DB не произошло перед выполнением команды, которая его вызвала, еще раз. На флаг не влияют команды POPF, PUSHF, IRET;

  • бит 14 — NT, флаг вложенности задачи. Равен 1, если текущая задача является вложенной по отношению к другой — в обработчиках прерываний и исключений и задачах, вызванных командой CALL. Влияет на работу команды IRET;

  • биты 12-13 — IOPL, уровень привилегий ввода-вывода, с которым выполняется текущая программа или задача. Чтобы программа (задача) могла обратиться к порту ввода-вывода, ее текущий уровень привилегий (CPL) должен быть не больше IOPL. IOPL можно модифицировать только с нулевым уровнем привилегий.

Соседние файлы в папке Задания к лабораторным