Введение

Дизайн микропроцессора 1990-х годов

AT&T Hobbit — это микропроцессор, разработанный корпорацией AT&T в начале 1990-х годов. Он был основан на архитектуре CRISP (C language Reduced Instruction Set Processor), напоминающей классический RISC-конвейер, которая, в свою очередь, произошла от разработки C Machine, выполненной в Bell Labs в конце 1980-х годов. Все они были оптимизированы для выполнения кода, скомпилированного из языка программирования C. Конструкция акцентирует внимание на быстром декодировании инструкций, индексированном доступе к массивам и вызовах процедур. Проект был закрыт в марте 1994 года из-за того, что микропроцессору Hobbit не удалось достичь коммерческой успешности.

Дизайн

В традиционной RISC-конструкции, реализующей архитектуру load-store, доступ к памяти осуществляется посредством инструкций, которые явно загружают данные в регистры и сохраняют данные обратно в память, при этом инструкции, выполняющие операции над данными, работают исключительно с регистрами. Стремясь ограничить операции обработки данных одним тактовым циклом, можно использовать более простой механизм управления для выдачи инструкций, что упрощает настройку конвейера инструкций и добавление поддержки суперскалярности. Однако языки программирования фактически не работают таким образом. Обычно они используют стек, содержащий локальные переменные и другую информацию для подпрограмм, известный как фрейм стека или запись активации. Компилятор генерирует код для создания записей активации, используя архитектуру load-store базового процессора. Машины C в реализации CRISP и последовательно разработанная Hobbit, обе направлены на поддержку типов доступа к памяти, используемых языками программирования, при этом особое внимание уделяется языку программирования C. Они отображаются в адресное пространство, соответствующее вершине стека программы, и к ним осуществляется доступ исключительно с использованием режима адресации относительно стека. Архитектура CRISP описывалась как "машина с 2½ адресами, работающая с памятью", где инструкции могут использовать ноль, один или два адреса памяти и могут использовать элемент стека, называемый аккумулятором, для хранения результатов вычислений. Подобно архитектуре Bellmac 32, архитектура CRISP предоставляет различные инструкции, предназначенные для поддержки вызова процедур: call сохраняет адрес возврата и переходит к подпрограмме; enter выделяет фрейм стека для подпрограммы, при необходимости очищая записи кэша стека; return освобождает фрейм стека и переходит к адресу возврата вызывающей стороны; catch восстанавливает записи стека из памяти. Виртуальные машины для Android (Dalvik), Parrot и Lua также основаны на регистрах.