Программа и содержание

Сайт: Сайт автора

Пакет курсов \"База 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 для оптимизации и ускорения расчетов в критически важных местах.