惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
腾讯CDC
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
The Hacker News
The Hacker News
T
The Exploit Database - CXSecurity.com
B
Blog
S
SegmentFault 最新的问题
P
Privacy & Cybersecurity Law Blog
T
Threatpost
博客园 - 聂微东
T
Tailwind CSS Blog
The Last Watchdog
The Last Watchdog
C
Check Point Blog
N
Netflix TechBlog - Medium
D
DataBreaches.Net
爱范儿
爱范儿
IT之家
IT之家
S
Secure Thoughts
M
MIT News - Artificial intelligence
NISL@THU
NISL@THU
C
Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
有赞技术团队
有赞技术团队
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
Schneier on Security
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
雷峰网
雷峰网
Project Zero
Project Zero
博客园 - Franky
H
Heimdal Security Blog
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Внутри АЛУ микропроцессора 8085
kmoseenk (OT · 2026-04-22 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели1K

Обзор

Перевод

Арифметико-логическое устройство (АЛУ) — это фундаментальная часть любого компьютера, выполняющая операции сложения, вычитания и логические операции, однако принцип его работы для многих остаётся загадкой. Я провёл реверс-инжиниринг схемы АЛУ микропроцессора 8085 и в этой статье объясняю, как она устроена. АЛУ 8085 — это на удивление сложная схема, которая на первый взгляд выглядит как непонятное нагромождение логических элементов, но её можно понять, если не бояться немного углубиться в булеву логику.

На следующей диаграмме показано расположение АЛУ внутри 8085. АЛУ имеет разрядность 8 бит, при этом старший разряд расположен слева. Файл регистров — это крупный блок под АЛУ. Регистры имеют разрядность 16 бит и состоят из пар 8-битных регистров. Интересно, что в файле регистров старший разряд находится справа, то есть порядок противоположен порядку в АЛУ.

The 8085 microprocessor, showing the location of the 8-bit ALU.

Микропроцессор 8085, на котором показано расположение 8-битного АЛУ. Полная версия по ссылке.

АЛУ принимает два 8-битных входа, которые я буду обозначать как A и X, и выполняет одну из пяти базовых операций: ADD, OR, XOR, AND и SHIFT-RIGHT. Кроме того, если вход X инвертирован, АЛУ может выполнять вычитание и операцию дополнения. Можно заметить, что в этом списке отсутствует SHIFT-LEFT. Однако он реализуется просто: число складывается само с собой, что эквивалентно сдвигу влево на один бит в двоичном представлении. Обратите внимание, что арифметические операции в 8085 очень простые. Умножение и деление отсутствуют — они появились только в 8086.

АЛУ состоит из 8 почти одинаковых блоков, по одному на каждый бит. При сложении каждый такой блок складывает соответствующие входные биты, вычисляя сумму A + X + входной перенос, формируя бит суммы и бит выходного переноса. То есть каждый бит АЛУ реализует полный сумматор. Логические операции работают непосредственно с двумя входными битами: A AND X, A OR X, A XOR X. Операция сдвига вправо просто выводит бит A из соседнего блока справа.

Схема АЛУ

На приведённой ниже схеме показан один бит АЛУ. Схема в целом повторяет физическую реализацию на кристалле, разворачиваясь снизу вверх. Восемь таких блоков расположены рядом, при этом младший разряд находится справа. Переносы распространяются справа налево, а биты при сдвиге вправо — слева направо.

Schematic of one bit of the ALU in the 8085 microprocessor.

Схема одного бита АЛУ в микропроцессоре 8085.

Инверсия

В нижней части схемы находится сложный логический элемент, обозначенный как Negation («Инверсия»). Этот элемент при необходимости выбирает инвертированный второй аргумент, подавая либо XN, либо /XN. (XN — это N-й бит второго аргумента, который я обозначаю как X. Символ / означает дополнение.) Для упрощения дальнейшего объяснения будем считать, что XN не инвертирован.

Операция

Над блоком выбора дополнения расположены несколько логических элементов с меткой Operation («Операция»), которые выполняют нужную двухвходовую операцию. Элемент НЕ-И (NAND) слева формирует либо A NAND X, либо 1 — в зависимости от управляющей линии select_op1. Элемент ИЛИ (OR) справа формирует либо A OR X, либо 1 — в зависимости от управляющей линии select_op2. Объединение этих сигналов через NAND даёт четыре возможных результата:

select_op1

select_op2

Результат

0

0

A NOR X

0

1

0

1

0

A NXOR X

1

1

A AND X

Обратите внимание, что вместо операций OR и XOR на этом этапе получается их инвертированное значение. Это будет скорректировано на следующем шаге.

Комбинирование с переносом

Над блоком операций расположен следующий узел, обозначенный как Combine with carry («Объединение с переносом»). Он формирует выход АЛУ, объединяя входной перенос с результатом операции с помощью XOR.

Чтобы понять работу этого узла, сначала рассмотрим простой элемент XOR, который используется в АЛУ несколько раз. Его логика довольно проста: если оба входа равны 0 (верхний случай) или оба равны 1 (нижний случай), то на выходе получается 0.

An XOR gate can be implemented by a NOR gate and an AND-NOR gate. This circuit is used in the 8085 ALU.

Логический элемент XOR может быть реализован с помощью логического элемента NOR и логического элемента AND-NOR. Эта схема используется в АЛУ 8085.

Если временно не учитывать схему сдвига вправо, этот блок логики фактически представляет собой XOR. При этом XOR с 0 ничего не меняет, а XOR с 1 инвертирует значение. Выражение A XOR X XOR CARRY соответствует младшему биту суммы A, X и CARRY.

Ключевая идея этого узла заключается в том, что входной перенос формируется таким образом, чтобы преобразовать результат операции в итоговое корректное значение. Входной перенос /carry(N-1) может принимать значение 0, 1 или инвертированного переноса из предыдущего разряда — в зависимости от операции.

Op

Результат операции

Перенос

Результат

or

A NOR X

1

A OR X

add

A NXOR X

/перенос

A XOR X XOR CARRY

xor

A NXOR X

1

A XOR X

and

A AND X

0

A AND X

shift right

0

0

A(N+1)

complement

A NOR /X

1

A OR /X

subtract

A NXOR /X

/перенос

A XOR /X XOR CARRY

Обратите внимание, что линия входного переноса должна принимать корректное значение для получения нужного результата. При сложении она передаёт инвертированный перенос от одного разряда к следующему. Для операций OR и XOR она устанавливается в 1. Для AND и SHIFT_RIGHT — в 0. Как будет показано ниже, схема формирования переноса обеспечивает нужное значение для каждой операции.

Последний элемент этой схемы — блок сдвига вправо. При нулевом значении операционного входа, нулевом переносе и активном сигнале shift_right на выход подаётся бит из соседнего правого разряда: A(N+1).

Формирование переноса

Слева расположен узел Generate carry («Формирование переноса»), который вычисляет выходной перенос. Он может выдавать три варианта: 1, 0 или (инвертированный) перенос от суммы. Если активна линия select_op2, перенос принудительно устанавливается в 0. Если активна линия force_ncarry_1, перенос устанавливается в 1. В противном случае перенос вычисляется для суммы A + X + входной перенос по стандартной логике: если входной перенос равен 1 и хотя бы один из входных битов равен 1, возникает перенос. Если оба входных бита равны 1, перенос также возникает.

Флаги

В 8085 есть флаг чётности, который равен 1, если количество единичных битов чётное, и 0 — если нечётное. Флаг чётности формируется путём применения XOR ко всем битам результата (с последующим инвертированием). Каждый бит последовательно объединяется по XOR с накопленным значением чётности младших разрядов с помощью схемы чётности, расположенной в верхней части схемы. При этом используется тот же XOR-элемент, который был описан ранее.

Флаг нуля вычисляется с помощью простой схемы: каждый бит результата управляет транзистором, который притягивает линию нуля к низкому уровню, если этот бит равен 1. В результате получается элемент НЕ-ИЛИ (NOR) с восемью входами, распределённый по всему АЛУ.

Управляющие линии

Как видно на схеме, в 8085 используется несколько управляющих линий для управления работой АЛУ. Всего АЛУ поддерживает 7 различных операций, и в таблице ниже приведены управляющие сигналы, используемые для каждой из них. Также указаны коды операций (opcode), которые задействуют соответствующую функцию АЛУ.

Операция

select_neg

select_op1

select_op2

shift_right

force_ncarry_1

Коды операций

or

0

0

0

0

1

ORA,ORI (и по умолчанию)

add

0

1

0

0

0

INR,DCR,RLC,DAD,RAL,DAA,ADD,ADC,ADI,ACI (а также недокументированные LDSI, LDHI, RDEL)

xor

0

1

0

0

1

XRA,XRI

and

0

1

1

0

1

ANA,ANI

shift right

0

0

1

1

1

RRC,RAR (ARHL)

complement

1

0

0

0

1

CMA

subtract

1

1

0

0

0

SUB,SBB,SUI,SBI,CMP,CPI (DSUB)

Управляющие линии АЛУ формируются из кода операции с помощью программируемой логической матрицы (programmable logic array, PLA). В частности, это выходы блока PLA F, расположенного справа от АЛУ. Более подробно это описано в моей статье о PLA.

Кроме того, у АЛУ есть дополнительные управляющие линии, которые используются для настройки регистров, инициализации битов переноса и установки флагов. Они отвечают за различия между отдельными кодами операций внутри описанных выше категорий. Эти аспекты я рассмотрю в следующей статье.

The PLA in the 8085

PLA в 8085. Полная версия по ссылке.

Реверс-инжиниринг АЛУ

Эта информация основана на реверс-инжиниринге микропроцессора 8085, выполненном командой visual 6502. Эта команда растворяет микросхемы в кислоте, чтобы удалить корпус, а затем делает множество детальных фотографий кристалла. Павел Зима (Pavel Zima) преобразовал эти фотографии в изображения слоёв масок, построил на их основе транзисторную схему и написал симулятор 8085 на уровне транзисторов.

Я взял эту транзисторную модель и использовал её, чтобы разобраться в работе АЛУ. Сначала я преобразовал транзисторную схему в логические элементы. Затем определил, какие из них относятся к АЛУ, и собрал из них принципиальную схему. После этого я проанализировал работу схемы для разных операций и в итоге понял, как она устроена.

Заключение

АЛУ микропроцессора 8085 — это интересная схема. Сначала она выглядела как непонятное нагромождение логических элементов с загадочными управляющими сигналами, но после анализа удалось разобраться в её устройстве.

АЛУ 8085 реализовано совершенно иначе, чем АЛУ в 6502 (о котором я напишу позже). В 6502 используются достаточно простые схемы, которые параллельно вычисляют значения SUM, AND, XOR, OR и SHIFT, а затем применяется простой мультиплексор на проходных транзисторах для выбора нужной операции. В отличие от этого, АЛУ 8085 формирует только одно — требуемое — значение.

Другие выпуски от Ken Shirrif

Если хочется посмотреть на похожий инженерный подход уже на современных технологиях, ниже — несколько открытых уроков про внутреннее устройство систем, поведение кода и архитектурные решения на практике.

  • 23 апреля в 20:00. «Многопоточность в C++: как писать быстрые и безопасные приложения». Записаться

  • 4 мая в 20:00. «Интерфейсы в Golang изнутри». Записаться

  • 19 мая в 20:00. «Асинхронность под капотом». Записаться

Полный список бесплатных уроков от преподавателей курсов уже доступен в календаре мероприятий.