Первый код на ассемблере лучше писать не как полноценную программу с вводом, выводом и системными вызовами, а как маленький набор инструкций, где видно, что происходит с регистрами
Иначе новичок сразу тонет в деталях операционной системы. Наша цель проще: понять mov, add, sub, cmp и идею перехода
- Мини-сценарий
- Что делает mov
- Что делает add
- Что делает sub
- Добавляем сравнение
- Маленькая логика
- Почему нет вывода на экран
- Как тренироваться
- Частые ошибки
- Думать, что cmp меняет регистр
- Переходить не туда
- Копировать код не под ту архитектуру
- Сразу брать сложный Hello World
- Мини-задания
- Ответы на эти вопросы могут быть для вас полезными
- С чего начать ассемблер с нуля?
- Что такое регистр?
- Что делает cmp?
- Почему код зависит от архитектуры?
- Можно ли учить без установки?
- Что почитать дальше по ассемблеру
Мини-сценарий
Представим, что нужно посчитать:
10 + 5 - 3
В условном x86-подобном синтаксисе:
mov ax, 10
add ax, 5
sub ax, 3
После выполнения в ax будет 12
Что делает mov
mov ax, 10
mov копирует значение. Здесь мы кладем число 10 в регистр ax
Важно: mov не "двигает" значение так, что источник исчезает. Это скорее "скопировать"
Что делает add
add ax, 5
Прибавляет 5 к текущему значению ax
Если в ax было 10, станет 15
Что делает sub
sub ax, 3
Вычитает 3 из ax
Если было 15, станет 12
Добавляем сравнение
Теперь проверим, равно ли значение 12:
cmp ax, 12
cmp сравнивает значения и выставляет флаги процессора. Сам ax не меняется
После cmp можно сделать условный переход:
je equal_label
je означает jump if equal — перейти, если равно
Маленькая логика
mov ax, 10
add ax, 5
sub ax, 3
cmp ax, 12
je result_is_12
mov bx, 0
jmp end
result_is_12:
mov bx, 1
end:
Идея:
- считаем значение в
ax; - сравниваем с 12;
- если равно, кладем 1 в
bx; - если не равно, кладем 0.
Это уже похоже на if из C++:
if (result == 12) {
flag = 1;
} else {
flag = 0;
}
Почему нет вывода на экран
Потому что вывод — это уже разговор с операционной системой или учебной библиотекой. Для первого урока важнее понять саму механику:
- регистр;
- операция;
- сравнение;
- флаг;
- переход.
Когда это ясно, Hello World перестает быть стеной текста
Как тренироваться
Не пытайся учить список команд как словарь. Бери одну задачу:
Положить число, прибавить, сравнить, перейти.
И прогоняй ее в эмуляторе, где видно регистры
План:
- Записать ожидаемый результат.
- Выполнить инструкции.
- Проверить регистры.
- Изменить одно число.
- Снова предсказать результат.
Частые ошибки
Думать, что cmp меняет регистр
cmp ax, 12 не меняет ax. Он выставляет флаги
Переходить не туда
Метка должна существовать:
je result_is_12
и ниже:
result_is_12:
Копировать код не под ту архитектуру
Команды и регистры зависят от архитектуры. ax — x86-семейство, не универсальный регистр всех процессоров
Сразу брать сложный Hello World
Можно, но для первого понимания проще начать с регистров и арифметики
Мини-задания
- Сделай в
axзначение 20 черезmovиadd. - Вычти 4.
- Сравни с 16.
- Если равно, положи в
bxчисло 1. - Если не равно, положи 0.
Потом измени одно число так, чтобы условие стало ложным
Ответы на эти вопросы могут быть для вас полезными
С чего начать ассемблер с нуля?
С регистров и простых инструкций: mov, add, sub, cmp, jmp. Не обязательно начинать с вывода текста
Что такое регистр?
Это маленькая быстрая ячейка внутри процессора, с которой инструкции работают напрямую
Что делает cmp?
Он сравнивает значения и выставляет флаги, но не меняет сами операнды
Почему код зависит от архитектуры?
Потому что разные процессоры имеют разные регистры, инструкции и правила
Можно ли учить без установки?
Да, первые инструкции удобно выполнять в online-эмуляторе
Что почитать дальше по ассемблеру
Если вы собираете тему по шагам, рядом лучше открыть:
- Ассемблер онлайн: где запустить первый код — подобрать среду, где удобно смотреть регистры.
- Регистры и флаги процессора простыми словами — разобрать AX, EAX, RAX и основные флаги.
- CMP, JMP, JE, JNZ: условия и циклы в ассемблере — перейти от отдельных команд к условиям и циклам.
- Hello World на ассемблере: зачем он сложнее, чем в C++ — увидеть полноценную программу с выводом текста.



