Дизайнер | Дональд Кнут |
---|---|
Биты | 64-битный |
Дизайн | RISC |
Кодирование | Зафиксированный |
Разветвление | Код состояния |
Порядок байтов | Большой |
Открытым | Да, и без лицензионных отчислений |
Регистры | |
32 специальных регистра | |
Общее назначение | 256 |
MMIX (произносится как em-mix ) - это 64-битная архитектура вычислений с сокращенным набором команд (RISC), разработанная Дональдом Кнутом при значительном вкладе Джона Л. Хеннесси (который внес вклад в разработку архитектуры MIPS ) и Ричарда Л. Сайта ( который был архитектором архитектуры Альфа ). Кнут сказал, что «MMIX - это компьютер, предназначенный для иллюстрации аспектов программирования на машинном уровне. В моих книгах « Искусство компьютерного программирования » он заменяет MIX, машина в стиле 1960-х, которая раньше играла такую роль… Я стремился разработать MMIX так, чтобы ее машинный язык был простым, элегантным и легким для изучения. В то же время я тщательно включил все сложности, необходимые для достижения высокой производительности на практике, чтобы MMIX в принципе мог быть построен и, возможно, даже мог быть конкурентоспособным с некоторыми из самых быстрых универсальных компьютеров на рынке » [1]. ]
Процессор имеет номер «2009», и Кнут поясняет, что это среднее арифметическое чисел других компьютерных архитектур; а также "MMIX" римскими цифрами . [2]
Архитектура [ править ]
MMIX - это 64-разрядный компьютер с сокращенным набором команд (RISC) с обратным порядком байтов , имеющий 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, которая выводит строку « Hello, world! »:
LOC # 100% Установить адрес программы % изначально до 0x100.Main GETA $ 255, строка% Поместите адрес строки % в регистр 255. TRAP 0, Fputs, StdOut% Записать строку, на которую указывает % регистр 255 по стандарту % выходной файл. TRAP 0, Halt, 0% Завершить процесс.string BYTE "Hello, world!", # a, 0% Строка для печати. #a это % newline, 0 завершает % нить.
Регистры [ править ]
В микросхеме MMIX имеется 256 непосредственно адресуемых архитектурных регистров общего назначения, обозначенных от $ 0 до 255, и 32 специализированных архитектурных регистра. Доступ к специальным регистрам можно получить с помощью инструкций GET и PUT. Два специальных регистра, rL и rG, определяют, какой из общих регистров является локальным, а какой - глобальным. Все регистры от $ 0 ... ([rL] - 1) являются локальными регистрами и представляют собой окно во внутренний стек регистров. [3] Регистры из [rL] ... ([rG] - 1)являются «маргинальными регистрами», они всегда возвращают 0, если используются в качестве источника в операции. Использование маргинального регистра в качестве места назначения операции приведет к тому, что машина автоматически увеличит rL, чтобы включить этот регистр. Все регистры [rG] ... $ 255 называются глобальными регистрами и не являются частью стека регистров.
Стек локальных регистров [ править ]
Стек локальных регистров предоставляет каждой подпрограмме свои собственные локальные регистры rL, обозначенные от $ 0 до $ (rL - 1) . Каждый раз, когда вызывается подпрограмма, несколько локальных регистров опускаются вниз по стеку (сдвигая начало окна). Аргументы вызываемой подпрограммы остаются в оставшихся локальных регистрах. Когда подпрограмма завершает свою работу, она выталкивает ранее введенные регистры. Поскольку внутренний стек может содержать только конечное число регистров, может потребоваться сохранить часть стека в памяти. [3] Это реализовано с помощью специальных регистров rO и rS, которые регистрируют, какая часть стека локальных регистров находится в памяти, а какая часть все еще находится в локальных физических регистрах. Стек регистров обеспечивает быстрое связывание подпрограмм.
Специальные регистры [ править ]
К 32 специальным физическим архитектурным регистрам относятся следующие:
- rB, регистр начальной загрузки (поездка)
- При отключении rB ← 255 $ и 255 $ ← rJ. Таким образом сохраняется rJ в общем регистре.
- rD, регистр дивидендов
- Целочисленное деление без знака использует это как левую половину 128-битного ввода, которая должна быть разделена другим операндом.
- rE, эпсилон-регистр
- Используется для плавающих сравнений относительно эпсилона.
- rH, химический регистр
- Используется для хранения левой половины 128-битного результата умножения целых чисел без знака.
- rJ, регистр обратного перехода
- Используется для сохранения адреса следующей инструкции с помощью PUSH и POP для возврата из PUSH.
- rM, регистр маски мультиплексирования
- Используется мультиплексной инструкцией.
- rR, регистр остатка
- Устанавливается на остаток от целочисленного деления.
- rBB, регистр начальной загрузки (ловушка)
- При треппинге rBB ← $ 255 и $ 255 ← rJ. Таким образом, сохраняя rJ в общем регистре
- rC, счетчик циклов
- Увеличивается каждый цикл.
- rN, серийный номер
- Константа, идентифицирующая этот конкретный процессор MMIX.
- rO, смещение стека регистров
- Используется для реализации стека регистров.
- rS, указатель стека регистров
- Используется для реализации стека регистров.
- rI, счетчик интервалов
- Уменьшается каждый цикл. Вызывает прерывание при нуле.
- rT, регистр адреса прерывания
- Используется для хранения адреса вектора отключения.
- rTT, регистр адреса динамической ловушки
- Используется для хранения адреса вектора прерывания.
- rK, регистр маски прерывания
- Используется для включения и отключения определенных прерываний.
- rQ, регистр запроса прерывания
- Используется для записи прерываний по мере их возникновения.
- rU, счетчик использования
- Используется для подсчета выполненных инструкций.
- rV, виртуальный регистр перевода
- Используется для преобразования виртуальных адресов в физические. Содержит размер и количество сегментов, корневое расположение таблицы страниц и номер адресного пространства.
- rG, глобальный пороговый регистр
- Все ссылки на общие регистры с номером больше или равным rG относятся к глобальным регистрам.
- rL, локальный пороговый регистр
- Все ссылки на общие регистры с номером меньше rL относятся к локальным регистрам.
- rA, регистр арифметического статуса
- Используется для записи, включения и отключения арифметических исключений, таких как переполнение и деление на ноль.
- rF, регистр местоположения отказа
- Используется для хранения адреса инструкции, вызвавшей сбой.
- rP, регистр прогноза
- Используется условным свопом (CSWAP).
- rW, регистр прерывания (отключение)
- Используется при отключении для сохранения адреса инструкции после той, которая была прервана.
- rX, регистр выполнения (поездка)
- Используется при отключении для сохранения прерванной инструкции.
- rY, операнд Y (поездка)
- Используется при отключении для сохранения операнда Y прерванной инструкции.
- rZ, операнд Z (поездка)
- Используется при отключении для сохранения операнда Z прерванной инструкции.
- rWW, регистр прерывания (прерывание)
- Используется при захвате для сохранения адреса инструкции после той, которая была прервана.
- rXX, регистр выполнения (ловушка)
- Используется при захвате для сохранения прерванной инструкции.
- rYY, операнд Y (ловушка)
- Используется при захвате для сохранения операнда Y прерванной инструкции.
- rZZ, операнд Z (ловушка)
- Используется при захвате для сохранения операнда Z прерванной инструкции.
Как и программы, работающие почти на всех других процессорах, программы MMIX можно прерывать несколькими способами. Внешнее оборудование, такое как таймеры, является частым источником прерываний прерывания (вычислений) . Многие инструкции вызывают прерывание в определенных исключительных случаях; например, исключения ошибок страницы защиты памяти, используемые для реализации виртуальной памяти, и обработка исключений с плавающей запятой . MMIX имеет 2 типа прерываний: «отключения» и «ловушки». Основное различие между «отключениями» и «ловушками» состоит в том, что ловушки передают управление программе «обработчика ловушек» в операционной системе (перехват), а расцепления отправляют управление программе «обработчик прерывания» в пользовательском приложении (отключение).Пользователи также могут принудительно запустить любой обработчик прерывания с явныминструкции программного прерывания TRIP и TRAP, похожие на некоторые виды ловушек в других компьютерных системах. В частности, системный вызов из пользовательской программы в операционную систему использует инструкцию TRAP. [1] : 38
Аппаратные реализации [ править ]
По состоянию на октябрь 2015 [Обновить]года известных аппаратных реализаций архитектуры набора команд MMIX не существует. Однако проект fpgammix [4] реализует MMIX в Verilog , что делает возможным реализацию с использованием программируемой пользователем вентильной матрицы .
Программные инструменты [ править ]
Архитектура набора команд MMIX поддерживается рядом программных инструментов для исследования компьютерной архитектуры и разработки программного обеспечения.
Симуляторы и ассемблер [ править ]
- MMIXware [5] - простой (поведенческий) симулятор MMIX-SIM Дональда Кнута, ассемблер MMIXAL, набор тестов, примеры программ, полная документация и архитектурный (конвейерный) симулятор MMIX (
gzipped
tar
файл). - MMIXX [6] - An X11 -На графического пакет вклад Эндрю Pochinsky из MIT «Центра с теоретической физикой , которые в сочетании с источниками MMIXware выше, дополняющий виртуальную машину MMIX с 640 × 480 пикселей , полноцветный «виртуальным display '(для UNIX / Linux).
Компилятор [ править ]
GNU Compiler Collection включает в себя MMIX фоновым для своих C / C ++ компиляторов, внесли свой вклад Ханс-Петер Нильссон и части основного распространения GCC начиная с конца 2001 года по состоянию на ноябрь 2017 года [Обновить], то MMIX фоновым для GCC продолжает активно разработан и поддерживается волонтерами.
- Инструкции по установке для инструментов GCC + MMIX от Hans-Peter Nilsson. [7]
- §3.17.26. Опции MMIX для GNU GCC версии 7.2.0 [8] (веб-сайт GNU GCC).
- §9.28. MMIX-зависимые функции [9] для GNU , как с GNU Binutils версии 2,29, ассемблер фоновым для GNU GCC (GNU Binutils веб - сайта).
Вышеупомянутые инструменты теоретически можно было бы использовать для компиляции, сборки и начальной загрузки всего ядра FreeBSD , Linux или другой подобной операционной системы на оборудование MMIX, если бы такое оборудование существовало.
См. Также [ править ]
- Образовательный язык программирования
- DLX
- LC-3
- Маленький компьютер человека
- MikroSim
- СМЕШИВАНИЕ
- NAR 2 , еще один процессор, разработанный профессором для помощи студентам в обучении.
Ссылки [ править ]
- ^ a b Knuth, Дональд Э. (октябрь 1999 г.), MMIXware: RISC-компьютер для третьего тысячелетия , конспекты лекций в учебном пособии по компьютерным наукам , 1750 г. , Гейдельберг: Springer-Verlag, ISBN 3-540-66938-8 (Опечатки)
- ^ Кнут, Дональд (1999-02-09). MMIX: компьютер RISC для нового тысячелетия (смещение 7:36). Стэнфордская лекция.
(
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
- ^ a b Кнут, Дональд (2005). "Раздел 1.4.2 " ". MMIX - компьютер RISC для нового тысячелетия . Искусство программирования. Vol. 1, фас. 1. Эддисон Уэсли. п. 58.
- ^ мастер (2008-08-24). "fpgammix" . Repo.or.cz . Проверено 25 мая 2014 .
- ^ «MMIXware» . Cs-faculty.stanford.edu . Проверено 25 мая 2014 .
- ^ «MMIXX» . Malgil.com. 2002-03-06 . Проверено 25 мая 2014 .
- ^ Инструкции по установке для инструментов GCC + MMIX
- ^ https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/MMIX-Options.html §3.17.26. MMIX
- ^ "§9.28 Зависящие от MMIX функции" . Sourceware.org . Проверено 20 ноября 2017 .
- Дональд Э. Кнут (2005). Искусство программирования. Том 1, часть 1: MMIX - компьютер RISC для нового тысячелетия . Эддисон-Уэсли. ISBN 0-201-85392-2 (опечатки)
Внешние ссылки [ править ]
Викискладе есть медиафайлы по теме MMIX . |
- Домашняя страница MMIX
- Страница Дональда Кнута MMIX - краткое введение в MMIX и причины, по которым Кнут использовал гипотетический язык ассемблера в TAoCP.
- Страница новостей Дональда Кнута MMIX - симулятор с открытым исходным кодом, написанный на CWEB , руководство программиста и примеры программ.
- Веб-сайт MMIXmasters - Веб-сайт для добровольцев (MMIXmasters), которые переводят все программы TAOCP, тома 1–3, со старого MIX на новый MMIX.
- VMMMIX - VMMMIX - виртуальная машина MMIX. Он имеет консоль, жесткий диск и ввод / вывод Ethernet. В настоящее время эта виртуальная машина работает только в Windows. И Linux работает на этой виртуальной машине MMIX.
- Домашняя страница VMB - Проект виртуальной материнской платы предлагает набор устройств plug and play, которые можно использовать с соответствующей версией процессора MMIX.