Команда (инструкция) процессора – минимальная единица работы ЦП, описывающая, что сделать (код операции, opcode) и с чем это сделать (операнды: регистры, адреса памяти, непосредственные значения). Любая программа – это последовательность машинных команд, которые процессор выполняет по циклу fetch–decode–execute: выборка → декодирование → исполнение.
В ЕГЭ тема встречается в заданиях на:
кодирование и формат команд, мощность полей (сколько разных опкодов/регистров/ячеек памяти возможно);
режимы адресации и вычисление эффективного адреса;
анализ простых программ на гипотетическом процессоре (значения регистров, флагов, ячеек памяти);
побитовые операции, сдвиги, работа со стеком;
оценку объёма памяти под программу, длины команд.
Формат команды
Общий вид (на примере):
[ opcode | mode | reg | address/immediate ]
opcode – код операции (сложить, загрузить, сравнить и т.п.).
mode – режим адресации (как понимать операнд).
reg – код регистра(ов).
address / immediate – адрес в памяти или непосредственное число.
Правило ЕГЭ №1. Если поле имеет k бит, то число различных значений = 2^k.
Пример: поле opcode 5 бит ⇒ 2^5 = 32 разных операции.
Операнды и режимы адресации (минимум, который нужен)
Непосредственная (immediate): ADD A, #5 – операнд «5» хранится в самой команде.
Прямая (direct): LOAD R1, [100] – взять из ячейки памяти №100.
Регистровая (register): ADD R1, R2.
Косвенная (indirect): LOAD R1, [R2] – адрес в R2.
Базовая с смещением (base+disp): LOAD R1, [R2 + disp].
Индексная: LOAD A, [Base + Index*Scale + disp] (в олимпиадных задачах встречается упрощённый вариант base+index).
Правило ЕГЭ №2. Эффективный адрес (EA) при base+disp = Base + disp (с учётом знака смещения, если оно знаковое).
Основные классы команд
Пересылка данных: LOAD/STORE, MOV, PUSH/POP.
Арифметика: ADD, SUB, INC, DEC, MUL, DIV.
Логика/биты: AND, OR, XOR, NOT, SHL, SHR, ROL, ROR.
Сравнение/флаги: CMP (обновляет флаги), TEST.
Переходы: JMP (безусловный), JZ/JNZ/JC/JNC и др. (условные).
Подпрограммы: CALL, RET (работают со стеком).
Ввод/вывод: IN, OUT (в учебных моделях – абстрактно).
Регистры и флаги
Регистры общего назначения (R0…R7 и т.п.).
SP (Stack Pointer), PC/IP (Program Counter/Instruction Pointer).
Флаги: Z (Zero), C (Carry), S/N (Sign/Negative), V/O (Overflow).
Z=1, если результат равен 0.
C=1 при переносе/заёме из старшего бита (беззнаковая арифметика).
S=1, если старший бит результата равен 1 (знаковый признак).
V=1 при знаковом переполнении (например, 127 + 1 в 8 бит).
Правило ЕГЭ №3. Отдельно отличайте перенос (C) и переполнение (V): первое – про беззнаковую арифметику, второе – про знаковую.

