Программирование на ассемблере Х64 От начального уровня до профессионального использования AVX_переплет....1
Основы программирования на ассемблере_11_05_.pdf....1
Об авторе....12
О техническом рецензенте....13
Предисловие от издательства....14
Введение....15
Прежде чем начать....17
Глава 1....19
Самая первая программа....19
Редактирование, ассемблирование, связывание и запуск (или отладка)....20
Структура программы на ассемблере....25
Раздел section .data....25
Раздел section .bss....26
Раздел section .txt....27
Резюме....29
Глава 2....30
Двоичные и шестнадцатеричные числа и регистры....30
Краткий вводный курс по двоичным числам....30
Целые числа....31
Числа с плавающей точкой....32
Краткий вводный курс по регистрам....32
Регистры общего назначения....33
Регистр счетчика команд (rip)....34
Регистр флагов....34
Регистры xmm и ymm....35
Резюме....35
Глава 3....36
Анализ программ с помощью отладчика: GDB....36
Начало отладки....36
Двигаемся дальше....42
Некоторые дополнительные команды отладчика GDB....44
Немного улучшенная версия программы hello, world....45
Резюме....47
Глава 4....48
Следующая программа: Alive and Kicking....48
Анализ программы alive....49
Вывод....53
Резюме....56
Глава 5....57
Ассемблер основан на логике....57
Логический оператор NOT....57
Логический оператор OR....57
Логический оператор XOR....58
Логический оператор AND....58
Резюме....59
Глава 6....60
Отладчик Data Display Debugger....60
Работа с отладчиком DDD....60
Резюме....63
Глава 7....64
Переходы и циклы....64
Установка SimpleASM....64
Использование SASM....64
Резюме....72
Глава 8....73
Память....73
Обследование памяти....73
Резюме....80
Глава 9....81
Целочисленная арифметика....81
Основы использования целочисленной арифметики....81
Изучение арифметических инструкций....84
Резюме....87
Глава 10....88
Стек....88
Изучение работы стека....88
Наблюдение за стеком....91
Резюме....93
Глава 11....94
Арифметика с плавающей точкой....94
Сравнение чисел с обычной и двойной точностью....94
Кодирование с применением чисел с плавающей точкой....96
Резюме....98
Глава 12....99
Функции....99
Создание простой функции....99
Еще о функциях....100
Резюме....102
Глава 13....103
Выравнивание стека и фрейм стека....103
Выравнивание стека....103
Более подробно о фреймах стека....105
Резюме....106
Глава 14....107
Внешние функции....107
Создание и связывание функций....107
Расширенная версия makefile....110
Резюме....111
Глава 15....112
Соглашения о вызовах функций....112
Аргументы функций....113
Схема стека....116
Сохранение регистров....118
Резюме....120
Глава 16....121
Операции с битами....121
Основные положения....121
Арифметика....126
Резюме....129
Глава 17....130
Работа с битами....130
Другие способы изменения битов....130
Переменная bitflags....132
Резюме....133
Глава 18....134
Макрокоманды....134
Создание макроса....134
Использование objdump....136
Резюме....137
Глава 19....138
Ввод и вывод в консоли....138
Использование средств ввода/вывода....138
Обработка переполнений....140
Резюме....143
Глава 20....144
Файловый ввод/вывод....144
Использование системных вызовов....144
Обработка файла....145
Условное ассемблирование....152
Инструкции для обработки файлов....152
Резюме....153
Глава 21....154
Командная строка....154
Доступ к аргументам командной строки....154
Отладка программы с аргументами командной строки....155
Резюме....157
Глава 22....158
Использование ассемблера в коде C....158
Создание файла исходного кода на языке C....158
Создание файла исходного кода на ассемблере....160
Резюме....163
Глава 23....164
Встроенный ассемблер....164
Простой встроенный ассемблерный код....164
Расширенный встроенный ассемблерный код....166
Резюме....169
Глава 24....170
Строки....170
Обработка строк....170
Сравнение и сканирование строк....174
Резюме....178
Глава 25....179
Предъявите ваш идентификатор....179
Использование инструкции cpuid....179
Использование инструкции test....181
Резюме....183
Глава 26....184
SIMD....184
Скалярные данные и упакованные данные....184
Невыровненные и выровненные данные....186
Резюме....187
Глава 27....188
Резюме....196
Работа с битами регистра mxcsr....189
Анализ программы....194
Глава 28....197
Выравнивание для SSE....197
Пример без выравнивания....197
Пример с выравниванием....200
Резюме....203
Глава 29....204
SSE-инструкции для работы с упакованными целыми числами....204
SSE-инструкции для работы с целыми числами....204
Анализ исходного кода....206
Резюме....206
Глава 30....207
Обработка строк средствами SSE....207
Управляющий байт imm8....208
Использование управляющего байта imm8....209
Биты 0 и 1....209
Биты 2 и 3....209
Биты 4 и 5....210
Бит 6....211
Зарезервированный бит 7....211
Флаги....211
Резюме....212
Глава 31....213
Поиск символа в строке....213
Определение длины строки....213
Поиск в строках....216
Резюме....219
Глава 32....220
Сравнение строк....220
Строки с неявно заданной длиной....220
Строки с явно заданной длиной....222
Резюме....226
Глава 33....227
Перемешиваем данные....227
Основные принципы операций перемешивания....227
Перемешивание в случайном порядке....231
Перемешивание в обратном порядке....233
Перемешивание вращением....234
Перемешивание байтов....234
Резюме....236
Глава 34....237
SSE-инструкции: маски строк....237
Поиск символов....237
Поиск символов из заданного диапазона....243
Поиск подстроки....246
Резюме....249
Глава 35....250
AVX....250
Проверка поддержки AVX....250
Пример программы с использованием AVX....252
Резюме....256
Глава 36....257
Операции с матрицами с использованием AVX....257
Пример исходного кода для операций с матрицами....257
Вывод матрицы: printm4x4....264
Умножение матриц: multi4x4....265
Обращение матрицы: inverse4x4....268
Теорема Гамильтона–Кэли....268
Алгоритм Фаддеева–Леверье....268
Исходный код....269
Резюме....273
Глава 37....274
Транспонирование матриц....274
Пример исходного кода для транспонирования матриц....274
Версия с использованием неупакованных данных....277
Версия с применением перемешивания....282
Резюме....285
Глава 38....286
Оптимизация производительности....286
Производительность вычисления транспонированной матрицы....286
Производительность вычисления следа матрицы....292
Резюме....297
Глава 39....298
Приветствуем мир Windows....298
Начинаем изучение....298
Пишем код в Windows....300
Отладка....302
Системные вызовы....302
Резюме....303
Глава 40....304
Использование Windows API....304
Вывод в консоли....304
Создание окон Windows....307
Резюме....308
Глава 41....309
Функции в Windows....309
Использование более четырех аргументов функции....309
Обработка значений с плавающей точкой....314
Резюме....316
Глава 42....317
Функции с переменным числом аргументов....317
Функции с переменным числом аргументов в Windows....317
Обработка смешанных значений....319
Резюме....320
Глава 43....321
Работа с файлами в Windows....321
Резюме....324
Послесловие. Что дальше?....325
Предметный указатель....326
Изучив это руководство, вы сможете писать и читать исходный код на ассемблере и применять ассемблер совместно с языками программирования высокого уровня, используя необходимые для этого инструменты. В книге главным образом рассматривается программирование в системе Linux, поскольку это самая простая и удобная платформа для изучения языка ассемблера. В заключительных главах дается общее представление об использовании ассемблера в ОС Windows. Ассемблерный код представлен в виде полноценных завершенных программ, поэтому вы можете протестировать их на своем компьютере, изменять их, экспериментировать с ними и даже «сломать» их.Книга адресована читателям, имеющим базовые знания в области программирования на языках высокого уровня.