Устройство АЛУ микропроцессора 8085 изнутри

Арифметико-логическое устройство (АЛУ) является «сердцем» любого вычислителя, отвечая за выполнение базовых математических и логических операций. Тем не менее, его внутренняя архитектура для многих остается терра инкогнита. В данной статье я делюсь результатами реверс-инжиниринга АЛУ процессора Intel 8085. На первый взгляд, эта схема напоминает хаотичное сплетение логических вентилей, однако при погружении в булеву алгебру ее стройная логика становится очевидной.

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

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

АЛУ принимает два 8-битных операнда (обозначим их как A и X) и поддерживает пять ключевых функций: сложение, логическое И, ИЛИ, исключающее ИЛИ и циклический сдвиг вправо. При инвертировании входа X устройство также успешно выполняет вычитание и побитовое дополнение. Примечательно, что отдельной операции сдвига влево не предусмотрено — она заменяется сложением числа с самим собой. Стоит также отметить простоту арифметического блока 8085: встроенные аппаратные средства для умножения и деления в этой архитектуре отсутствуют — они появились лишь в 8086.

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

Принципиальная схема однобитовой секции АЛУ 8085.

Модуль инверсии

В основании схемы расположен узел «Negation», который определяет, следует ли инвертировать второй операнд (XN). Это ключевой элемент для переключения между сложением и вычитанием.

Логическая обработка

Над узлом инверсии располагается блок «Operation», выполняющий побитовые операции. Комбинируя логические элементы NAND и OR через управляющие линии select_op1 и select_op2, устройство формирует четыре базовых состояния:

select_op1

select_op2

Операция

0

0

A NOR X

0

1

0

1

0

A NXOR X

1

1

A AND X

Стоит учитывать, что на этом этапе некоторые операции представлены в инвертированном виде, что корректируется на этапе объединения с сигналом переноса.

Интеграция с переносом

Блок «Combine with carry» объединяет результаты логических операций с входным переносом посредством функции XOR. По сути, XOR с 0 оставляет значение неизменным, а с 1 — инвертирует его, что позволяет гибко управлять результатом в зависимости от текущей инструкции.

Операция

Промежуточный результат

Перенос

Итог

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

Система формирования переноса динамически адаптируется: в зависимости от типа операции она либо жестко задает значение 0 или 1, либо транслирует инвертированный перенос из предыдущего разряда.

Флаги состояния

Флаг четности вычисляется через цепочку XOR-вентилей, охватывающих все биты результата. Флаг нуля реализован еще изящнее: он представляет собой 8-входовой элемент NOR, распределенный по всему АЛУ, который активируется, если хотя бы один бит результата отличен от нуля.

Управляющая логика

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

Функция

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

ADD, ADC, INR, DCR и др.

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

Complement

1

0

0

0

1

CMA

Subtract

1

1

0

0

0

SUB, SBB, CMP и др.

Методология реверс-инжиниринга

В основе анализа лежат данные проекта visual6502. Используя высокоточные микрофотографии кристалла, команда создала транзисторную модель процессора. Я преобразовал эту модель в логические вентили, что позволило «оживить» схему, проследить прохождение сигналов и составить полную карту работы АЛУ.

Итоги

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

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

Для тех, кто хочет глубже погрузиться в архитектуру современных систем, предлагаем ознакомиться с актуальными обучающими материалами:

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

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

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

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

 

Источник

Читайте также