EGround
Редактор
- Сообщения
- 66.105
- Реакции
- 285
Складчина: База Ассемблера (NASM Linux x86-64) [Stepik] [Виталий Богодухов]
Пакет курсов "База NASM" познакомит Вас со всем необходимым для начала работы с языком ассемблера NASM и позволит развиваться в уже более специфичном направлении.
Чему вы научитесь:
- Писать собственные программы на Ассемблере
- Эффективно работать с данными и памятью
- Оптимизировать код
- Писать функциональные и модульные программы
- Отлаживать программы
- Писать высокопроизводительный код
Пакет курсов включает в себя следующее:
- Базовый ассемблер — в нем Вы познакомитесь с основными регистрами и конструкциями, начнете писать свои первые простые программы. Так же будет много практики, теории и примеров.
- Углублённый ассемблер — здесь Вы узнаете о более продвинутых концепциях, таких как работа с памятью на низком уровне, оптимизация кода, использование макросов и подпрограмм, а также о взаимодействии с аппаратными компонентами. Курс включает практические задания, где Вы будете писать более сложные программы, отлаживать их и анализировать эффективность работы кода.
- SIMD — это дополнение, которое поможет Вам писать выскопроизводительные и оптимизированные программы, которые могут работать на больших данных.
Для кого эта программа и начальные требования:
- Для всех желающих понять ассемблер и просто получить интересный опыт.
- Никаких особых знаний не потребуется, но будет плюсом знание С/С++.
Что вы получаете:
- Интересный опыт
- Навык написания программ на асссемблере
В комплект входят 3 курса.
Программа:
1. Ассемблер (NASM Linux x86-64) — Базовый уровень
Как все работает
- Информация по прохождению
- Запуск на Linux
- Этапы работы программы
- Модель данных
- Модель выполнения
Базовый уровень
- Копирование с MOV
- Арифметика
- Флаги процессора
- Сравнение с CMP
- Безусловный переход с JMP
- Условные переходы
- Циклы
- Логические операции
- Сдвиги
Работа с данными и памятью
- Память
- Переменные
- Массивы и адресация
- Структуры
- Получение адреса с LEA
- Строки
- Endianness
- Введение в стек
Функциональное программирование
- Переход + возврат
- Что происходит при вызове
- Стек вызовов
- Параметры
- Возврат значения. Часть 1
- Локальные переменные
- Возврат значения. Часть 2
- Сохранение регистров
Взаимодействие с системой
- Что такое syscall
- SYSCALL
- Ввод / вывод
Препроцессор
- Константы
- Подключение файлов
- Макросы
- Условные конструкции
Итоги
- Реализация алгоритмов
- Мини-проект "Калькулятор"
- Мини-проект "Конвертер чисел"
- Мини-проект "Сортировщик файлов"
- Список пройденного
- Что дальше?
2. Ассемблер (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
Итоги
- Практическая задача Ⅰ
- Практическая задача ⅠⅠ
- Практическая задача ⅠⅠⅠ
- Список пройденного
- Что дальше?
3. SIMD (Ассемблер NASM Linux x86-64)
Основы
- Что такое SIMD
- Регистры xmm и ymm
- Выравнивание данных и кэш
- Семейства расширений
- Сборка и запуск
Числа с плавающей точкой
- Загрузка и сохранение
- Скалярная арифметика
- Упакованная арифметика
- Горизонтальные операции
- Сравнение
- Преобразование типов
- Математические инструкции
- Управление точностью
Целые числа
- Загрузка, сохранение и арифметика
- Умножение
- Сдвиги
- Логические операции
- Сравнение и маскирование
Сбор и разбор данных
- Перестановки и компоновка
- Shuffle
- Unpack
- Blend
Переход на AVX и AVX2
- Трёхоперандный синтаксис
- 256-битные операции
- Broadcast
- Смешивании SSE и AVX
- Сохранение и восстановление регистров
Итоги
- Когда SIMD не помогает
- Мини-проект
- Список пройденного
Автор Виталий Богодухов (Vitaliy Bogodukhov)
- Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы больше и с лучшей идиотоустойчивостью, и вселенной, которая пытается создавать больших и лучших идиотов. Пока вселенная побеждает. — Rick Cook
- Закончил обучение по направлению "Бэкенд разработчик С++" и успешно работаю c 2020 года.
- В данный момент занимаюсь переносом программ с Python, Go и других языков на C++, NASM и Fortran для оптимизации и ускорения расчетов в критически важных местах.
Цена 3590 руб.
Материал «База Ассемблера (NASM Linux x86-64) [Stepik] [Виталий Богодухов]», возможно, скоро появится на EGROUND.
Воспользуйтесь поиском, может быть, он уже опубликован.