Базовые механизмы программирования микропроцессоров в процессе миграции программ от архитектуры IA-32 к архитектуре Intel 64
Базовые механизмы программирования микропроцессоров Intel x86: Миграция от IA-32 к Intel 64
В учебнике Д.О. Левицкого рассматриваются ключевые аспекты программирования микропроцессоров Intel x86, акцентируя внимание на процессе миграции программного обеспечения с архитектуры IA-32 на Intel 64. Книга основана на оригинальной технической документации Intel и предназначена для студентов и аспирантов, изучающих программирование и применение микропроцессоров x86, а также для тех, кто интересуется миграцией программ с 32-битной на 64-битную архитектуру.
Основные понятия и терминология
В первой главе вводятся предварительные сведения, терминология и обозначения, необходимые для понимания материала. Рассматриваются условные обозначения, порядок битов и байтов, особенности шестнадцатеричных и двоичных чисел, а также пояснения сокращений и терминов.
Базовая среда выполнения
Вторая глава посвящена базовой среде выполнения для архитектур Intel 64 и IA-32. Рассматриваются режимы работы процессора, включая защищенный режим, режим реальной адресации и режим управления системой, а также подрежимы IA-32e: режим совместимости и 64-битный режим. Подробно описывается организация памяти, включая модели памяти IA-32, пейджинг и виртуальную память, а также особенности организации памяти в 64-битном режиме. Описываются основные регистры выполнения программ, включая регистры общего назначения, сегментные регистры, регистр EFLAGS, регистр EIP и их особенности в 64-битном режиме. Рассматриваются атрибуты размера операнда и размера адреса, а также способы адресации операндов.
Типы данных
Третья глава посвящена типам данных, поддерживаемым архитектурами Intel 64 и IA-32. Рассматриваются основные типы данных, такие как байты, слова, двойные слова, четверные слова и двойные четверные слова. Подробно описываются типы числовых данных, включая целые числа со знаком и без знака, а также типы данных с плавающей запятой. Рассматриваются типы данных указателей, битовые поля, строковые типы данных, упакованные SIMD-данные, целые числа BCD и упакованные BCD. Отдельное внимание уделяется вещественным числам и форматам с плавающей запятой, включая систему действительных чисел, формат с плавающей запятой, кодирование вещественных чисел и не-чисел, округление и обзор исключений с плавающей запятой.
Вызовы процедур, прерывания и исключения
Четвертая глава посвящена вызовам процедур, прерываниям и исключениям. Рассматриваются типы вызовов процедур, стеки, настройка стека, выравнивание стека, информация связывания процедур, поведение стека в 64-битном режиме, а также теневые стеки. Подробно описываются вызовы процедур с использованием инструкций CALL и RET, передача параметров, сохранение информации о состоянии процедуры, вызовы на другие уровни привилегий и функции переходов в 64-битном режиме. Рассматриваются прерывания и исключения, операции вызова и возврата для процедур прерывания или обработки исключений, а также обработка прерываний и исключений в режиме реальной адресации.
Программирование с инструкциями общего назначения
Пятая глава посвящена программированию с использованием инструкций общего назначения. Рассматривается программная среда для GP инструкций, среда программирования GP инструкций в 64-битном режиме, а также резюме GP инструкций, включая инструкции передачи данных, двоичной арифметики, десятичной арифметики, логические, сдвига и ротации, битовые и байтовые инструкции, инструкции передачи управления, строковые инструкции, инструкции ввода/вывода, инструкции ENTER и LEAVE, инструкции управления флагами, сегментно-регистровые инструкции, прочие инструкции и инструкции генерации случайных чисел.
Программирование с FPU x87
Шестая глава посвящена программированию с использованием FPU x87. Рассматривается среда выполнения FPU x87, включая регистры данных FPU x87, регистр состояния FPU x87, слово управления FPU x87, слово тегов FPU x87, указатели инструкций и данных, код операции последней инструкции, сохранение состояния FPU x87, типы данных FPU x87, набор инструкций FPU x87 и обработка исключений с плавающей запятой FPU x87.
- ВО - Бакалавриат
- 11.03.04: Электроника и наноэлектроника
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
Д.О. ЛЕВИЦКИЙ БАЗОВЫЕ МЕХАНИЗМЫ ПРОГРАММИРОВАНИЯ МИКРОПРОЦЕССОРОВ В ПРОЦЕССЕ МИГРАЦИИ ПРОГРАММ ОТ АРХИТЕКТУРЫ IA-32 К АРХИТЕКТУРЕ INTEL 64 УЧЕБНИК Москва ИНФРА-М 2025
Издание не подлежит
ФЗ
маркировке в соответствии
№ 436-ФЗ
УДК 004.42(075.8)
ББК 32.973я73
с п. 1 ч. 2 ст. 1
Л37
Левицкий Д.О.
Л37 Базовые механизмы программирования микропроцессоров в процессе
миграции программ от архитектуры IA-32 к архитектуре Intel 64 : учебник /
Д.О. Левицкий. — Москва : ИНФРА-М, 2025. — 269 с.
ISBN 978-5-16-113310-1 (online)
В учебнике описаны базовые механизмы программирования, использующиеся при миграции программного обеспечения от архитектуры IA-32
к архитектуре Intel 64. Написан на основе оригинальной технической
документации фирмы Intel. Является начальной частью описания архитектур
Intel 64 и IA-32.
Рассматриваются базовая среда выполнения и все типы данных в этих
архитектурах, особенности вызовов процедур, прерываний и исключений,
а также особенности программирования как с инструкциями общего назначения,
так и с инструкциями блока FPU x87, характерными для архитектур Intel 64 и IA-32.
Для студентов и аспирантов, изучающих программирование и применение
микропроцессоров фирмы Intel типа x86, а также миграцию программного
обеспечения с 32 на 64 разряда.
УДК 004.42(075.8)
ББК 32.973я73
ISBN 978-5-16-113310-1 (online)
© Левицкий Д.О., 2025
Оглавление
Предисловие
......................................................................................................................... 9
Глава 1. Предварительные сведения, терминология и обозначения. ........................... 10
1.1. Предварительные сведения ................................................................................... 10
1.2. Условные обозначения
........................................................................................... 11
1.2.1. Выделения по тексту ....................................................................................... 11
1.2.2. Порядок битов и байтов
.................................................................................. 12
1.2.3. Зарезервированные биты и совместимость программного обеспечения
... 13
1.2.4. Шестнадцатеричные и двоичные числа ........................................................ 13
1.2.5. Сегментная адресация
..................................................................................... 14
1.2.6. Синтаксис для значений CPUID .................................................................... 14
1.2.7. Исключения
...................................................................................................... 15
1.3. Пояснения встречающихся сокращений и терминов.
......................................... 15
1.4. Обзор пособия
......................................................................................................... 18
Глава 2. Базовая среда выполнения для INTEL 64 и IA-32 ........................................... 20
2.1. Режимы работы
....................................................................................................... 20
2.1.1. Архитектура Intel® 64
..................................................................................... 21
2.2. Обзор базовой среды исполнения
......................................................................... 22
2.2.1. Среда выполнения в 64-битном режиме ....................................................... 28
2.3. Организация памяти
............................................................................................... 30
2.3.1. Модели памяти IA-32
...................................................................................... 31
2.3.2. Пейджинг и виртуальная память.................................................................... 33
2.3.3. Организация памяти в 64-битном режиме .................................................... 33
2.3.4. Режимы работы и модель памяти .................................................................. 34
2.3.5. 32-битные и 16-битные адреса и размеры операндов .................................. 35
2.3.6. Расширенная физическая адресация в защищенном режиме...................... 35
2.3.7. Расчет адреса в 64-битном режиме ................................................................ 36
2.3.7.1. Каноническая адресация
.......................................................................... 37
2.4. Основные регистры выполнения программ
......................................................... 38
2.4.1. Регистры общего назначения ......................................................................... 39
2.4.1.1. Регистры общего назначения в 64-битном режиме .............................. 41
2.4.2. Сегментные регистры...................................................................................... 43
2.4.2.1. Сегментные регистры в 64-битном режиме
........................................... 45
2.4.3. Регистр EFLAGS
.............................................................................................. 46
2.4.3.1. Флаги состояния ....................................................................................... 48
2.4.3.2. Флаг DF ..................................................................................................... 49
2.4.3.3. Системные флаги и поле IOPL
................................................................ 50
2.4.3.4. Регистр RFLAGS в 64-битном режиме
................................................... 51
2.5. Указатель инструкции
............................................................................................ 52
2.5.1. Указатель инструкций в 64-битном режиме ................................................. 52
2.6. Атрибуты размера операнда и размера адреса .................................................... 52
2.6.1. Размер операнда и размер адреса в 64-битном режиме ............................... 54
2.7. Адресация операнда ............................................................................................... 55
2.7.1. Непосредственные операнды ......................................................................... 55
3
2.7.2. Регистровые операнды .................................................................................... 56
2.7.2.1. Регистровые операнды в 64-битном режиме ......................................... 57
2.7.3. Операнды памяти............................................................................................. 57
2.7.3.1. Операнды памяти в 64-битном режиме
.................................................. 58
2.7.4. Указание селектора сегмента ......................................................................... 58
2.7.4.1. Сегментация в 64-битном режиме .......................................................... 60
2.7.5. Спецификация смещения
................................................................................ 60
2.7.5.1. Указание смещения в 64-битном режиме .............................................. 63
2.7.6. Режимы адресации ассемблера и компилятора ............................................ 63
2.7.7. Адресация портов ввода/вывода .................................................................... 63
Вопросы для самопроверки .......................................................................................... 64
Глава 3. Типы данных архитектур INTEL-64 и IA-32 ................................................... 65
3.1. Основные типы данных ......................................................................................... 65
3.1.1. Выравнивание слов, двойных слов, четверных слов и двойных четверных
слов ............................................................................................................................. 66
3.2. Типы числовых данных ......................................................................................... 67
3.2.1. Целые числа ..................................................................................................... 67
3.2.1.1. Целые числа без знака
.............................................................................. 69
3.2.1.2. Целые числа со знаком
............................................................................. 69
3.2.2. Типы данных с плавающей запятой .............................................................. 70
3.3. Типы данных — указатели .................................................................................... 72
3.3.1. Типы данных указатели в 64-битном режиме .............................................. 73
3.4. Тип данных битовое поле ...................................................................................... 74
3.5. Строковые типы данных ........................................................................................ 75
3.6. Типы упакованных SIMD-данных ........................................................................ 75
3.6.1. 64-битные упакованные типы данных SIMD
................................................ 75
3.6.2. 128-битные упакованные типы данных SIMD.............................................. 76
3.7. Целые числа BCD и упакованные BCD ............................................................... 77
3.8. Вещественные числа и форматы с плавающей запятой ..................................... 79
3.8.1. Система действительных чисел ..................................................................... 79
3.8.2. Формат с плавающей запятой ........................................................................ 80
3.8.2.1. Нормализованные числа .......................................................................... 82
3.8.2.2. Смещенный показатель степени ............................................................. 82
3.8.3. Кодирование вещественных чисел и не-чисел ............................................. 82
3.8.3.1. Нули со знаком ......................................................................................... 84
3.8.3.2. Нормализованные и денормализованные конечные числа .................. 84
3.8.3.3. Бесконечности со знаком
......................................................................... 86
3.8.3.4. NaN
............................................................................................................. 86
3.8.3.5. Работа с SNaN и QNaN ............................................................................ 87
3.8.3.6. Использование SNaN и QNaN в приложениях ...................................... 89
3.8.3.7. Неопределенность QNaN с плавающей запятой ................................... 90
3.8.3.8. Операции с плавающей запятой половинной точности ....................... 91
3.8.4. Округление
....................................................................................................... 91
3.8.4.1. Поля управления округлением (RC)
....................................................... 93
3.8.4.2. Усечение с инструкциями преобразования SSE и SSE2
....................... 93
3.9. Обзор исключений с плавающей запятой ............................................................ 93
4
3.9.1. Условия исключений операций с плавающей запятой ................................ 96
3.9.1.1. Исключение недопустимой операции (#I) ............................................. 96
3.9.1.2. Исключение денормализованного операнда (#D) ................................. 96
3.9.1.3. Исключение деления на ноль (#Z) .......................................................... 97
3.9.1.4. Исключение числового переполнения (#O)
........................................... 98
3.9.1.5. Исключение числового антипереполнения (#U) ................................... 99
3.9.1.6. Исключение неточного результата (точности) (#P) ............................ 101
3.9.2. Приоритет исключений с плавающей запятой ........................................... 102
3.9.3. Типичные действия обработчика исключений с плавающей запятой ..... 103
Вопросы для самопроверки ........................................................................................ 104
Глава 4. Вызовы процедур, прерывания и исключения............................................... 106
4.1. Типы вызова процедуры ...................................................................................... 106
4.2. Стеки
...................................................................................................................... 106
4.2.1. Настройка стека ............................................................................................. 108
4.2.2. Выравнивание стека ...................................................................................... 108
4.2.3. Атрибуты размера адреса для доступа к стеку
........................................... 109
4.2.4. Информация связывания процедур ............................................................. 109
4.2.4.1. Базовый указатель кадра стека
.............................................................. 110
4.2.4.2. Указатель инструкции возврата. ........................................................... 110
4.2.5. Поведение стека в 64-битном режиме ......................................................... 111
4.3. Теневые стеки ....................................................................................................... 111
4.4. Вызов процедур с использованием инструкций CALL и RET ........................ 112
4.4.1. Выполнение ближних CALL и RET ............................................................ 113
4.4.2. Выполнение дальних CALL и RET
.............................................................. 113
4.4.3. Передача параметров .................................................................................... 116
4.4.3.1. Передача параметров через регистры общего назначения
................. 116
4.4.3.2. Передача параметров в стеке
................................................................. 116
4.4.3.3. Передача параметров в списке аргументов.......................................... 117
4.4.4. Сохранение информации о состоянии процедуры
..................................... 117
4.4.5. Вызовы на другие уровни привилегий ........................................................ 118
4.4.6. Выполнение CALL и RET между уровнями привилегий
.......................... 119
4.4.7. Функции переходов в 64-битном режиме ................................................... 123
4.5. Прерывания и исключения .................................................................................. 125
4.5.1. Операция вызова и возврата для процедур прерывания или обработки
исключений .............................................................................................................. 127
4.5.2. Вызовы задач обработки прерываний или исключений
............................ 134
4.5.3. Обработка прерываний и исключений в режиме реальной адресации .... 134
4.5.4. Инструкции INT n, INTO, INT3, INT1 и BOUND ...................................... 135
4.5.5. Обработка исключений с плавающей запятой ........................................... 136
4.5.6. Поведение прерываний и исключений в 64-битном режиме .................... 137
4.6. Вызовы процедур для языков с блочной структурой ....................................... 137
4.6.1. Инструкция ENTER
....................................................................................... 138
4.6.2. Инструкция LEAVE ...................................................................................... 146
Вопросы для самопроверки ........................................................................................ 146
Глава 5. Программирование с инструкциями общего назначения ............................. 147
5.1. Программная среда для GP инструкций............................................................. 147
5
5.2. Среда программирования GP инструкций в 64-битном режиме ..................... 148
5.3. Резюме GP инструкций ........................................................................................ 149
5.3.1. Инструкции передачи данных
...................................................................... 150
5.3.1.1. Общие инструкции перемещения данных ........................................... 150
5.3.1.2. Инструкции обмена ................................................................................ 153
5.3.1.3. Инструкции обмена в 64-битном режиме ............................................ 155
5.3.1.4. Инструкции стекового манипулирования
............................................ 155
5.3.1.5. Инструкции стекового манипулирования в 64-битном режиме ........ 157
5.3.1.6. Инструкции по преобразованию типов ................................................ 158
5.3.1.7. Инструкции преобразования типов в 64-битном режиме .................. 159
5.3.2. Двоичные арифметические инструкции...................................................... 159
5.3.2.1. Инструкции сложения и вычитания ..................................................... 159
5.3.2.2. Инструкции инкремента и декремента
................................................. 160
5.3.2.3. Инструкции инкремента и декремента в 64-битном режиме
............. 160
5.3.2.4. Инструкции сравнения и изменения знака .......................................... 160
5.3.2.5. Инструкции умножения и деления ....................................................... 161
5.3.3. Десятичные арифметические инструкции .................................................. 161
5.3.3.1. Инструкции корректировки упакованных BCD .................................. 162
5.3.3.2. Инструкции корректировки распакованных BCD .............................. 162
5.3.4. Десятичные арифметические инструкции в 64-битном режиме .............. 164
5.3.5. Логические инструкции ................................................................................ 164
5.3.6. Инструкции сдвига и ротации
...................................................................... 164
5.3.6.1. Инструкции сдвига ................................................................................. 164
5.3.6.2. Инструкции двойного сдвига ................................................................ 166
5.3.6.3. Инструкции ротации .............................................................................. 167
5.3.7. Битовые и байтовые инструкции ................................................................. 169
5.3.7.1. Инструкции проверки и модификации битов
...................................... 169
5.3.7.2. Инструкции сканирования битов
.......................................................... 169
5.3.7.3. Инструкции установки байта по условию ........................................... 170
5.3.7.4. Инструкция тестирования
...................................................................... 170
5.3.8. Инструкции передачи управления
............................................................... 170
5.3.8.1. Инструкции безусловной передачи ...................................................... 171
5.3.8.2. Инструкции условного перехода .......................................................... 173
5.3.8.3. Инструкции передачи управления в 64-битном режиме .................... 176
5.3.8.4. Инструкции программного прерывания .............................................. 177
5.3.8.5. Инструкции программного прерывания в 64-битном режиме и режиме
совместимости ......................................................................................................... 178
5.3.9. Строковые инструкции ................................................................................. 178
5.3.9.1. Строковые инструкции .......................................................................... 178
5.3.9.2. Повторяющиеся строковые операции .................................................. 180
5.3.9.3. Быстрая строковая операция ................................................................. 181
5.3.9.4. Строковые операции в 64-битном режиме
........................................... 182
5.3.10. Инструкции ввода/вывода .......................................................................... 183
5.3.11. Инструкции ввода-вывода в 64-битном режиме ...................................... 183
5.3.12. Инструкции ENTER и LEAVE ................................................................... 184
5.3.13. Инструкции управления флагами (EFLAG).............................................. 184
6
5.3.13.1. Инструкции флагов переноса и направления .................................... 184
5.3.13.2. Инструкции передачи EFLAGS .......................................................... 185
5.3.13.3. Инструкции флага прерывания ........................................................... 186
5.3.14. Инструкции управления флагами (RFLAG) в 64-битном режиме ......... 186
5.3.15. Сегментно-регистровые инструкции
......................................................... 186
5.3.15.1. Инструкции загрузки и сохранения сегментных регистров
............. 187
5.3.15.2. Инструкции дальней передачи управления ....................................... 187
5.3.15.3. Инструкции программного прерывания ............................................ 188
5.3.15.4. Инструкции загрузки дальнего указателя .......................................... 188
5.3.16. Прочие инструкции ..................................................................................... 188
5.3.16.1. Инструкция вычисления адреса .......................................................... 188
5.3.16.2. Инструкции поиска в таблице ............................................................. 189
5.3.16.3. Инструкция идентификации процессора ........................................... 189
5.3.16.4. Инструкция NOP и неопределенная инструкция .............................. 189
5.3.17. Инструкции генерации случайных чисел ................................................. 189
5.3.17.1. RDRAND ............................................................................................... 190
5.3.17.2. RDSEED
................................................................................................. 191
Вопросы для самопроверки ........................................................................................ 192
Глава 6. Программирование с FPU x87 ......................................................................... 194
6.1. Среда выполнения FPU x87
................................................................................. 194
6.1.1. FPU x87 в 64-битном режиме и режиме совместимости ........................... 195
6.1.2. Регистры данных FPU x87 ............................................................................ 195
6.1.2.1. Передача параметров с помощью стека регистров FPU x87
.............. 198
6.1.3. Регистр состояния FPU x87 .......................................................................... 199
6.1.3.1. Указатель вершины стека (TOP) ........................................................... 200
6.1.3.2. Флаги кодов условий
.............................................................................. 200
6.1.3.3. Флаг ошибки стека ................................................................................. 201
6.1.4. Ветвление и условные перемещения по кодам условий ........................... 202
6.1.5. Слово управления FPU x87
........................................................................... 203
6.1.5.1. Биты маски исключения для вычислений с плавающей запятой
FPU x87 .................................................................................................................... 204
6.1.5.2. Поле управления точностью
.................................................................. 204
6.1.5.3. Поле управления округлением
.............................................................. 205
6.1.6. Флаг управления бесконечностью ............................................................... 205
6.1.7. Слово тегов FPU x87 ..................................................................................... 206
6.1.8. Указатели инструкций и данных (операндов) в FPU x87
.......................... 207
6.1.9. Код операции последней инструкции ......................................................... 210
6.1.9.1. Подрежим совместимости fopcode ....................................................... 210
6.1.10. Сохранение состояния FPU x87 с помощью FSTENV/FNSTENV и
FSAVE/FNSAVE
...................................................................................................... 211
6.1.11. Сохранение состояния FPU x87 с помощью FXSAVE ............................ 213
6.2. Типы данных FPU x87
.......................................................................................... 213
6.2.1. Неопределенности ......................................................................................... 215
6.2.2. Неподдерживаемые кодировки двойной расширенной точности с
плавающей запятой и псевдоденормалы
............................................................... 216
6.3. Набор ИНСТРУКЦИЙ FPU x87
.......................................................................... 218
7
6.3.1. Escape-инструкции (ESC) ............................................................................. 218
6.3.2. Операнды инструкций FPU x87 ................................................................... 218
6.3.3. Инструкции передачи данных
...................................................................... 218
6.3.4. Инструкции загрузки констант .................................................................... 221
6.3.5. Основные арифметические инструкции
...................................................... 221
6.3.6. Инструкции сравнения и классификации ................................................... 223
6.3.6.1. Ветвление по кодам условия FPU x87
.................................................. 226
6.3.7. Тригонометрические инструкции ................................................................ 227
6.3.8. Аппроксимация Пи
........................................................................................ 228
6.3.9. Логарифмы, возведение в степень и масштабирование ............................ 229
6.3.10. Точность трансцендентных инструкций ................................................... 229
6.3.11. Инструкции управления FPU x87 .............................................................. 232
6.3.12. Инструкции с ожиданием и без ожидания
................................................ 234
6.3.13. Неподдерживаемые инструкции FPU x87
................................................. 234
6.4. Обработка исключений с плавающей запятой FPU x87 ................................... 235
6.4.1. Арифметические и неарифметические инструкции
................................... 236
6.5. Условия исключений с плавающей запятой в FPU x87
.................................... 237
6.5.1. Исключение недопустимой операции ......................................................... 237
6.5.1.1. Исключение переполнения или антипереполнения стека (#IS)
......... 238
6.5.1.2. Исключение недопустимого арифметического операнда (#IA) ........ 239
6.5.2. Исключение денормализованного операнда (#D) ...................................... 241
6.5.3. Исключение деления на ноль (#Z) ............................................................... 242
6.5.4. Исключение числового переполнения (#O)
................................................ 243
6.5.5. Исключение числового антипереполнения (#U) ........................................ 244
6.5.6. Исключение неточного результата (точность) (#P) ................................... 246
6.6. Синхронизация исключений FPU x87 ................................................................ 248
6.7. Обработка исключений FPU x87 в программном обеспечении
....................... 250
6.7.1. Основной режим ............................................................................................ 250
6.7.2. Подрежим совместимости с MS-DOS* ....................................................... 251
6.7.3. Обработка исключений FPU x87 в программном обеспечении
................ 252
Вопросы для самопроверки ........................................................................................ 253
Список литературы
.......................................................................................................... 255
Приложение А. Префикс REX
........................................................................................ 257
A.1. Формат инструкций для архитектур Intel 64 и IA-32
....................................... 257
A.2. Префиксы REX .................................................................................................... 259
A.2.1. Кодирование
.................................................................................................. 260
A.2.2. Дополнительная информация о полях префикса REX
.............................. 260
A.2.3. Сдвиг
.............................................................................................................. 264
A.2.4. MOV с прямым смещением памяти
............................................................ 264
A.2.5. Непосредственные операнды ...................................................................... 264
A.2.6. RIP-относительная адресация
...................................................................... 265
A.2.7. Размер 64-битного операнда по умолчанию .............................................. 266
A.3. Дополнительные кодировки регистров управления и отладки
....................... 267
A.4. Другие префиксы, выполняющие ту же работу, что и префикс REX. ........... 267
Приложение В. Коды состояний условных инструкций ............................................. 268
8
Предисловие Многие поколения универсальных микропроцессоры фирмы Intel типа x86 всегда широко использовались в нашей стране, а поскольку, с одной стороны, после февраля 2022 года производство прославленных отечественных процессоров «Эльбрус» и «Байкал» стало невозможным, а с другой стороны, в РФ все суперкомпьютеры делаются только на основе зарубежных процессоров, то изучение архитектур процессоров Intel x86 становится важнейшей прикладной задачей. 9
Глава 1. Предварительные сведения, терминология и обозначения. 1.1. Предварительные сведения Это руководство составлено на основе сделанных автором переводов следующей оригинальной технической документации фирмы Intel: • The Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (order numbers 253665). • The Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volumes 2A, 2B, 2C & 2D: Instruction Set Reference (order numbers 253666, 253667, 326018 and 334569). • The Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volumes 3A, 3B, 3C & 3D: System Programming Guide (order numbers 253668, 253669, 326019 and 332831). • The Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 4: Model-Specific Registers (order number 335592). • The Intel® 64 and IA-32 Architectures Optimization Reference Manual (order number 335308). В настоящее время доступ к этой оригинальной документации с территории РФ закрыт, поэтому пособие особенно полезно для студентов. Упомянутая документация содержит полное описание всех механизмов архитектур IA-32 и Intel 64, но данное руководство содержит только ту часть информации, которая относится к базовым механизмам программирования. Часть базовых механизмов публиковалась и ранее, но данное руководство содержит информацию, строго согласованную с последними версиями технической документации, относящуюся главным образом к самым последним процессорам Intel 64 и IA-32, включая: процессоры семейства P6; процессоры семейств Pentium®; процессоры семейств Intel® Xeon®, разнообразных серий; процессоры семейств Intel® Atom®, разнообразных серий; процессоры семейств Intel® Xeon®, разнообразных серий в том числе поко 10