ММИКС
Дизайнер | Дональд Кнут |
---|---|
Биты | 64-битная |
Представлено | 1999 |
Дизайн | РИСК |
Кодирование | Зафиксированный |
Ветвление | Код состояния |
Порядок байтов | Большой |
Открыть | Да, и без лицензионных отчислений |
Регистры | |
32 регистра специального назначения | |
общего назначения | 256 |
MMIX (произносится как em-mix ) — это 64-битная вычислительная с сокращенным набором команд (RISC) архитектура , разработанная Дональдом Кнутом при значительном вкладе Джона Л. Хеннесси (который внес свой вклад в разработку архитектуры MIPS ) и Ричарда Л. Сайтса ( который был архитектором архитектуры Альфа ). Кнут сказал, что
MMIX — это компьютер, предназначенный для иллюстрации аспектов программирования на машинном уровне. В моих книгах «Искусство компьютерного программирования » он заменяет MIX , машину в стиле 1960-х годов, которая раньше играла такую роль… Я стремился спроектировать MMIX так, чтобы ее машинный язык был простым, элегантным и легким для изучения. В то же время я старался учесть все сложности, необходимые для достижения высокой производительности на практике, чтобы MMIX в принципе можно было построить и даже, возможно, конкурировать с некоторыми из самых быстрых компьютеров общего назначения на рынке». [1]
Кнут начал разработку MMIX в 1999 году и выпустил стабильную версию дизайна в 2011 году. [2] Процессору присвоен номер «2009», и Кнут объяснил, что это среднее арифметическое от номеров других компьютерных архитектур; а также «MMIX» римскими цифрами . [3]
Архитектура [ править ]
MMIX - это (RISC) с обратным порядком байтов 64-битный компьютер с сокращенным набором команд , с 256 64-битными регистрами общего назначения, 32 64-битными регистрами специального назначения, фиксированной длины 32-битными инструкциями и 64-битным виртуальным адресом. космос . Набор инструкций MMIX состоит из 256 кодов операций, один из которых зарезервирован для будущего расширения. [ нужна ссылка ] MMIX использует IEEE 754 числа с плавающей запятой .
Инструкция [ править ]
Все инструкции имеют соответствующую мнемонику. Например, инструкция №20 (32 десятичных числа) связана с ADD. Большинство инструкций имеют символическую форму. OP X,Y,Z
, где OP указывает тип инструкции, X указывает регистр, используемый для хранения результата инструкции, а остальные указывают операнды инструкции. Каждое из этих полей имеет ширину восемь бит. Например, ADD $0,$1,3
означает «Установить $0 как сумму $1 и $3».
Большинство инструкций могут принимать либо непосредственные значения, либо содержимое регистра; таким образом, одна мнемоника инструкции может соответствовать одному из двух кодов операций.
Программы MMIX обычно создаются с использованием языка ассемблера MMIXAL. Ниже приведена простая программа MMIXAL, которая печатает строку « Привет, мир! »:
LOC #100 % Set the address of the program
% initially to 0x100.
Main GETA $255,string % Put the address of the string
% into register 255.
TRAP 0,Fputs,StdOut % Write the string pointed to by
% register 255 to the standard
% output file.
TRAP 0,Halt,0 % End process.
string BYTE "Hello, world!",#a,0 % String to be printed. #a is
% newline, 0 terminates the
% string.
Регистры [ править ]
В микросхеме MMIX имеется 256 напрямую адресуемых архитектурных регистров общего назначения, обозначенных цифрами от $0 до $255, и 32 архитектурных регистра специального назначения. Доступ к регистрам специального назначения можно получить с помощью инструкций GET и PUT. Два специальных регистра, rL и rG, определяют, какие из общих регистров являются локальными, а какие глобальными. Все регистры от $0... ([rL] − 1) являются локальными регистрами и представляют собой окно во внутренний стек регистров. [4] Регистры из [rL]... ([rG] − 1) являются «маргинальными регистрами», они всегда возвращают 0, если используются в качестве источника в операции. Использование маргинального регистра в качестве места назначения операции приведет к тому, что машина автоматически увеличит rL для включения этого регистра. Все регистры [rG]... $255 называются глобальными регистрами и не являются частью стека регистров.
Стек локальных регистров [ править ]
Стек локальных регистров предоставляет каждой подпрограмме свои собственные локальные регистры rL, обозначенные от $0 до $(rL − 1) . При каждом вызове подпрограммы несколько локальных регистров перемещаются вниз по стеку (путем смещения начала окна). Аргументы вызванной подпрограммы сохраняются в остальных локальных регистрах. Когда подпрограмма завершается, она извлекает ранее загруженные регистры. Поскольку внутренний стек может содержать только ограниченное число регистров, может возникнуть необходимость сохранить часть стека в памяти. [4] Это реализуется с помощью специальных регистров rO и rS, которые записывают, какая часть стека локальных регистров находится в памяти, а какая часть все еще находится в локальных физических регистрах. Стек регистров обеспечивает быстрое связывание подпрограмм.
Специальные регистры [ править ]
К 32 специальным физическим архитектурным регистрам относятся следующие:
- rB, регистр начальной загрузки (отключение)
- При отключении rB ← $255 и $255 ← rJ. Таким образом сохранив rJ в общем регистре.
- РД, реестр дивидендов
- Деление целого числа без знака использует это как левую половину 128-битного входного сигнала, который должен быть разделен на другой операнд.
- rE, регистр эпсилон
- Используется для плавающих сравнений относительно эпсилон.
- rH, регистр hisult
- Используется для хранения левой половины 128-битного результата умножения целых чисел без знака.
- rJ, регистр обратного перехода
- Используется для сохранения адреса следующей инструкции с помощью PUSH и POP для возврата из PUSH.
- rM, регистр маски мультиплексирования
- Используется инструкцией мультиплексирования.
- rR, регистр остатка
- Устанавливается на остаток целочисленного деления.
- rBB, регистр начальной загрузки (ловушка)
- При отлове rBB ← $255 и $255 ← rJ. Таким образом сохраняя rJ в общем регистре
- rC, счетчик циклов
- Увеличивается каждый цикл.
- рН, серийный номер
- Константа, идентифицирующая данный конкретный процессор MMIX.
- rO, смещение стека регистров
- Используется для реализации стека регистров.
- rS, указатель стека регистров
- Используется для реализации стека регистров.
- rI, счетчик интервалов
- Уменьшается каждый цикл. Вызывает прерывание при нулевом значении.
- rT, регистр адреса ловушки
- Используется для хранения адреса вектора отключения.
- rTT, регистр адреса динамической ловушки
- Используется для хранения адреса вектора ловушки.
- rK, регистр маски прерывания
- Используется для включения и отключения определенных прерываний.
- rQ, регистр запроса прерывания
- Используется для записи прерываний по мере их возникновения.
- RU, счетчик использования
- Используется для подсчета выполненных инструкций.
- rV, виртуальный регистр трансляции
- Используется для преобразования виртуальных адресов в физические адреса. Содержит размер и количество сегментов, корневое расположение таблицы страниц и номер адресного пространства.
- rG, глобальный пороговый регистр
- Все ссылки на регистры общего назначения с номером, большим или равным rG, относятся к глобальным регистрам.
- rL, локальный пороговый регистр
- Все ссылки на общие регистры с номером меньшим, чем rL, относятся к локальным регистрам.
- rA, регистр арифметического состояния
- Используется для записи, включения и отключения арифметических исключений, таких как переполнение и деление на ноль.
- РФ, регистр мест неисправностей
- Используется для хранения адреса инструкции, вызвавшей сбой.
- rP, регистр прогнозирования
- Используется условной заменой (CSWAP).
- rW, регистр прерывания (отключение)
- Используется при отключении для сохранения адреса инструкции после той, которая была прервана.
- rX, регистр выполнения (отключение)
- Используется при отключении для сохранения команды, которая была прервана.
- rY, операнд Y (отключение)
- Используется при отключении для сохранения операнда Y прерванной команды.
- rZ, операнд Z (отключение)
- Используется при отключении для сохранения операнда Z прерванной команды.
- rWW, регистр прерывания (ловушка)
- Используется при перехвате для сохранения адреса инструкции после той, которая была прервана.
- rXX, регистр выполнения (ловушка)
- Используется при перехвате для сохранения прерванной инструкции.
- rYY, операнд Y (ловушка)
- Используется при перехвате для сохранения операнда Y прерванной инструкции.
- rZZ, операнд Z (ловушка)
- Используется при перехвате для сохранения операнда Z прерванной инструкции.
Как и программы, работающие практически на всех других процессорах, Программы MMIX можно прервать несколькими способами. Внешнее оборудование, такое как таймеры, является распространенным источником вытесняющих прерываний . Многие инструкции вызывают прерывание в некоторых исключительных случаях; такие как защиты памяти исключения ошибок страницы , используемые для реализации виртуальной памяти, и обработка исключений с плавающей запятой . В MMIX есть два вида прерываний: «отключения» и «ловушки». Основное различие между «поездками» и «ловушками» состоит в том, что ловушки передают управление программе-обработчику ловушек в операционной системе (перехват), но отключения отправляют управление программе «обработчик отключения» в пользовательском приложении (отключение). Пользователи также могут принудительно запустить любой обработчик прерываний с помощью явных программных инструкций прерывания TRIP и TRAP, аналогично некоторым видам ловушек в других компьютерных системах. В частности, системный вызов из пользовательской программы в операционную систему использует инструкцию TRAP. [1] : 38
Аппаратные реализации [ править ]
По состоянию на октябрь 2015 г. [update], не существует известных аппаратных реализаций архитектуры набора команд MMIX. Однако fpgammix [5] Проект реализует MMIX в Verilog , что позволяет реализовать его с помощью программируемой вентильной матрицы .
Программные инструменты [ править ]
Архитектура набора команд MMIX поддерживается рядом программных инструментов для исследования компьютерной архитектуры и разработки программного обеспечения.
Симуляторы и ассемблер [ править ]
- MMIXware [6] – Простой (поведенческий) симулятор MMIX-SIM Дональда Кнута, ассемблер MMIXAL, набор тестов, примеры программ, полная документация и архитектурный (конвейерный) симулятор MMIX (
gzipped
tar
файл). - ММИКХ [7] – Графический пакет на базе X11 , предоставленный Эндрю Починским из Центра теоретической физики Массачусетского технологического института , который в сочетании с указанными выше источниками MMIXware дополняет виртуальную машину MMIX 640×480 пикселей полноцветным «виртуальным дисплеем» размером (для UNIX/Линукс).
Компилятор [ править ]
Коллекция компиляторов GNU MMIX включает в себя серверную часть для компиляторов C / C++ , предоставленную Хансом-Петером Нильссоном и являющуюся частью основного дистрибутива GCC с конца 2001 года. По состоянию на ноябрь 2017 года. [update]Серверная часть MMIX для GCC продолжает активно разрабатываться и поддерживаться добровольцами.
- Инструкции по установке инструментов GCC + MMIX от Ханса-Петера Нильссона. [8]
- §3.17.26. Опции MMIX для GNU GCC версии 7.2.0 [9] (Веб-сайт GNU GCC).
- §9.28. MMIX-зависимые функции [10] для GNU , начиная с GNU Binutils версии 2.29, серверной части ассемблера для GNU GCC (веб-сайт GNU Binutils).
Вышеупомянутые инструменты теоретически можно использовать для компиляции, сборки и загрузки всего ядра FreeBSD , Linux или другой подобной операционной системы на оборудование MMIX, если такое оборудование существует.
См. также [ править ]
- Образовательный язык программирования
- ДЛКС
- ЛК-3
- Маленький человечек-компьютер
- МикроСим
- СМЕШИВАНИЕ
- NAR 2 , еще один процессор, разработанный профессором, чтобы помочь студентам учиться.
Ссылки [ править ]
- ↑ Перейти обратно: Перейти обратно: а б Кнут, Дональд Э. (октябрь 1999 г.), MMIXware: RISC-компьютер для третьего тысячелетия , Конспекты лекций в учебнике по информатике, том. 1750, Гейдельберг: Springer-Verlag, ISBN 3-540-66938-8 (Ошибка)
- ^ «Дом MMIX: Сообщение от Дона Кнута» . mmix.cs.hm.edu . Проверено 23 мая 2021 г.
- ^ Кнут, Дональд (9 февраля 1999 г.). MMIX: RISC-компьютер нового тысячелетия (смещение 7:36). Стэнфордская лекция. Архивировано из оригинала 11 декабря 2021 г.
( Cray-1 + IBM 801 + RISC II + Clipper C300 + AMD 29k + Motorola 88k + IBM 601 + Intel i960 + Alpha 21164 + POWER2 + MIPS R4000 + Hitachi Super H4 + StrongARM 110 + SPARC 64) / 14 = 28126/14 = 2009 г.
- ↑ Перейти обратно: Перейти обратно: а б Кнут, Дональд (2005). «Раздел 1.4.2' ». MMIX — RISC-компьютер нового тысячелетия . Искусство компьютерного программирования. Том. 1, Фаск. 1. Эддисон Уэсли. п. 58.
- ^ магистр (24 августа 2008 г.). "фпгаммикс" . Репо.or.cz. Проверено 25 мая 2014 г.
- ^ «MMIXware» . Cs-faculty.stanford.edu . Проверено 25 мая 2014 г.
- ^ «ММИКС» . Малгил.com. 6 марта 2002 г. Проверено 25 мая 2014 г.
- ^ Инструкции по установке инструментов GCC + MMIX.
- ^ https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/MMIX-Options.html §3.17.26. ММИКС
- ^ «§9.28 Зависимые от MMIX функции» . Sourceware.org . Проверено 20 ноября 2017 г.
Дальнейшее чтение [ править ]
- Дональд Э. Кнут (2005). Искусство компьютерного программирования. Том 1. Выпуск 1: MMIX — RISC-компьютер для нового тысячелетия . Аддисон-Уэсли. ISBN 0-201-85392-2 (опечатки)
- Мартин Рукерт (2015). Дополнение MMIX, The: Дополнение к книге Дональда Э. Кнута «Искусство компьютерного программирования», тома 1, 2, 3 . Аддисон-Уэсли. ISBN 0-133-99231-4
Внешние ссылки [ править ]
- Домашняя страница MMIX
- Страница MMIX Дональда Кнута — краткое введение в MMIX и причины, по которым Кнут использовал гипотетический язык ассемблера в TAoCP.
- Новостная страница MMIX Дональда Кнута — симулятор с открытым исходным кодом , написанный на CWEB , руководство программиста и примеры программ.
- Веб-сайт MMIXmasters — веб-сайт для волонтеров (MMIXmasters), которые конвертируют все программы TAOCP, тома 1–3, из старого MIX в новый MMIX.
- VMMMIX. Архивировано 5 июля 2009 г. на Wayback Machine . VMMMIX — это виртуальная машина MMIX. Он имеет консоль, жесткий диск и порты ввода-вывода Ethernet. В настоящее время эта виртуальная машина работает только под управлением Windows. И Linux работает на этой виртуальной машине MMIX.
- Домашняя страница VMB — проект «Виртуальная материнская плата» предлагает набор устройств «подключай и работай», которые можно использовать с соответствующей версией ЦП MMIX.