Files
obsidian/Computer Science/Архитектуры/ACC32.md
T
roma-dxunvrs 00b700a410 14.09.26
2026-09-14 20:07:06 +03:00

4.2 KiB

  • 32-битная аккумуляторная архитектура процессора
  • Вся логика использует единственный регистр общего назначения - аккумулятор

Регистры и флаги

  • Acc - 32-битный главный регистр
  • V - overflow flag - флаг переполнения для чисел со знаком
  • C - carry flag - флаг переноса из старшего бита
  • PC - program counter - счетчик команд, хранит адрес следующей инструкции

[!info] В YAML-конфигах состояние аккумулятор выводится через {Acc:dec} и {Acc:hex}, флаги - через {V} и {C}

Кодирование и размеры инструкций

Команды имеют переменную длину для оптимизации плотности кода

  • 1 байт - код операции
  • 4 байта (полный операнд) - 32-битный адрес
  • 2 байта (относительный операнд) - 16-битное знаковое смещение относительно PC
Тип инструкции Операнд Полный размер Примеры
Без операнда Нет 1 байт halt, not, clv, clc, load_acc
Относительные Смещение (2 байта) 3 байта load, store, add, sub, and
Абсолютные Адрес / Число (4 байта) 5 байт jmp, ветвления, load_imm, load_addr, store_ind

Система команд

1. Операции над памятью

  • load_imm <val> - прямая загрузка (5 байт)
  • load <offset> - относительная загрузка (3 байта)
  • store <offset> - относительное сохранение (3 байта)
  • load_addr <addr> - абсолютная загрузка (5 байт)
  • store_addr <addr> - абсолютное сохранение (5 байт)
  • load_acc - разыменование указателя из Acc (1 байт, загружает значение по адресу из аккумулятора acc <- mem[acc])
  • store_ind - косвенная запись по указателю (5 байт, mem[mem[<address>]] <- acc)

Арифметика

  • add <addr> / sub <addr> - сложение/вычитание (5 байт, acc +- mem[<address>]), устанавливают флаги)
  • mul <addr> - умножение (5 байт, acc * mem, устанавливает флаги)
  • div <addr> - целочисленное деление (5 байт, acc / mem)
  • rem <addr> - остаток от деления (5 байт, acc % mem)
  • clv / clc - сброс флагов (1 байт)

Побитовые операции

  • not - побитовая инверсия (1 байт)
  • and <addr> / or <addr> / xor <addr> - логические И, ИЛИ, XOR (5 байт)
  • shiftl <addr> - логический сдвиг влево (5 байт)
  • shiftr <addr> - логический сдвиг вправо (5 байт)

Управление вычислительным процессом

  • jmp <addr>- безусловный переход (5 байт)
  • beqz <addr> - переход, если Acc == 0 (5 байт)
  • bnez <addr> - переход, если Acc != 0 ( 5 байт)
  • bgtz <addr> - переход, если Acc > 0 (5 байт)
  • bgez <addr> - переход, если Acc >= 0 (5 байт)
  • bltz <addr> - переход, если Acc < 0 (5 байт)
  • bvs <addr> / bvc <addr> - переход, если флаг переполнения 1/0 (5 байт)
  • bcs <addr> / bcc <addr> - переход, если флаг переноса 1/0 (5 байт)
  • halt - остановка процессора (1 байт)