Профессиональное
программирование
на ассемблере x64
с расширениями
AVX, AVX2 и AVX-512
Modern X86 Assembly
Language Programming
Covers x86 64-bit, AVX, AVX2,
and AVX-512
Second Edition
Daniel Kusswurm
Профессиональное
программирование
на ассемблере x64
с расширениями
AVX, AVX2 и AVX-512
Даниэль Куссвюрм
Москва, 2021
УДК 004.4
ББК 32.972
K94
К94
Даниэль Куссвюрм
Профессиональное программирование на ассемблере x64 с расшире
ниями AVX, AVX2 и AVX-512 / пер. с анг. В. С. Яценкова. – М.: ДМК Пресс,
2021. – 628 с.: ил.
ISBN 978-5-97060-928-6
В книге рассматривается программирование для 64-разрядной архитектуры
x86 и использование расширенного набора векторных команд (AVX). Изучив
этот материал, вы сможете кодировать быстродействующие функции и алго
ритмы с использованием 64-разрядного языка ассемблера x86 и расширений
набора команд AVX, AVX2 и AVX-512.
Примеры исходного кода разработаны с использованием Visual Studio C++
и MASM; для их запуска рекомендуется ПК на базе x86 с 64-разрядной ОС
Windows 10 и процессором, поддерживающим AVX.
Предполагается, что читатели имеют опыт программирования на языках
высокого уровня и базовые знания C++.
Книга предназначена разработчикам, которые хотят научиться писать код
с использованием языка ассемблера x64.
УДК 004.4
ББК 32.972
Modern X86 Assembly Language Programming; Covers x86 64-bit, AVX, AVX2, and
AVX-512 by Daniel Kusswurm, edition: 2
This edition has been translated and published under licence from APress Media, LLC, part
of Springer Nature.
APress Media, LLC, part of Springer Nature takes no responsibility and shall not be made
liable for the accuracy of the translation.
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без письменного раз
решения владельцев авторских прав.
ISBN (анг.) 978-1-4842-4062-5
ISBN (рус.) 978-5-97060-928-6
Оглавление
Предисловие от издательства. ..................................................................11
Об авторе............................................................................................................12
О техническом редакторе. ..........................................................................13
Благодарности..................................................................................................14
Вступление.........................................................................................................15
О чем эта книга................................................................................................16
Глава 1. Архитектура ядра x86-64...........................................................19
1.1. Исторический обзор...................................................................................19
1.2. Типы данных...............................................................................................22
1.2.1. Основные типы данных.......................................................................22
1.2.2. Числовые типы данных.......................................................................24
1.2.3. Типы данных SIMD..............................................................................24
1.2.4. Прочие типы данных...........................................................................26
1.3. Внутренняя архитектура............................................................................26
1.3.1. Регистры общего назначения.............................................................27
1.3.2. Регистр RFLAGS ...................................................................................29
1.3.3. Указатель команд.................................................................................31
1.3.4. Операнды команд................................................................................32
1.3.5. Адресация памяти...............................................................................33
1.4. Различия между программированием x86-64 и x86-32...........................35
1.4.1. Недопустимые команды......................................................................37
1.4.2. Устаревшие команды ..........................................................................38
1.5. Обзор набора команд..................................................................................38
1.6. Заключение.................................................................................................41
Глава 2. Программирование ядра x86-64. Часть 1...........................42
2.1. Простая целочисленная арифметика........................................................42
2.1.1. Сложение и вычитание........................................................................43
2.1.2. Логические операции..........................................................................46
2.1.3. Операции сдвига..................................................................................49
2.2. Расширенная целочисленная арифметика...............................................53
2.2.1. Умножение и деление..........................................................................53
2.2.2. Вычисления с использованием смешанных типов...........................57
6
Оглавление
2.3. Команды адресации памяти и состояния.................................................63
2.3.1. Режимы адресации памяти.................................................................63
2.3.2. Условные команды ..............................................................................68
2.4. Заключение.................................................................................................72
Глава 3. Программирование ядра x86-64. Часть 2 ..........................74
3.1. Массивы.......................................................................................................74
3.1.1. Одномерные массивы..........................................................................74
3.1.2. Двумерные массивы............................................................................81
3.3. Строки..........................................................................................................94
3.3.1. Подсчет символов................................................................................94
3.3.2. Конкатенация строк.............................................................................97
3.3.3. Сравнение массивов..........................................................................103
3.3.4. Обращение массива...........................................................................106
3.4.
Последние комментарии
1 день 9 часов назад
1 день 10 часов назад
1 день 11 часов назад
1 день 22 часов назад
1 день 22 часов назад
1 день 23 часов назад