- •Архитектура современной вычислительной системы (обзор)
- •Кэши ассоциативные, с прямым отображением и множественно-ассоциативные
- •Представление бинарных данных
- •Режимы работы процессоров семейства i8086+
- •Регистры i8086+
- •Формат инструкции
- •Некоторые инструкции ЦПУ (не включая инструкции FPU, MMX, SSEn и пр.)
- •Формирование кодов основных инструкций i8086+
- •Соответствие мнемоники машинным кодам на примере инструкции пересылки (mov)
- •Режим реальных адресов i8086 (real mode)
- •Синтаксис основных ассемблеров (Intel и AT&T) семейства процессоров i8086+
- •Адреса: короткие, ближние, дальние; перемещаемые записи
- •Сегменты, секции, модели памяти, страницы
- •Переходы, вызовы процедур
- •Символы и макросы
- •Структура физического адресного пространства режима реальных адресов
- •Простейший пример BIOS
- •Некоторое оборудование IBM PC
- •Инициализация контроллера прерываний
- •Инициализация контроллеров клавиатуры PS/2
- •Инициализация PS/2 мыши
- •Инициализация таймера 8253/8254
- •Работа с последовательным интерфейсом UART
- •Программирование контроллера DMA 8257/8237
- •Прерывания в SMP системе; измерение времени
- •Инициализация локального контроллера прерываний (LAPIC)
- •Инициализация контроллера прерываний ввода-вывода (IO APIC)
- •Сегментная модель защищенных режимов i286...x64
- •Общая структура дескриптора
- •Cегмент состояния задачи; переключение стеков
- •«Нереальный 8086»
- •Системные вызовы
- •Структура адресного пространства многопоточного приложения (C, расширение MSVC) с обработкой исключений (Win32).
- •Структура адресного пространства многопоточного приложения (C++) с обработкой исключений (Posix Threads (NPTL); Linux; IA-32)
- •Страничная модель защищенных режимов i386...x64
- •Соглашения о вызовах C/C++ (платформы IA-32, x64)
- •Пример программы, демонстрирующей различные соглашения о вызовах.
- •Основные средства управления адресным пространством, основанные на страничном механизме
- •Запрет на исполнение данных
- •Пример использования уязвимости типа «переполнение буфера в стеке»
- •Проецирование файлов.
- •Императивный способ управления проецированием.
- •Пример создания разделяемого проецирования для межпроцессного взаимодействия
- •Исполняемые файлы и динамические библиотеки
- •Построение динамических библиотек
- •Загрузка библиотек на этапе исполнения.
- •Экспорт, импорт, перемещаемые записи в Windows
- •Экспорт, импорт, перемещаемые записи в Posix
- •POSIX. Позиционно-независимый код в архитектуре IA-32.
- •Построение и использование статических библиотек объектных файлов
- •Встроенный ассемблер; понятие барьеров оптимизации и барьеров памяти.
- •Пример измерения коротких интервалов времени
- •SMP, критические секции и взаимные блокировки
- •Литература
Инициализация локального контроллера прерываний (LAPIC)
Документация: «Intel® 64 and IA-32 Architectures Software Developer’s Manual», том 3A: «System Programming Guide, Part 1», глава 9
Инструкция CPUID: источник: EAX, иногда EAX и ECX; приёмник: EDX:ECX:EBX:EAX; подробнее см. том 2A.
Инструкции RDMSR / WRMSR: источник ECX — номер MSR регистра; содержимое MSR загружается в/из EDX:EAX; подробнее см. том 2B.
Примечание: для использования LAPIC нужно либо использовать 32-х разрядные адреса (т. е. включить т. н. «нереальный 8086» или 32-х разрядный режим 80386+), либо изменить настройку процессора (MSR IA32_APPIC_BASE), отобразив адреса LAPIC в первый мегабайт адресного пространства,доступный из реального режима.
|
|
|
1) убедиться, что процессор поддерживает LAPIC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2) убедиться, что установлен бит разрешения LAPIC |
|
||||||||||||||||||||||||||||||||||||||||
(поддержка существует лишь для процессоров Pentium и более поздних; подробнее том 3A, глава 9.4); |
|
|
|
|
|
(бит номер 0x0B, маска 0x800) в регистре базового |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.а) убедиться, что процессор поддерживает |
|
|
|
|
|
1.б) убедиться, что бит 9 (маска 0x20) регистра EDX |
|
|
|
адреса LAPIC; регистр базового адреса LAPIC |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
известен как MSR 0x1B (IA32_APPIC_BASE): |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
инструкцию CPUID, т.е. бит ID (0x21, маска 0x200000) |
|
|
не ноль после выполнения инструкции CPUID, |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
63 ... 36 |
35 ... 12 |
11 |
|
10 |
9 |
|
8 |
7 ... 0 |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
регистра EFLAGS не ноль: |
|
|
|
|
|
|
|
функция 1: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MBZ |
|
Base |
|
APICEN |
|
MBZ |
|
BSP |
MBZ |
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pushfl |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
movl |
|
|
|
$0x01, %eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
movl |
$0x1B, %ecx |
|
|
|
|
|
|
|
|||||||||||||||||||
popl |
%eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cpuid |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rdmsr |
|
|
|
|
|
|
|
|
|
|
|||||||||||
test |
0x200000, %eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test |
|
|
|
$0x20, %edx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
or |
|
$0x800, %eax |
|
|
|
|
|
|
||||||||||||||||||||
jz |
not_supported |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jz |
|
|
|
not_supported |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wrmsr |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
Обычно базовый адрес LAPIC равен 0xFEE00000; современные процессоры допускают изменение базового адреса посредством MSR регистра. |
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3) установить бит разрешения LAPIC в дескрипторе вектора фиктивных (spuriouse) прерываний |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||
4) настроить вектора прерываний LINT0, LINT1, локального таймера и т. д. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
+0x20 |
LAPIC ID |
r/o или r/w |
|
31 ... 24 |
|
23 ... 0 |
|
Lapic ID: содержит ID локального APIC (он же ID процессора) используется при режиме доставки «physical»; |
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
начальное значение Lapic ID также записывается в биты 31...24 регистра EBX инструкцией CPUID при EAX=1 |
|
||||||||||||||||||||||||||||||||||||||||||||
+0xD0 |
LDR (Local Destination) |
r/w |
|
ID |
|
|
|
MBZ |
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
LDR: |
|
|
содержит логический ID; используется совместно с DFR при режиме доставки «logical» |
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
+0xE0 |
DFR (Destination Format) |
r/w |
биты 31-28: model flat 1111/cluster 0000; |
27-0: MBZ. flat: побитовое И логического ID; cluster: 4 бита кластер, 4-маска |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0x30 |
LAPIC VERSION |
r/o |
биты 31:24: MBZ; 23:16: MAX LVT; 15-8: MBZ; 7-0: Version |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||
+0xB0 |
EOI |
|
|
w/o |
любая запись (обычно 0) обозначает End-Of-Interrupt (для ExtINT EOI надо посылать в PIC, а не LAPIC) |
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0xF0 |
SPURIOUS |
|
r/w |
биты 31-10: MBZ; 9: FocusProcessorChecking; 8: Soft.APICEN; |
7-0: Spurious Vector |
(при этом ISR[n]==0 и EOI не нужен) |
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0x80 |
TPR (Task Priority) |
r/w |
|
31 ... 8 |
7 ... 4 |
|
3 ... 0 |
|
|
|
|
TPR: приоритет «задачи», т. е. приоритет процессора, когда он не занят обработкой прерываний; |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0x90 |
APR (Arbitration Priority) |
r/o |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PPR: текущий приоритет процессора (либо прерывания, либо TPR); |
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||
|
MBZ |
|
Priority |
|
Priority Subclass |
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
APR: используется для доставки процессору с наименьшим приоритетом |
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0xA0 |
PPR (Processor Priority) |
r/o |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
+0x320 |
LVT[0] Timer (Local Vector Table) |
|
|
Все LVT регистры имеют сходный формат: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Timer: 0=однократный 1=периодический (для LVT[0]) |
|
|||||||||||||||||||||||||||||||||||||||||||
+0x330 |
LVT[1] Thermal |
|
|
|
|
31 ... 18 |
17 |
16 |
|
15 |
|
|
14 |
13 |
|
12 |
|
11 |
|
|
10 ... 8 |
7 ... 0 |
|
|
|
|
|
|
|
|
|
|
|
MASK: 0=разрешено, 1=запрещено (masked) |
|
||||||||||||||||||||||||||||||||||
+0x340 |
LVT[2] Performance Monitor |
r/w |
|
MBZ |
|
|
Timer |
MASK |
TM |
|
IRR |
POL |
|
DS |
MBZ |
|
DM |
|
Vector |
|
|
|
|
|
|
|
|
|
|
TM (Triggered Mode): 0=фронтом, 1=уровнем (LINT) |
|
||||||||||||||||||||||||||||||||||||||
+0x350 |
LVT[3] LINT0 |
|
|
|
|
Биты DM (Delivery Mode) могут быть: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IRR (Remote IRR): r/o (только для LINT при TM=1) |
|
|||||||||||||||||||||||||||||||||||||||
+0x360 |
LVT[4] LINT1 |
|
|
|
|
000 |
|
|
001 |
|
|
|
|
|
|
|
|
010 |
|
|
|
011 |
|
|
|
100 |
101 |
|
|
110 |
|
|
|
|
111 |
|
POL (Polarity Mode): 0=высокий, 1=низкий (LINT) |
|
|||||||||||||||||||||||||||||||
|
|
ERROR |
см. также +0x280 ESR |
|
|
Fixed |
IPI Lowest Priority |
SMI |
Reserved |
|
|
NMI |
INIT |
IPI StartUP |
|
ExtINT |
|
DS: r/o 0=нет (idle), 1=ожидает обработки (pending) |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
+0x370 |
LVT[5] |
|
( |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+0x380 |
TICR (Timer Initial Count) |
r/w |
TDCR: |
|
|
|
|
|
|
|
|
|
|
|
|
|
Значение делителя частоты CPU в зависимости от d2 d1 d0: TICR и TCCR соответствуют |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
+0x390 |
TCCR (Timer Current Count) |
r/w |
|
31...4 |
3 |
|
2 |
|
|
|
|
1 0 |
|
|
|
000 |
|
001 |
|
010 |
|
|
011 |
|
100 |
|
101 |
|
110 |
|
|
111 |
|
|
|
|
|
|
|
начальному и текущему значению |
|
||||||||||||||||||||||||||||
+0x3E0 |
TDCR (Timer Divide Config.) |
r/w |
|
MBZ |
d2 |
MBZ |
|
d1 d0 |
|
|
2 |
|
|
|
|
4 |
|
8 |
|
|
16 |
|
32 |
|
|
64 |
|
128 |
|
|
1 |
|
|
|
|
|
|
|
|
регистра - счётчика делителя |
|
||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+0x300 |
ICRLOW (Interrupt Command Low) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Self: 00=Dest, 01=себе, 10=всем, 11=всем кроме себя |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
63...56 |
55...32 |
31...20 |
19 18 |
17 16 |
15 |
14 |
|
13 |
|
|
12 |
11 |
|
10...8 |
7...0 |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
+0x310 |
ICRHIGH (Interrupt Command High) |
|
Dest.ID |
MBZ |
|
MBZ |
|
Self |
|
MBZ |
TM |
D-A/A |
MBZ |
I/P |
P/L |
|
DM |
|
|
Vector |
D-A/A: r/o 0=de-assert, 1=assert; |
P/L: 0=физ., 1=лог. |
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+0x100 |
ISR[n] (In-Service) |
r/o |
4 набора по 8 штук 32-х битовых регистров; каждый набор - 256 бит, обозначающих вектора прерываний |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0x180 |
TMR[n] (Trigger Mode) |
r/o |
ISR – в обработке процессором; |
IRR – принятые к обработке, ноещё не обрабатываемые; TMR – для тех векторов, у |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+0x200 |
IRR[n] (Interrupt Request) |
r/o |
которых бит IRR не ноль, указывают способ, которым прерывание было активировано (0: фронт, 1: уровень) |
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Инициализация контроллера прерываний ввода-вывода (IO APIC)
Документация: "29056601 - Intel 82093AA IO APIC (82093AA I/O ADVANCED PRPROGRAMMABLE INTERRUPT CONTROLLER (IOAPIC))"
1)IOAPIC обычно отображается на адрес IOAPICBASE 0xFEC00000 (адрес может быть несколько изменен средствами северного моста);
2)IOZPIC представлен двумя регистрами: "селектор" (selector) по адресу IOAPICBASE и "окно" (window) по адресу IOAPICBASE+0x10;
3)При работе с IOAPIC в селектор записывается номер регистра IOAPIC, а из окна производится чтение или запись регистра;
4)Термин "Reserved", определяющий те или иные биты регистров IOAPIC обозначает не "MBZ", а то, что содержимое этих разрядов нельзя изменять, т.е. при необходимости изменить регистр надо сначала прочитать прежнее значение, потом только нужные биты обнулить или установить, а затем записать обратно.
Регистры IOAPIC:
0x00 |
ID |
r/w |
|
|
31... |
28 |
|
27 |
...24 |
23... |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Reserved |
|
ID |
|
Reserved |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
0x01 |
VER |
r/o |
|
|
31..24 |
|
|
23... |
16 |
15 |
... |
8 |
|
|
7... |
0 |
|
|
|
|
|
|
|
|
||||
|
|
Reserved |
Max. IRQ Lines |
Reserved |
|
Version |
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0x02 |
ARB |
r/o |
Arbitration ID |
|
31... |
28 |
|
27... |
24 |
23... |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Reserved |
|
ID |
|
Reserved |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
24 пары 32-х разрядных регистров образуют 24 записи, по 64 бита на описание каждого IRQ; порядок little-endian |
||||||||||||||||||||||||
0x10 0x3F REDTBL r/w... |
Redirection Table |
|
63... |
56 |
|
55... |
32 |
|
31..17 |
|
|
16 |
|
15 |
14 |
13 |
|
12 |
11 |
10... |
8 |
7... |
0 |
|
||||
|
Dest.ID |
Reserved |
Reserved |
MASK |
TM |
IRR |
POL |
DS |
P/L |
DM |
|
Vector |
командным ICRHIGH:ICRLOW и таблицей LVT) |
|||||||||||||||
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
Описание битовых полей схожи с регистрами LAPIC (64-х битовым |
|||||||||||||||||||||||
Note: здесь и выше для сокращения некоторые названия битовых полей изменены по сравнению с документацией:
P/L соответствует Destination Mode (DESTMOD) – выбор физического (physical) или логического (logical) адреса LAPIC'а
DM соответствует Delivery Mode (DELMOD)
DS соответствует Delivery Status (DELIVS)
TM соответствует Trigger Mode
POL соответствует Pin Polarity (INTPOL)
Типичное назначение полей Trigger Mode (TM) и Pin Polarity (POL) (если иное не оговорено для конкретного устройства):
IRQ0 ... IRQ15 |
возбуждение прерывания передним фронтом, т.е. TM=0 и POL=0 |
IRQ16 ... IRQ23 |
возбуждение прерывания низким уровнем, т.е. TM=1 и POL=1 |
Сегментная модель защищенных режимов i286...x64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SSSS |
|
|
: |
FFFFFFFFFFFFFFFF |
|
|||||||||||||||
Логический адрес |
|
0 |
Атрибуты дескриптора: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
15 |
0 31 |
|
|
55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(проверка смещения на пределы) |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
SSSS : OOOO OOOO |
G X L AVL предел 19..16 P DPL |
S |
|
тип |
|
|
База, |
|
Предел, |
DPL, Тип, Атрибуты |
|
|
|
CS |
|
|
|
|
(проверка прав доступа к сегменту) |
|
||||||||||||||||||||||
|
0 |
системный тип |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||
|
|
|
|
|
Типы системных сегментов: |
|
|
|
|
|
|
|
|
|
... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
||||||
(селектор) |
|
|
|
|
1 |
1 |
С |
R |
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
0 — старшие 64 бита |
1 |
0 |
ED |
W |
A |
|
База, Предел, DPL, Тип, Атрибуты |
|
|
|
|
GS |
|
|
|
|
|
|
|
база сегмента |
|
||||||||||||||||
Сегментное |
|
1,9 — доступный TSS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
преобразование |
2 — LDT |
|
|
|
|
|
|
* Серым цветом выделены игнорируемые в x64 атрибуты |
|
|
|
|
|
Линейный адрес |
|
|||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
3,11 — занятый TSS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
Линейный адрес |
|
|
|
4,12 — вентиль вызова |
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
... |
|
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
63 |
47 |
32 |
23 |
0 |
5 — вентиль задачи |
|
|
|
|
|
|
|
|
|
|
|
|
|
смещение дескриптора в таблице TI RPL |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
SSSS FFFF FFFF FFFF |
6,14 — вентиль прерывания |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Локальная таблица |
||||||
|
|
|
|
|
7,15 — вентиль ловушки |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
выбор |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
дескрипторов (LDT) |
|||||||
|
|
|
|
|
8 — запрещено |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
таблицы |
|
|
|
база |
GX предел |
PS |
|
||||||||
Страничное |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
ТИП |
база |
предел |
|
||||||||
|
Уровни привилегий запроса (RPL), |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31...24 |
L 19...16 |
DPL |
23...15...0 |
15...0 |
|
|||||||
преобразование |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... |
|
|
|
|||||||
|
|
|
|
|
дескриптора (DPL), ввода-вывода (IOPL) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
база |
GX предел |
PS |
ТИП |
база |
предел |
|
|||||
Физический адрес |
|
|
0 — высший (режим ядра ОС) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31...24 |
L 19...16 |
DPL |
23...15...0 |
15...0 |
|
||||
|
|
1 — обычно не используется |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
63 |
51 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
000F FFFF FFFF FFFF |
2 — обычно не используется |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Глобальная таблица |
||||||
|
4 PB |
|
|
|
3 — низший (режим приложений) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
База, |
|
Предел |
|
|
|
|
|
LDTR |
|
|
|
|
|
|
|
|
|
|
|
|
дескрипторов (GDT) |
|||||||
Если говорят, что «а» более привилегированный, чем «б», то это значит, что |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
47 |
31 |
|
15 |
0 |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
PL(а) < PL(б), т.е. «численно меньше» == «более привилегированный» |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
база |
GX предел |
PS |
ТИП |
база |
предел |
|
|||||||||||
Текущий уровень привилегий |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31...24 |
L 19...16 |
DPL |
... |
23...15...0 |
15...0 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
CPL := RPL(CS) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GDTR (база) |
|
(предел) |
|
|
|
|
|
|
база |
GX предел |
PS |
ТИП |
база |
предел |
|
||||||||||
«Согласованный» сегмент (бит «C» типа установлен) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31...24 |
L 19...16 |
DPL |
23...15...0 |
15...0 |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... |
|
|
|
||||||
для согласованного сегмента допускается CPL>=DPL(CS) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
база |
GX предел |
PS |
ТИП |
база |
предел |
|
||||||
иначе требуется, чтобы CPL==DPL(CS) |
|
|
|
|
|
|
|
|
|
|
База, |
Предел |
|
|
|
|
|
TR |
|
|
|
|
|
|
|
31...24 L 19...16 |
DPL |
... |
23...15...0 |
15...0 |
|
|||||||||||
Эффективный уровень привилегий |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
база |
GX предел |
PS |
ТИП |
база |
предел |
|
|||||||
EPL := max( CPL, RPL(цели) ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31...24 L 19...16 |
DPL |
23...15...0 |
15...0 |
|
||||||||
В общем случае требуется, чтобы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IDTR |
(база) |
|
(предел) |
|
|
|
|
|
|
|
|
|
|
|
Сегмент состояния |
|||||||||||
EPL <= DPL(цели) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пред. TSS |
ES |
EFLAGS |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
задачи (TSS) |
|
|||||||||||
Отдельные флаги атрибутов: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SS: ESP #0 |
CS |
E IP |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SS: ESP #1 |
SS |
E AX |
E SP |
база карты |
|||||||||
S — «системный» сегмент |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
RFLAGS |
|
|
|
EFLAGS |
|
FLAGS |
|
|
|
|
|
|
SS: ESP #2 |
DS |
E CX |
E BP |
битовая |
|
||||||||||||||
A — к сегменту было обращение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CR3 |
FS |
E DX |
E SI |
карта |
|
||||||||
R — право чтения сегмента кода |
|
|
|
|
|
31..22 |
|
21 |
20 |
19 18 |
17 |
16 |
15 |
14 |
13 12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
LDTR |
|
|
|
|
портов |
|
|||||||
|
|
|
|
|
|
|
GS |
E BX |
E DI |
i/o |
|
|||||||||||||||||||||||||||||||
W — право записи в сегмент данных |
|
|
|
|
|
|
0..0 |
|
ID |
VIP VIF AC |
VM |
RF |
0 |
NT |
IOPL |
OF |
DF |
IF |
TF |
SF |
ZF |
0 |
AF |
0 |
PF |
1 |
CF |
|
|
|
|
|
|
|
|
|
||||||
C — признак «согласованного» сегмента |
|
|
|
|
|
|
|
|
вложенная задача |
уровень привилегий i/o |
|
|
|
|
|
|
|
|
Таблица дескрипторов |
|
||||||||||||||||||||||
ED — сегмент данных, «расширяемый вниз» (стек) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
обработчиков прерываний (IDT) |
||||||||||
DPL — уровень привилегий дескриптора |
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
CR0 |
|
|
MSW |
|
|
|
|
|
|
|
смещение |
|
PS |
ТИП |
селектор |
смещение |
|
||||||||
P — сегмент присутствует в ОЗУ |
|
|
|
|
|
31 |
30 |
29 |
28 |
... |
19 18 |
17 |
16 |
15 |
|
... |
|
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
31...16 |
|
DPL |
15...0 |
15...0 |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... |
|
|
|
||||||||||||||||||||||||
X — 0:=16ти, 1:=32х разрядный сегмент («B» для данных, «D» для кода) |
PG |
CD |
NW |
|
... |
AM |
- |
WP |
- |
- |
- - |
- |
- |
NE |
ET |
TS |
EM |
MP |
PE |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
смещение |
|
PS |
|
селектор |
смещение |
|
||||||||||||||||||||||||||||||
G — бит гранулярности, 0:=1 байт, 1:=4K (1 страница) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ТИП |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
TS,EM,MP: поддержка FPU |
=1 защита разрешена |
31...16 |
|
DPL |
15...0 |
15...0 |
|
|||||||||||||||||||||||||
L — 1:=64х разрядные адреса (D должно быть 0; данные 32 бита) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
Общая структура дескриптора |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исключения 80386+ |
|||||||||||||||||||
|
63 62 61 60 59 58 57 56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
39 38 37 36 35 |
34 33 32 |
31 30 29 28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Int# тип |
описание |
|||||||||||||||||||
|
База сегмента 31…24 |
G |
X |
L |
AVL |
предел 19..16 |
P |
DPL |
|
|
|
тип |
|
|
База сегмента 23…16 |
|
|
|
|
База сегмента 15 … 0 |
|
|
|
|
|
|
|
|
Предел сегмента 15 … 0 |
|
|
|
|
|||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00 |
ошибка |
целочисленное деление на ноль |
||||||||||||||||||||||||||||||||||||||||||||||
Дескрипторы сегментов приложений |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
01 |
ловушка пошаговое выполнение |
||||||||||||||||||||||||
Дескриптор сегмента кода |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
02 |
- |
критические ошибка, резерв |
|||||||||||||||
63 62 61 60 59 58 57 56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
39 38 37 36 35 |
34 33 32 31 30 29 28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
03 |
ловушка прерывание отладчика (int 3) |
||||||||||||||||||||||||||||||||
|
База сегмента 31…24 |
G |
D |
L |
AVL |
предел 19..16 |
P |
DPL |
1 |
1 |
С |
R |
A |
|
База сегмента 23…16 |
|
|
|
|
База сегмента 15 … 0 |
|
|
|
|
|
|
|
|
Предел сегмента 15 … 0 |
|
|
|
|
|||||||||||||||||||||||||||||||||||||
Дескриптор сегмента данных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
04 |
ловушка обработка переполнения (into) |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
05 |
ошибка |
ошибка проверки границы |
|||||||||||||||||
63 62 61 60 59 58 57 56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
39 38 37 36 35 |
34 33 32 31 30 29 28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||||||||||||||||||||||
|
База сегмента 31…24 |
G |
B |
L |
AVL |
предел 19..16 |
P |
DPL |
1 |
0 |
ED |
W |
A |
База сегмента 23…16 |
|
|
|
|
База сегмента 15 … 0 |
|
|
|
|
|
|
|
|
Предел сегмента 15 … 0 |
|
|
|
|
|
|
(bound) |
|||||||||||||||||||||||||||||||||||
Дескрипторы системных сегментов |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
06 |
ошибка |
недопустимый код операции |
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
07 |
ошибка |
устройство недоступно (FPU при |
|||||||||||||||||||||||
Дескриптор TSS (№№1,9 — доступные TSS; №№3,11 — занятые TSS; в 64х разрядном режиме занимает две записи) |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
CR0.TS!=0) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 |
62 |
61 |
60 |
59 |
58 |
57 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
||||
|
База сегмента 31…24 |
G |
0 |
0 |
AVL |
предел 19..16 |
P |
DPL |
|
|
0/1 |
0 |
B |
1 |
|
База сегмента 23…16 |
|
|
|
|
База сегмента 15 … 0 |
|
|
|
|
|
|
|
|
Предел сегмента 15 … 0 |
|
|
|
|
08 |
авария |
двойная ошибка |
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
База сегмента 63 … 32 |
|
|
|
|
|
|
|
|
|
|
|
|
09 |
авария |
авария сопроцессора 386/387 |
|||||||||||||
Дескриптор LDT (№2; в 64х разрядном режиме занимает две записи) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0A |
ошибка |
недопустимый TSS |
|||||||||||||||||||||||||||||||||||||||
63 62 61 60 59 58 57 56 |
55 |
54 |
53 |
52 51 50 49 48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
39 38 37 36 35 34 33 32 31 30 29 28 |
27 26 25 24 23 22 21 20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0B |
ошибка |
сегмент отсутствует |
||||||||||||||||||||||||||||||||
|
База сегмента 31…24 |
0 |
0 |
0 |
AVL |
- - - 0 - - - |
P |
DPL |
|
0 |
0 |
0 |
1 |
0 |
|
База сегмента 23…16 |
|
|
|
|
База сегмента 15 … 0 |
|
|
|
|
|
|
|
|
Предел сегмента 15 … 0 |
|
|
|
|
0C |
ошибка |
ошибка в сегменте стека |
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
База сегмента 63 … 32 |
|
|
|
|
|
|
|
|
|
|
|
|
0D |
ошибка |
общий (неспецифичный) сбой |
|||||||||||||
|
Дескриптор вентиля прерывания или |
|
ловушки |
|
|
(№№6,14 — |
вентили прерывания; №№7,15 — вентили ловушки; |
|
|
|
|
|
|
|
защиты |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
в 64х разрядном режиме занимают две записи) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0E |
ошибка |
ошибка обращения к странице |
||||||||||||||||||||||||||
63 62 |
61 |
60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 |
44 |
43 |
42 |
41 |
40 |
|
39 |
38 |
37 |
36 |
35 |
34 33 32 31 30 29 28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0F |
- |
(резерв) |
|||||||||||||||||||||||||
|
|
|
|
Смещение цели 31 … 16 |
|
|
|
P |
DPL |
0 |
0/1 |
1 |
1 |
T |
|
- - - 0 - - - |
|
000/IST |
|
|
|
|
|
Селектор цели |
|
|
|
|
|
|
|
|
|
Смещение цели 15 … 0 |
|
|
|
|
10 |
ошибка |
ошибка операции FPU/MMX |
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
|
|
|
|
Смещение цели 63 … 32 |
|
|
|
|
|
|
|
|
|
|
|
11 |
ошибка |
сбой проверки выравнивания |
||||||||||||||||
Дескриптор вентиля вызова (№№4,12; в 64х разрядном режиме занимает две записи) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
адресов |
|||||||||||||||||||||||||||||||||||||||||||||||||
|
63 62 |
61 |
60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 |
|
44 |
43 |
42 |
41 |
40 |
|
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
12 |
авария |
сбой машинной проверки (ЦПУ |
|||||||||||||||||
|
|
|
|
Смещение цели 31 … 16 |
|
|
|
P |
DPL |
|
|
0/1 |
1 |
0 |
|
0 |
- - - 0 - - - |
Счетчик слов |
|
|
|
|
|
Селектор цели |
|
|
|
|
|
|
|
|
|
Смещение цели 15 … 0 |
|
|
|
|
|
|
или шины) |
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
|
|
|
|
|
|
Смещение цели 63 … 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
ошибка |
ошибка SIMD операции (SSE) |
|||||||||||||||||||||||
Дескриптор вентиля задачи (№5) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
- |
(резерв) |
|||||||||||||||||||
|
63 |
62 |
61 |
60 |
59 |
58 |
57 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
… |
... |
--»--»-- |
||
|
|
|
|
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
P |
DPL |
0 |
0 |
1 |
0 |
1 |
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
|
Селектор TSS |
|
|
|
|
|
|
|
|
|
|
|
- - - 0 - - - |
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1F |
- |
(резерв) |
||||||||||||||||||||||||||||
Примечания к форматам дескрипторов: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
- дескрипторы i80286 описывают сегменты с 24х разрядной базой и 16ти разрядным пределом. Дескриптор занимает 8 байт. В зависимости от причины возникновения |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- дескрипторы i80386+ описывают сегменты с 32х разрядным базовым адресом и 32х разрядным пределом. Для сегментов |
|
прерывания (инструкция INT, внешний |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
менее 1М размер задается в байтах, для сегментов от 1М до 4Г — в страницах по 4К. Дескриптор занимает 8 байт. |
|
|
|
|
сигнал, внутренняя причина) их делят на |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Примечания к типам системных дескрипторов: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ловушки, ошибки и аварии. |
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В случае ошибок, связанных со |
||||||||||||||||||||||||||||||
- тип 0 запрещен в IA-32; в x64 маркирует старшие 8 байт 16ти байтового дескриптора. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
- типы 1,3,4,6,7 обозначают 16ти разрядные дескрипторы i80286 (размер/смещение 16 бит, база 24 бита). |
|
|
|
|
|
|
|
|
|
|
срабатыванием защиты, в стек фрейма |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- типы 2,9,11,12,14.15 обозначают в IA-32 8ми байтовые дескрипторы, а в x64 — 16ти байтовые. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
обработчика прерывания дополнительно |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
- согласованные сегменты — способ выполнения привилегированного кода с низким уровнем привилегий; вентили — |
|
|
|
|
включается код ошибки. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
механизм смены уровня привилегий. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
По формату код ошибки похож на |
||||||||||||||||||||||
Примечания к архитектуре x64: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
обычный селектор, три младших бита |
|||||||||||||||||||
- сегментные регистры SS, DS, ES не используются. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
которого имеют смысл: TI, IDT (отличие |
|||||||||||||||||||||||||||||||
- для сегмента кода используются только атрибуты. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
селектора шлюза таблицы прерываний от |
||||||||||||||||||||||||||||||
- используется FLAT модель, в которой сегменты CS,SS,DS и ES имеют предел 264 и базовый адрес 0. |
|
|
|
|
|
|
|
|
|
|
|
дескриптора GDT/LDT) и EXT (признак |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- FS и GS используют только 32х битовую базу; предел не проверяется; 64х битовая база невидимой части регистра |
|
|
|
|
ошибки, вызванной внешним |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
проецируется на MSR регистры IA32_FS_BASE, IA32_GS_BASE, IA32_KERNEL_GS_BASE. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
оборудованием). |
|||||||||||||||||||||||||||||||||||||||||||||||||||
- загрузка сегментных регистров считывает дескриптор как в IA-32, но невидимая часть регистров не используется. |
|
|
|
|
|
Извлечение из стека кода ошибки до IRET |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- дескрипторы x64 описывают системные сегменты с 64х разрядной базой; дескриптор длиной 16 байт (128 бит) занимает — обязанность обработчика. две последовательных записи в таблице; старшая часть находится в следующей записи с типом 0.
