Содержание пакета (3 курса)
1. SIMD (Ассемблер NASM Linux x86-64) 5.00
Введение
4 урока
1.
Введение
↗
2.
Выравнивание данных и кэш
↗
3.
Перестановки и компановка данных
↗
4.
Контрольные вопросы
↗
Основы
5 уроков
1.
Что такое SIMD
↗
2.
Регистры xmm и ymm
↗
3.
Выравнивание данных и кэш
↗
4.
Семейства расширений
↗
5.
Сборка и запуск
↗
Числа с плавающей точкой
8 уроков
1.
Копирование данных
↗
2.
Арифметика
↗
3.
Горизонтальные операции
↗
4.
Сравнение
↗
5.
Преобразование типов
↗
6.
Математические инструкции
↗
7.
Управление точностью
↗
8.
Контрольные вопросы
↗
Числа с плавающей точкой
8 уроков
1.
Загрузка и сохранение
↗
2.
Скалярная арифметика
↗
3.
Упакованная арифметика
↗
4.
Горизонтальные операции
↗
5.
Сравнение
↗
6.
Преобразование типов
↗
7.
Математические инструкции
↗
8.
Управление точностью
↗
Целые числа
6 уроков
1.
Арифметика
↗
2.
Сдвиги
↗
3.
Логические операции
↗
4.
Сравнение и маскирование
↗
5.
Сбор/разбор
↗
6.
Контрольные вопросы
↗
Целые числа
6 уроков
1.
Загрузка, сохранение и арифметика
↗
2.
Умножение
↗
3.
Сдвиги
↗
4.
Логические операции
↗
5.
Сравнение и маскирование
↗
6.
Сбор и разбор данных
↗
Расширенные возможности
6 уроков
1.
Векторизация циклов
↗
2.
Сохранение и восстановление состояния регистров
↗
3.
Практические паттерны оптимизации
↗
4.
Отладка и профилирование SIMD-кода
↗
5.
Интеграция с C/C++
↗
6.
Контрольные вопросы
↗
Перестановки и компоновка
3 урока
1.
Shuffle
↗
2.
Unpack
↗
3.
Blend
↗
Переход на AVX и AVX2
5 уроков
1.
Трёхоперандный синтаксис
↗
2.
256-битные операции
↗
3.
Broadcast
↗
4.
Смешивании SSE и AVX
↗
5.
Сохранение и восстановление регистров
↗
Итоговый экзамен
2 урока
1.
Вопросы
↗
2.
Задачи
↗
Обратная связь
1 урок
1.
Обратная связь
↗
Интеграция и отладка
4 урока
1.
Интеграция с C и C++
↗
2.
Отладка SIMD в GDB
↗
3.
Профилирование
↗
4.
Когда SIMD не помогает
↗
Итоги
3 урока
1.
Финальные задания
↗
2.
Мини-проект
↗
3.
Список пройденного
↗
2. Ассемблер (NASM Linux x86-64) — Базовый уровень 4.91
Введение
3 урока
1.
Архитектура
↗
2.
Регистры системы
↗
3.
Запуск на Linux
↗
Базовый уровень
11 уроков
1.
Копирование с помощью MOV
↗
2.
Сложение и вычитание
↗
3.
Переходы JMP
↗
4.
Флаги состояния
↗
5.
Сравнение с помощью CMP
↗
6.
Условное копирование
↗
7.
Циклы: LOOP & JRCXZ
↗
8.
Умножение и деление
↗
9.
Логические операции
↗
10.
Сдвиги и вращение
↗
11.
Контрольные вопросы
↗
Работа с данными и памятью
10 уроков
1.
Переменные и типы данных
↗
2.
Косвенная адресация
↗
3.
Получение адреса
↗
4.
Константы
↗
5.
Символы и строки
↗
6.
Порядок байтов
↗
7.
Структуры
↗
8.
Стек
↗
9.
Работа со строками
↗
10.
Контрольные вопросы
↗
Функциональное программирование
7 уроков
1.
Определение и вызов
↗
2.
Сохранение и вызов переменных
↗
3.
Параметры
↗
4.
Результат работы функции
↗
5.
Стек и локальные переменные
↗
6.
Локальные метки
↗
7.
Контрольные вопросы
↗
Системные вызовы
5 уроков
1.
SYSCALL
↗
2.
Прерывания
↗
3.
IDT
↗
4.
Контрольные вопросы
↗
5.
Контрольные задачи
↗
Препроцессор
5 уроков
1.
Директивы
↗
2.
Условные конструкции
↗
3.
Макросы
↗
4.
Контрольные вопросы
↗
5.
Контрольные задачи
↗
Итоговый тест
2 урока
1.
Вопросы
↗
2.
Задачи
↗
Мини-проекты
3 урока
1.
Калькулятор
↗
2.
Конвертер чисел
↗
3.
"Сортировщик" файлов
↗
Обратная связь
1 урок
1.
Обратная связь
↗
3. Ассемблер (NASM Linux x86-64) — Углублённый уровень 5.00
Предварительное тестирование
2 урока
1.
Вопросы
↗
2.
Задачи
↗
Отладка и инструменты
6 уроков
1.
GDB для ассемблера: запуск, пошаговое выполнение
↗
2.
Просмотр регистров, памяти и стека в GDB
↗
3.
Точки останова и watchpoints
↗
4.
objdump: анатомия бинарного файла
↗
5.
strace: наблюдение за системными вызовами
↗
6.
Шпаргалки по отладке
↗
Оптимизация и производительность
6 уроков
1.
Кэш-память и выравнивание данных
↗
2.
Минимизация обращений к памяти через регистры
↗
3.
Оптимизация циклов: развёртка, предвычисления
↗
4.
Измерение производительности (rdtsc, perf)
↗
5.
Branch prediction и способы уменьшить ошибки предсказания
↗
6.
Контрольные вопросы
↗
Системные вызовы и работа с ОС
5 уроков
1.
Работа с файлами
↗
2.
Работа с каталогами
↗
3.
Динамическая память
↗
4.
Аргументы командной строки
↗
5.
Коды возврата и обработка ошибок
↗
Работа с памятью и данными
6 уроков
1.
Организация кучи и стека в Linux
↗
2.
Выравнивание структур и padding
↗
3.
Косвенная адресация и pointer arithmetic в больших массивах
↗
4.
Thread-local storage (TLS)
↗
5.
Prefetch-инструкции и управление кешем
↗
6.
Контрольные вопросы
↗
Взаимодействие с C и другими языками
7 уроков
1.
Вызов функций стандартной библиотеки C из ассемблера
↗
2.
Передача структур и массивов через ABI
↗
3.
Написание функций на ассемблере для вызова из C и C++
↗
4.
Inline assembly в GCC и Clang
↗
5.
Создание статических и динамических библиотек
↗
6.
FFI с Python через ctypes
↗
7.
FFI с Java через JNA и JNI
↗
Расширенные инструкции процессора
6 уроков
1.
Битовые операции
↗
2.
Работа с битовыми шаблонами
↗
3.
CRC32 и аппаратные инструкции для проверки целостности
↗
4.
Новые инструкции для ускоренной математики
↗
5.
Проверка с CPUID
↗
6.
Контрольные вопросы
↗
Организация проектов
7 уроков
1.
Многофайловая сборка
↗
2.
Основы Makefile
↗
3.
Makefile: шаблоны, автоматические переменные и функции
↗
4.
Makefile: многорежимная сборка
↗
5.
Линковка с внешними библиотеками
↗
6.
Сложные макросы и условная компиляция
↗
7.
Автоматическая генерация кода препроцессором
↗
Системные вызовы
5 уроков
1.
Работа с динамической памятью
↗
2.
Работа с файлами
↗
3.
Управление процессами
↗
4.
Сигналы и их обработка
↗
5.
Контрольные вопросы
↗
Память и данные
6 уроков
1.
Виртуальная память
↗
2.
Карта памяти процесса
↗
3.
Выравнивание структур и padding
↗
4.
Pointer arithmetic в больших массивах
↗
5.
Отображение файлов в память
↗
6.
Написание простого аллокатора памяти
↗
Взаимодействие с другими языками
6 уроков
1.
ABI SysV
↗
2.
Написание функций на ассемблере для вызова из C и C++
↗
3.
Inline assembly в C/C++ (GCC/Clang)
↗
4.
Создание статических и динамических библиотек
↗
5.
FFI с Python
↗
6.
Контрольные вопросы
↗
Оптимизация и производительность
8 уроков
1.
Конвейер процессора и суперскалярное выполнение
↗
2.
Как работает кэш: L1, L2, L3 и cache line
↗
3.
Выравнивание данных под кэш
↗
4.
Минимизация обращений к памяти
↗
5.
Оптимизация циклов: развёртка и предвычисления
↗
6.
Предсказание переходов (branch prediction)
↗
7.
Устранение ложных зависимостей между инструкциями
↗
8.
Измерение и профилирование: rdtsc и perf
↗
Расширенные возможности
6 уроков
1.
Сложные макросы и условная компиляция
↗
2.
Автоматическая генерация кода
↗
3.
Работа с include-файлами
↗
4.
Организация больших проектов: модульность и Makefile
↗
5.
Линковка с внешними библиотеками
↗
6.
Контрольные вопросы
↗
Итоговый тест
4 урока
1.
Вопросы
↗
2.
Практическая задача Ⅰ
↗
3.
Практическая задача ⅠⅠ
↗
4.
Практическая задача ⅠⅠⅠ
↗
Обратная связь
1 урок
1.
Обратная связь
↗