Содержание курса
1. Предварительное тестирование
2 урока
36
20
3м
4
Закрытый
1.1
Вопросы
↗
21
12
2м 33с
2
Закрытый
1.2
Задачи
↗
15
8
2м 44с
2
2. Отладка и инструменты
6 уроков
9
1
0м
0
Закрытый
2.1
GDB для ассемблера: запуск, пошаговое выполнение
↗
4
0
-
0
Закрытый
2.2
Просмотр регистров, памяти и стека в GDB
↗
1
0
-
0
Закрытый
2.3
Точки останова и watchpoints
↗
1
0
-
0
Закрытый
2.4
objdump: анатомия бинарного файла
↗
1
0
-
0
Закрытый
2.5
strace: наблюдение за системными вызовами
↗
1
0
-
0
Закрытый
2.6
Шпаргалки по отладке
↗
1
1
-
0
3. Оптимизация и производительность
6 уроков
64
43
2м
12
Закрытый
3.1
Кэш-память и выравнивание данных
↗
15
8
1м 8с
2
Закрытый
3.2
Минимизация обращений к памяти через регистры
↗
9
7
-
2
Закрытый
3.3
Оптимизация циклов: развёртка, предвычисления
↗
9
7
-
2
Закрытый
3.4
Измерение производительности (rdtsc, perf)
↗
10
7
1м 53с
2
Закрытый
3.5
Branch prediction и способы уменьшить ошибки предсказания
↗
9
7
-
2
Закрытый
3.6
Контрольные вопросы
↗
12
7
-
2
4. Системные вызовы и работа с ОС
5 уроков
4
0
0м
0
Закрытый
4.1
Работа с файлами
↗
1
0
-
0
Закрытый
4.2
Работа с каталогами
↗
1
0
-
0
Закрытый
4.3
Динамическая память
↗
0
0
-
0
Закрытый
4.4
Аргументы командной строки
↗
1
0
-
0
Закрытый
4.5
Коды возврата и обработка ошибок
↗
1
0
-
0
5. Работа с памятью и данными
6 уроков
55
44
1м
12
Закрытый
5.1
Организация кучи и стека в Linux
↗
10
8
0м 28с
2
Закрытый
5.2
Выравнивание структур и padding
↗
9
7
-
2
Закрытый
5.3
Косвенная адресация и pointer arithmetic в больших массивах
↗
9
7
-
2
Закрытый
5.4
Thread-local storage (TLS)
↗
10
8
0м 4с
2
Закрытый
5.5
Prefetch-инструкции и управление кешем
↗
8
7
-
2
Закрытый
5.6
Контрольные вопросы
↗
9
7
-
2
6. Взаимодействие с C и другими языками
7 уроков
6
2
0м
0
Закрытый
6.1
Вызов функций стандартной библиотеки C из ассемблера
↗
0
0
-
0
Закрытый
6.2
Передача структур и массивов через ABI
↗
1
0
-
0
Закрытый
6.3
Написание функций на ассемблере для вызова из C и C++
↗
1
0
-
0
Закрытый
6.4
Inline assembly в GCC и Clang
↗
1
0
-
0
Закрытый
6.5
Создание статических и динамических библиотек
↗
1
0
-
0
Закрытый
6.6
FFI с Python через ctypes
↗
1
1
-
0
Закрытый
6.7
FFI с Java через JNA и JNI
↗
1
1
-
0
7. Расширенные инструкции процессора
6 уроков
52
43
0м
12
Закрытый
7.1
Битовые операции
↗
9
7
-
2
Закрытый
7.2
Работа с битовыми шаблонами
↗
8
7
-
2
Закрытый
7.3
CRC32 и аппаратные инструкции для проверки целостности
↗
9
7
-
2
Закрытый
7.4
Новые инструкции для ускоренной математики
↗
8
7
-
2
Закрытый
7.5
Проверка с CPUID
↗
9
7
-
2
Закрытый
7.6
Контрольные вопросы
↗
9
8
-
2
8. Организация проектов
7 уроков
6
3
0м
0
Закрытый
8.1
Многофайловая сборка
↗
1
0
-
0
Закрытый
8.2
Основы Makefile
↗
1
1
-
0
Закрытый
8.3
Makefile: шаблоны, автоматические переменные и функции
↗
1
1
-
0
Закрытый
8.4
Makefile: многорежимная сборка
↗
1
1
-
0
Закрытый
8.5
Линковка с внешними библиотеками
↗
1
0
-
0
Закрытый
8.6
Сложные макросы и условная компиляция
↗
0
0
-
0
Закрытый
8.7
Автоматическая генерация кода препроцессором
↗
1
0
-
0
9. Системные вызовы
5 уроков
41
36
0м
10
Закрытый
9.1
Работа с динамической памятью
↗
8
7
-
2
Закрытый
9.2
Работа с файлами
↗
8
7
-
2
Закрытый
9.3
Управление процессами
↗
8
7
-
2
Закрытый
9.4
Сигналы и их обработка
↗
8
7
-
2
Закрытый
9.5
Контрольные вопросы
↗
9
8
-
2
10. Память и данные
6 уроков
3
0
0м
0
Закрытый
10.1
Виртуальная память
↗
1
0
-
0
Закрытый
10.2
Карта памяти процесса
↗
1
0
-
0
Закрытый
10.3
Выравнивание структур и padding
↗
0
0
-
0
Закрытый
10.4
Pointer arithmetic в больших массивах
↗
0
0
-
0
Закрытый
10.5
Отображение файлов в память
↗
1
0
-
0
Закрытый
10.6
Написание простого аллокатора памяти
↗
0
0
-
0
11. Взаимодействие с другими языками
6 уроков
51
43
0м
12
Закрытый
11.1
ABI SysV
↗
8
7
-
2
Закрытый
11.2
Написание функций на ассемблере для вызова из C и C++
↗
9
7
-
2
Закрытый
11.3
Inline assembly в C/C++ (GCC/Clang)
↗
8
7
-
2
Закрытый
11.4
Создание статических и динамических библиотек
↗
8
7
-
2
Закрытый
11.5
FFI с Python
↗
9
7
-
2
Закрытый
11.6
Контрольные вопросы
↗
9
8
-
2
12. Оптимизация и производительность
8 уроков
0
0
0м
0
Закрытый
12.1
Конвейер процессора и суперскалярное выполнение
↗
0
0
-
0
Закрытый
12.2
Как работает кэш: L1, L2, L3 и cache line
↗
0
0
-
0
Закрытый
12.3
Выравнивание данных под кэш
↗
0
0
-
0
Закрытый
12.4
Минимизация обращений к памяти
↗
0
0
-
0
Закрытый
12.5
Оптимизация циклов: развёртка и предвычисления
↗
0
0
-
0
Закрытый
12.6
Предсказание переходов (branch prediction)
↗
0
0
-
0
Закрытый
12.7
Устранение ложных зависимостей между инструкциями
↗
0
0
-
0
Закрытый
12.8
Измерение и профилирование: rdtsc и perf
↗
0
0
-
0
13. Расширенные возможности
6 уроков
53
44
0м
12
Закрытый
13.1
Сложные макросы и условная компиляция
↗
8
7
-
2
Закрытый
13.2
Автоматическая генерация кода
↗
9
7
-
2
Закрытый
13.3
Работа с include-файлами
↗
9
7
-
2
Закрытый
13.4
Организация больших проектов: модульность и Makefile
↗
9
7
-
2
Закрытый
13.5
Линковка с внешними библиотеками
↗
9
8
-
2
Закрытый
13.6
Контрольные вопросы
↗
9
8
-
2
14. Итоговый тест
4 урока
40
33
1м
8
Закрытый
14.1
Вопросы
↗
9
8
-
2
Закрытый
14.2
Практическая задача Ⅰ
↗
10
9
0м 18с
2
Закрытый
14.3
Практическая задача ⅠⅠ
↗
10
8
0м 8с
2
Закрытый
14.4
Практическая задача ⅠⅠⅠ
↗
11
8
0м 10с
2
15. Обратная связь
1 урок
9
9
0м
2
Закрытый
15.1
Обратная связь
↗
9
9
-
2