Глава 1. Введение в архитектуру Intel x86-64 и ассемблер NASM
Архитектура Intel x86-64
Представление данных, биты и байты
Регистры процессора
Первая программа на Linux
Первая программа на Windows
Первая программа на MacOS
Глава 2. Основы ассемблера NASM
Инструкция MOV. Копирование данных
Сложение и вычитание
Переходы. Инструкция jmp
Флаги состояния и условные переходы
Сравнение. Инструкция CMP
Инструкции условного копирования
Инструкция цикла loop и jrcxz
Умножение. Инструкции mul и imul
Деление. Инструкции div и idiv
Логические операции
Сдвиг и вращение
Глава 3. Работа с данными и памятью
Определение переменных и типы данных. Секция .data
Косвенная адресация
Получение текущего адреса
Константы
Символы
Строки
Порядок байтов. Big-endian и little-endian
Структуры
Стек
Копирование и сохранение в строку
Сравнение строк
Поиск в строке
Глава 4. Функции
Определение и вызов функций
Сохранение регистров и переменных при вызове функций
Параметры функции
Результат функции
Фрейм стека и локальные переменные
Локальные метки
Организация программы
Глава 5. Системные вызовы
Системные вызовы в Linux и инструкция syscall
Глава 6. Взаимодействие кода ассемблера и C/C++
Вызов функций C/C++ из ассемблера на Linux
Вызов функций C/C++ из ассемблера на Windows
Вызов функции ассемблера из C/C++
Передача структур между ассемблером и C/C++
Работа с файлами
Глава 7. SIMD
Числа с плавающей точкой
Расширения SSE и AVX/AVX2
Копирование данных с помощью инструкций SIMD
Преобразование чисел с плавающей точкой в целые числа и обратно
Арифметика чисел с плавающей точкой
Сравнение чисел с плавающей точкой
Операции сдвига SSE/AVX
Логические операции над векторами
Сложение с помощью инструкций SSE/AVX
Вычитание с помощью инструкций SSE/AVX
Умножение с помощью инструкций SSE/AVX
Математические инструкции SSE/AVX
Сравнение целых чисел в SSE/AVX
Арифметические операции с векторами чисел с плавающей точкой
Сохранение состояния регистров SSE/AVX
Глава 8. Препроцессор
Директивы препроцессора
Условные конструкции препроцессора
Макросы
Глава 9. Разделяемые библиотеки в Linux
Создание разделяемых библиотек для Linux
Код, независимый от позиции
Подключение встроенных библиотек Linux
Переопределение общих библиотек
Программная загрузка библиотек
Глава 10. Дополнительные статьи
Стек, аргументы программы и переменные окружения в Linux
Манипуляции с консолью и курсором
Реализация конечных автоматов