ASM://PROTOCOL
Войти в курс

Учебный терминал x86-64 · C · C++ · Ada

ASM://PROTOCOL

Код, который понимаешь до последней инструкции.

Портал, который учит вычислениям и работе с железом: от одной инструкции процессора до программ на C, C++ и Ada.

02Четыре языка и система под нимиM1–M22

Не понимаешь, что делает код? Мы понимаем — и объясним.

Уже сейчас можно учить. 115 уроков · любой модуль открыт сразу

  • Ассемблер x86-64

    Регистры, флаги и переходы, память, стек, SIMD

    40 уроков 8 модулей · M1–M7, M9

  • C

    Указатели, куча, структуры данных, плавающая точка

    20 уроков 4 модуля · M8, M10–M12

  • C++

    Классы, RAII и умные указатели, шаблоны

    15 уроков 3 модуля · M13–M15

  • Ada

    Строгая типизация, контракты, конкурентность

    15 уроков 3 модуля · M16–M18

  • Системы, сквозной трек

    Системные вызовы, линковка, конвенции вызова, карта памяти

    20 уроков 4 модуля · M19–M22

Go — в планах. Начать с нуля: Пролог M0, 5 уроков без подготовки

Каждый урок — в двух режимах: на пальцах и на голом железе.

03Начать с нуля — прямо в браузереM0

Ты видишь хаос. Внутри — простые шаги. Мы объясним каждый.

  1. Выборка fetch

    Процессор читает очередную инструкцию из памяти

    0x3b6: 01 D6

  2. Декодирование decode

    Декодирует: что за операция и над какими данными

    add esi, edx

  3. Исполнение execute

    Исполняет её

    2 + 3 = 5

  4. Запись writeback

    Пишет результат в регистр или память

    ESI ← 5

fib(8) · clang -O2 · x86-64

«Программа — лишь очень длинная цепочка таких простых шагов.»

M0 · урок 2 · вход без подготовки

04Регистры и флаги на каждом шагеM1–M7, M9

Регистры. Флаги. Переходы.

m3_l2.asmx86-64

  1. mov eax, 2
  2. cmp eax, 8
  3. je equal_label
  4. mov eax, 100исполнена
  5. equal_label:

Машинаконец · шагов: 4

ZF
0
SF
1
CF
1
OF
0
EAX было 2
100

Снимки не нарисованы: clang собрал листинг, Unicorn исполнил его по одной инструкции. Это стенд режима Console Cowboy.

строка 4EAX ← 100

«Читая ZF после CMP, ты предсказываешь переход до запуска.»

M3 · урок 2 · разбор

05Указатели и память без магииM8, M10–M12

Указатель — это адрес.

1int *p = NULL;
2int y = *p;

Segmentation fault (core dumped)SIGSEGV · exit 139

«Это не „ошибка обучения“, а честная реакция машины: успехом был бы выход с кодом 0.»

M8 · урок 4 · разбор

06Ресурсы и контракты под контролемC++ M13–M15 · Ada M16–M18

Время жизни и контракты.

C++ управление ресурсами
{
  std::shared_ptr<int> p1 =
      std::make_shared<int>(5);
  {
    std::shared_ptr<int> p2 = p1;
    // p1.use_count() == 2
  }
  // p1.use_count() == 1
}

Деструктор p2 уменьшает счётчик. Объект живёт, пока жив последний владелец.

Ada точность и контракты
function Sqrt (X : Float) return Float
  with Pre => X >= 0.0;

Y := Sqrt (-1.0);

raised SYSTEM.ASSERTIONS.ASSERT_FAILURE : failed precondition

Вызывающий обязан обеспечить корректные аргументы. Проверка срабатывает до входа в тело функции.

C++: классы, RAII, умные указатели, шаблоны. Ada: строгая типизация, контракты, задачи.

07Глубже языка — до ядра ОСM19–M22

Единственная дверь к ядру.

1mov rax, 60   ; номер exit в Linux x86-64
2mov rdi, 42   ; код возврата
3syscall

