Перейти к содержанию

Раздел 5: Ассемблер и процессор

Этот раздел посвящён работе процессора x86-64 — от машинного уровня до тонкостей аппаратной оптимизации. Вы разберётесь, как компилятор превращает C-код в инструкции, как эти инструкции выполняются на суперскалярном конвейере и что происходит внутри процессора при обращении к памяти, ветвлении или системном вызове.

Раздел охватывает несколько взаимосвязанных пластов:

  • Язык ассемблера — синтаксис AT&T и Intel, регистры, соглашение о вызовах System V AMD64 ABI, стековые фреймы, отладка в GDB.
  • Взаимодействие C и ассемблера — inline-asm, constraints, rdtsc, constant-time алгоритмы, интеграция отдельных .s-файлов в проект.
  • Безопасность — переполнение буфера и защита от него: stack canary, ASLR, NX, RELRO.
  • Архитектурные оптимизации — кэши, предсказание ветвлений, параллелизм инструкций (ILP), SIMD/AVX.
  • Привилегированный режим — кольца защиты, инструкция syscall, vDSO, таблица прерываний (IDT), таймерное прерывание как основа многозадачности.

Темы

Страница Что рассматривается
Основы ассемблера Регистры x86-64, AT&T/Intel синтаксис, базовые инструкции, соглашение о вызовах
Условные переходы и флаги Регистр RFLAGS, cmp/test, все формы jcc, cmovcc, реализация if/while/for
Ассемблерные функции и GDB Функции в отдельных .s-файлах, компоновка с C, отладка на уровне инструкций
Стековые фреймы и вызовы функций Инструкции call/ret, пролог/эпилог, System V AMD64 ABI, frame pointer
Защита от переполнения буфера Stack canary, ASLR, NX/DEP, RELRO, PIE, безопасные функции
Кэши процессора Иерархия L1/L2/L3, кэш-линии, пространственная локальность, false sharing
Предсказание ветвлений Branch predictor, mispredict penalty, [[likely]]/__builtin_expect, cmov
Параллелизм на уровне инструкций Pipeline, суперскалярность, out-of-order execution, Spectre/Meltdown
Векторные инструкции (SIMD) SSE/AVX/AVX-512, XMM/YMM регистры, intrinsics, автовекторизация
Встроенный ассемблер в GCC asm(), constraints, volatile, rdtsc, constant-time сравнение
Режимы процессора и системные вызовы Ring 0/3, инструкция syscall, MSR LSTAR, vDSO, привилегированные инструкции
Системные вызовы (введение) Переход user → kernel; SysV AMD64 calling convention; strace; errno; прямой вызов через syscall(2)
Прерывания IDT, аппаратные прерывания (IRQ), исключения процессора, вытесняющая многозадачность
vDSO Virtual Dynamic Shared Object; clock_gettime без syscall; вспомогательный вектор AT_SYSINFO_EHDR; vvar