База Ассемблера NASM Linux x86-64
О чём курс
О программе
Пакет курсов «База NASM» представляет собой комплексную обучающую программу, посвящённую изучению языка ассемблера NASM в операционной системе Linux на базе 64-битной архитектуры x86-64. Обучение ориентировано на последовательное освоение низкоуровневой разработки: от базовых инструкций процессора и принципов работы памяти до продвинутой оптимизации вычислений и взаимодействия с современными операционными системами.
Программа позволяет понять внутренние механизмы функционирования программного обеспечения, этапы выполнения инструкций и принципы взаимодействия с аппаратными компонентами компьютера. В рамках пакета теоретические материалы подкрепляются разбором демонстрационных примеров, отладкой кода и выполнением практических задач.
Состав пакета
В комплект включены три самостоятельных курса:
- «Базовый ассемблер» знакомит слушателей с архитектурой Linux x86-64, основными регистрами и базовыми конструкциями языка. Разбираются модели данных и выполнения, арифметические и логические операции, управление потоком выполнения с помощью переходов и циклов, а также стек, вызовы функций и системные вызовы. В качестве закрепления материала предусмотрено создание учебных мини-проектов.
- «Углублённый ассемблер» посвящён продвинутым концепциям разработки. В этой части рассматриваются инструменты исследования и отладки исполняемых файлов, механизмы взаимодействия с операционной системой и динамической памятью, организация многофайловой сборки проектов, интеграция ассемблерного кода с языками высокого уровня, а также тонкая настройка производительности под особенности микроархитектуры современных процессоров.
- «SIMD» выступает специализированным расширением, направленным на освоение векторизации вычислений и ускорение работы с большими массивами данных. В модуле изучаются векторные регистры, инструкции расширений SSE, AVX и AVX2, работа с упакованными целыми числами и числами с плавающей точкой, перестановки данных, а также специфика эффективного применения векторных вычислений.
Чему вы научитесь
Слушатели курса осваивают следующие практические навыки:
- написание собственных программ на ассемблере с применением модульного и функционального подходов;
- эффективное управление оперативной памятью, работа со структурами, массивами и системным стеком;
- проведение комплексной отладки программ с использованием отладчика GDB, утилит strace и objdump;
- реализация прямого взаимодействия с ядром операционной системы через системные вызовы;
- связывание низкоуровневого ассемблерного кода с проектами на C, C++, Python и Java через механизмы FFI;
- низкоуровневая оптимизация кода с учётом работы процессорного кэша, конвейера инструкций и предсказания переходов;
- применение векторных инструкций для создания высокопроизводительного кода, рассчитанного на работу с большими данными.
Для кого предназначен курс
Программа разработана для всех желающих освоить ассемблер и получить практический опыт низкоуровневого программирования. Специальных предварительных знаний от слушателей не требуется, однако базовое знание языков C или C++ будет плюсом при изучении взаимодействия компонентов и соглашений вызовов.
Об авторе
Автор программы — Виталий Богодухов (Vitaliy Bogodukhov). Специалист окончил обучение по направлению «Бэкенд разработчик C++» и работает по специальности с 2020 года. В профессиональной деятельности автор занимается оптимизацией критически важных участков систем, осуществляя перенос программных решений с языков Python, Go и других на C++, NASM и Fortran для ускорения вычислений.
Программа обучения
- Ассемблер (NASM Linux x86-64) — Базовый уровень
- Как все работает
- Информация по прохождению
- Запуск на Linux
- Этапы работы программы
- Модель данных
- Модель выполнения
- Базовый уровень
- Копирование с MOV
- Арифметика
- Флаги процессора
- Сравнение с CMP
- Безусловный переход с JMP
- Условные переходы
- Циклы
- Логические операции
- Сдвиги
- Работа с данными и памятью
- Память
- Переменные
- Массивы и адресация
- Структуры
- Получение адреса с LEA
- Строки
- Endianness
- Введение в стек
- Функциональное программирование
- Переход + возврат
- Что происходит при вызове
- Стек вызовов
- Параметры
- Возврат значения. Часть 1
- Локальные переменные
- Возврат значения. Часть 2
- Сохранение регистров
- Взаимодействие с системой
- Что такое syscall
- SYSCALL
- Ввод / вывод
- Препроцессор
- Константы
- Подключение файлов
- Макросы
- Условные конструкции
- Итоги
- Реализация алгоритмов
- Мини-проект "Калькулятор"
- Мини-проект "Конвертер чисел"
- Мини-проект "Сортировщик файлов"
- Список пройденного
- Что дальше?
- Ассемблер (NASM Linux x86-64) — Углублённый уровень
- Отладка и инструменты
- GDB для ассемблера: запуск, пошаговое выполнение
- Просмотр регистров, памяти и стека в GDB
- Точки останова и watchpoints
- objdump: анатомия бинарного файла
- strace: наблюдение за системными вызовами
- Шпаргалки по отладке
- Системные вызовы и работа с ОС
- Работа с файлами
- Работа с каталогами
- Динамическая память
- Аргументы командной строки
- Коды возврата и обработка ошибок
- Взаимодействие с C и другими языками
- Вызов функций стандартной библиотеки C из ассемблера
- Передача структур и массивов через ABI
- Написание функций на ассемблере для вызова из C и C++
- Inline assembly в GCC и Clang
- Создание статических и динамических библиотек
- FFI с Python через ctypes
- FFI с Java через JNA и JNI
- Организация проектов
- Многофайловая сборка
- Основы Makefile
- Makefile: шаблоны, автоматические переменные и функции
- Makefile: многорежимная сборка
- Линковка с внешними библиотеками
- Сложные макросы и условная компиляция
- Автоматическая генерация кода препроцессором
- Память и данные
- Виртуальная память
- Карта памяти процесса
- Выравнивание структур и padding
- Pointer arithmetic в больших массивах
- Отображение файлов в память
- Написание простого аллокатора памяти
- Оптимизация и производительность
- Конвейер процессора и суперскалярное выполнение
- Как работает кэш: L1, L2, L3 и cache line
- Выравнивание данных под кэш
- Минимизация обращений к памяти
- Оптимизация циклов: развёртка и предвычисления
- Предсказание переходов
- Устранение ложных зависимостей между инструкциями
- Измерение и профилирование: rdtsc и perf
- Итоги
- Практическая задача Ⅰ
- Практическая задача ⅠⅠ
- Практическая задача ⅠⅠⅠ
- Список пройденного
- Что дальше?
- SIMD (Ассемблер NASM Linux x86-64)
- Основы
- Что такое SIMD
- Регистры xmm и ymm
- Выравнивание данных и кэш
- Семейства расширений
- Сборка и запуск
- Числа с плавающей точкой
- Загрузка и сохранение
- Скалярная арифметика
- Упакованная арифметика
- Горизонтальные операции
- Сравнение
- Преобразование типов
- Математические инструкции
- Управление точностью
- Целые числа
- Загрузка, сохранение и арифметика
- Умножение
- Сдвиги
- Логические операции
- Сравнение и маскирование
- Сбор и разбор данных
- Перестановки и компоновка
- Shuffle
- Unpack
- Blend
- Переход на AVX и AVX2
- Трёхоперандный синтаксис
- 256-битные операции
- Broadcast
- Смешивании SSE и AVX
- Сохранение и восстановление регистров
- Итоги
- Когда SIMD не помогает
- Мини-проект
- Список пройденного
Теги курса
Другие материалы автора 3
ВБ Виталий Богодухов Все материалыОтзывов пока нет. Будьте первым!
Этот курс сейчас в процессе организации складчины. Нажмите кнопку «Записаться» и ожидайте старта — вам придёт уведомление. Когда складчина стартует, в карточке курса будет указан актуальный взнос. Текущая цена пока в процессе формирования и может отличаться от финальной.
Да, мы стремимся, чтобы финальный взнос был не больше ≈10% от оригинальной цены курса. Чем больше участников записывается в складчину, тем ниже выходит взнос для каждого.
Нажмите кнопку «Записаться» и авторизуйтесь на сайте через email (через ту же почту, которую будете использовать для входа). В личном кабинете вас будут ждать инструкции, как пригласить других участников — чем больше людей записалось, тем быстрее стартует складчина и тем ниже взнос. Как только складчина готова к приобретению, вам придёт уведомление.