$ echo $?42

«Shell увидит $? = 42 — тот самый exit-код, о котором был Пролог.»

M19 · урок 1 · системные вызовы

08Прогноз сверяется с машинойM2 · урок 4

Как устроен урок: вопрос, практика, разбор

  1. Вопрос.Прогноз до запуска: что сделает машина.
  2. Практика.Ответ и прогон листинга по шагам.
  3. Разбор.Объяснение после ответа. Подсказка — по запросу.
m2_l4.asmNASM · x86-64
  1. mov eax, 3
  2. add eax, eaxEAX = 6
  3. add eax, eaxEAX = ?

Что делает этот фрагмент? Какой результат в EAX?

Ответ неверный

EAX = 6 был у машины после строки 2. Пройди по шагам и посмотри на строку 3.

Ошибка не раскрывает ответ. Машина предлагает пройти листинг по шагам и найти строку, где расчёт разошёлся.

09Один урок — два уровня абстракции

Два режима урока: Script Kiddie и Console Cowboy

M1 · Протокол регистров Урок 4 из 5

Script Kiddie концептуальный: зачем и почему, без листинга

Один и тот же регистр можно назвать по-разному в зависимости от того, сколько бит берём. Зачем такая матрёшка?

ПодсказкаEAX — это младшая половина 64-битного RAX, а не отдельная деталь.

  1. Чтобы запутать новичков
  2. Для совместимости и гибкости: можно работать с частью большого регистра
  3. Это разные физические регистры

Console Cowboy bare metal: листинг x86-64, регистры, флаги

Что теперь находится в RAX? Подумайте о связи между RAX и EAX.

1mov rax, 100
2mov eax, 5

ПодсказкаEAX — младшие 32 бита 64-битного RAX. Запись в EAX обнуляет старшие биты.

  1. 100
  2. 5
  3. 105
  4. Неопределённое значение

Непонятно, при чём тут RAX и EAX? Переключи на Script Kiddie — тот же урок объяснят на пальцах.

Тот же урок без листинга: зачем регистру матрёшка. Что она делает с RAX, покажет Console Cowboy.

Это один и тот же урок. Меняется уровень абстракции, а не сложность.

Режим переключается в любой момент урока

10Честный ответ машины вместо баллов

Мы не играем на твоём дофамине.

  • ✓ Ответ верныйи всё — без конфетти
  • ✗ Ответ неверныйответ не раскрываем — пройди по шагам
  • Код завершения: 0лаборатория: программа отработала

Ни конфетти, ни радуги за правильный ответ. Только сухой вердикт и разбор: что сделала машина и почему.

1123 модуля · 115 уроков · любой открыт сразу

Войти в курс.

Курс открывается после входа в локальный профиль: имя и фраза-пароль. Прогресс хранится в этом браузере. Начать можно с Пролога — M0 не требует подготовки.

Программа

Пролог

M0
Пролог

Ассемблер x86-64

M1
Протокол регистров
M2
Арифметическое ядро
M3
Условные переходы
M4
Протокол памяти
M5
Стековый протокол
M6
Битовые операции
M7
Векторный протокол
M9
SIMD над массивами

C

M8
Указатели
M10
Куча и время жизни
M11
Структуры данных с нуля
M12
Числа с плавающей точкой

C++

M13
Классы и инкапсуляция
M14
RAII и умные указатели
M15
Шаблоны и обобщённое программирование

Ada

M16
Строгая типизация и безопасность
M17
Контракты и предусловия
M18
Задачи и конкурентность

Системы

M19
Системные вызовы
M20
Связывание и загрузка
M21
Конвенции вызова
M22
Карта памяти процесса
Go
в планах
Модулей
23 · уроков 115
Снимки машины
clang + Unicorn
Шрифты
IBM Plex Mono, IBM Plex Sans
Интерфейс
@asm-protocol/ui-kit

Любой модуль открывается сразу. Подготовка — рекомендация, а не условие доступа.