Базовые механизмы программирования микропроцессоров в процессе миграции программ от архитектуры IA-32 к архитектуре Intel 64
Покупка
Новинка
Основная коллекция
Тематика:
Программирование и алгоритмизация
Издательство:
НИЦ ИНФРА-М
Автор:
Левицкий Дмитрий Орестович
Год издания: 2025
Кол-во страниц: 269
Дополнительно
Вид издания:
Учебник
Уровень образования:
Профессиональное образование
ISBN-онлайн: 978-5-16-113310-1
Артикул: 847265.01.99
В учебнике описаны базовые механизмы программирования, использую-щиеся при миграции программного обеспечения от архитектуры IA-32 к архитектуре Intel 64. Написан на основе оригинальной технической документации фирмы Intel. Является начальной частью описания архитектур Intel 64 и IA-32.
Рассматриваются базовая среда выполнения и все типы данных в этих архитектурах, особенности вызовов процедур, прерываний и исключений, а также особенности программирования как с инструкциями общего назначения, так и с инструкциями блока FPU x87, характерными для архитектур Intel 64 и IA-32.
Для студентов и аспирантов, изучающих программирование и применение микропроцессоров фирмы Intel типа x86, а также миграцию программного обеспечения с 32 на 64 разряда.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 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