Мощность поля: k бит → 2^k вариантов (опкодов/регистров/адресов).
Адресуемая память: если поле адреса – n бит и адресует байты, то максимум 2^n байт (или 2^n ячеек).
Длина команды: сложите биты всех полей → переведите в байты (делите на 8, учитывайте округление вверх).
Эффективный адрес: строго по режиму; при знаковом смещении – двухкомплементарное представление (например, 0xF6 в 8 бит = –10).
Сдвиги: логические сдвиги заносят нули; циклические вращают биты; «бит, ушедший за предел», часто попадает в C.
Стек: обычно растёт вниз (SP уменьшается при PUSH, увеличивается при POP), слово – 2 байта (в учебных задачах это оговаривается).
Порядок байтов: если сказано «little-endian», младший байт хранится по меньшему адресу.
Расчёт количества команд/регистров/ячеек по разметке полей.
Вычисление эффективного адреса при различных режимах.
Симуляция короткой программы: конечные значения регистров, ячеек, флагов.
Побитовые операции и сдвиги (часто – в шестнадцатеричном представлении).
Стековые задачи: как меняется SP, что записано в память после PUSH/CALL.
Оценки объёма (длина n команд, объём адресуемой памяти и т.п.).
Упражнение 1. Эффективный адрес с 8-битным смещением
Условие. Формат адресации EA = Rb + disp, где disp – 8-битное знаковое смещение (доп. код). Пусть Rb = 1200 (десятичное), disp = 0xF6. Найдите EA.
Решение.
0xF6 в 8 бит → двоично 1111 0110. Это отрицательное число.
Значение: 256 − 0xF6 = 256 − 246 = 10, значит disp = −10.
EA = 1200 + (−10) = 1190.
Ответ: 1190.
Упражнение 2. Симуляция 8-битной арифметики и флагов
Условие. 8-битные регистры, флаги Z и C. Исходно: A = 0x3C (60), B = 0xA7 (167), Z=0, C=0. Выполнить:
ADD A, B (A := A + B);
AND A, #0x3F;
SHL A, 2 (логический сдвиг влево на 2 бита).
Определить A, Z, C после каждой команды (для SHL считайте, что C принимает значение «последнего вытолкнутого» бита; при двойном сдвиге – по второй операции).
Решение.
ADD: 60 + 167 = 227 = 0xE3. 8-битный диапазон не переполнен ( < 256 ), C=0. Z=0 (результат ≠ 0).
→ A=0xE3, Z=0, C=0.
AND 0x3F: 0xE3 (1110 0011) & 0x3F (0011 1111) = 0010 0011 = 0x23 (35).
→ A=0x23, Z=0, C не меняем (если по условию не определено – оставим прежним 0).
SHL A,2: 0x23 = 0010 0011.
Первый сдвиг: 0100 0110 (0x46), вытолкнутый бит = 0 → C=0.
Второй сдвиг: 1000 1100 (0x8C), вытолкнутый бит = 0 → итоговый C=0.
Результат не нулевой → Z=0.
→ A=0x8C, Z=0, C=0.
Ответ: после трёх команд A=0x8C, Z=0, C=0.
Упражнение 3. Стек: PUSH/POP и порядок байтов
Условие. 16-битное слово, little-endian, стек растёт вниз. Исходно SP = 0x1000. Выполнить:
PUSH 0xABCD; PUSH 0x0102; POP R1. Указать конечные SP, значение R1 и какие байты лежат по адресам 0x0FFC…0x0FFF.
Решение.
Ответ: SP=0x0FFE, R1=0x0102. В памяти:
0x0FFC=0x02, 0x0FFD=0x01, 0x0FFE=0xCD, 0x0FFF=0xAB.
Упражнение 4. Сколько опкодов, регистров и памяти адресуемо?
Условие. Формат 16-битной команды:
[ opcode:5 | reg:3 | addr:8 ]. Адресует байты.
а) Сколько различных операций поддерживает процессор?
б) Сколько регистров общего назначения возможно?
в) Сколько адресуемых ячеек памяти?
г) Какова длина одной команды в байтах?
Решение.
а) opcode:5 → 2^5 = 32 операции.
б) reg:3 → 2^3 = 8 регистров.
в) addr:8 → 2^8 = 256 байт адресуемой памяти.
г) 16 бит = 2 байта.
Ответ: 32 опкода; 8 регистров; 256 адресуемых байтов; длина команды 2 байта.
Упражнение 5. Мини-программа с разными режимами адресации
Условие. Аккумулятор AC=0. Память: [10]=7, [11]=3, [12]=0. Выполнить:
LOAD AC, [10] (прямая);
ADD AC, [11] (прямая);
STORE AC, [12] (прямая);
SUB AC, #4 (непосредственная).
Найти конечные AC и [12].
Решение.
LOAD: AC := 7.
ADD: AC := 7 + 3 = 10.
STORE: [12] := 10.
SUB #4: AC := 10 − 4 = 6.
Ответ: AC = 6, [12] = 10.
Смещение со знаком. Всегда проверяйте, знаковое ли поле disp. Для 8 бит: значения 0x80…0xFF – отрицательные.
Перенос vs переполнение. Не путайте C и V. В задачах обычно спрашивают именно C (беззнаковый перенос).
Сдвиги. Логический сдвиг влево/вправо заполняет нулями; арифметический вправо – копирует старший бит (если явно сказано).
Стек и эндированность. Внимательно читайте, как растёт стек и какой порядок байтов принят.
Единицы измерения. Адресует ли поле байты или слова? Если слова – умножайте адрес на размер слова при расчёте байтового адреса.
Итог
Понимание формата команд, режимов адресации, флагов и базовых классов инструкций позволяет уверенно решать задачи ЕГЭ на машинный уровень: считать мощности полей, длины команд, эффективные адреса, имитировать выполнение коротких программ и анализировать стек/флаги. Освоив перечисленные правила и отработав 5 типовых упражнений, вы закроете основные риск-зоны экзамена и получите фундамент, на котором строится дальнейшее изучение архитектуры вычислительных систем.