MMIX - MMIX
Дизайнер | Дональд Кнут |
---|---|
Биты | 64-битный |
Введено | 1999 г. |
Дизайн | RISC |
Кодирование | Фиксированный |
Разветвление | Код состояния |
Порядок байтов | Большой |
Открытым | Да, и без лицензионных отчислений |
Регистры | |
32 специальных регистра | |
Общее назначение | 256 |
MMIX (произносится как em-mix ) - это 64-битная архитектура вычислений с сокращенным набором команд (RISC), разработанная Дональдом Кнутом при значительном вкладе Джона Л. Хеннесси (который внес свой вклад в разработку архитектуры MIPS ) и Ричарда Л. Сайта ( который был архитектором архитектуры Альфа ). Кнут сказал, что
MMIX - это компьютер, предназначенный для иллюстрации аспектов программирования на уровне машины. В моих книгах «Искусство программирования» он заменяет MIX , машину в стиле 1960-х, которая раньше играла такую роль… Я стремился спроектировать MMIX так, чтобы ее машинный язык был простым, элегантным и легким для изучения. В то же время я тщательно включил все сложности, необходимые для достижения высокой производительности на практике, чтобы MMIX в принципе мог быть построен и даже, возможно, мог конкурировать с некоторыми из самых быстрых универсальных компьютеров на рынке ».
Кнут начал разработку MMIX в 1999 году и выпустил стабильную версию проекта в 2011 году. Процессор имеет номер «2009», и Кнут поясняет, что это среднее арифметическое из чисел других компьютерных архитектур; а также быть "MMIX" римскими цифрами .
Архитектура
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 % 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) являются локальными регистрами и представляют собой окно во внутренний стек регистров. Регистры из [rL] ... ([rG] - 1) являются «маргинальными регистрами», они всегда возвращают 0, если используются в качестве источника в операции. Использование маргинального регистра в качестве места назначения операции приведет к тому, что машина автоматически увеличит rL, чтобы включить этот регистр. Все регистры [rG] ... $ 255 называются глобальными регистрами и не являются частью стека регистров.
Стек локальных регистров
Стек локальных регистров предоставляет каждой подпрограмме свои собственные локальные регистры rL, обозначенные от $ 0 до $ (rL - 1) . Каждый раз, когда вызывается подпрограмма, несколько локальных регистров опускаются вниз по стеку (сдвигая начало окна). Аргументы вызываемой подпрограммы остаются в оставшихся локальных регистрах. Когда подпрограмма завершает свою работу, она выталкивает ранее введенные регистры. Поскольку внутренний стек может содержать только конечное число регистров, может потребоваться сохранить часть стека в памяти. Это реализовано с помощью специальных регистров rO и rS, которые записывают, какая часть стека локальных регистров находится в памяти, а какая часть все еще находится в локальных физических регистрах. Стек регистров обеспечивает быстрое связывание подпрограмм.
Специальные регистры
К 32 специальным физическим архитектурным регистрам относятся следующие:
- rB, регистр начальной загрузки (поездка)
- При отключении rB ← 255 $ и 255 $ ← rJ. Таким образом сохраняется rJ в общем регистре.
-
rD, регистр дивидендов
- Беззнаковое целочисленное деление использует это как левую половину 128-битного ввода, которая должна быть разделена другим операндом.
-
rE, эпсилон-регистр
- Используется для плавающих сравнений относительно эпсилона.
-
rH, химический регистр
- Используется для хранения левой половины 128-битного результата умножения целых чисел без знака.
-
rJ, регистр обратного перехода
- Используется для сохранения адреса следующей инструкции с помощью PUSHes и 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.
Аппаратные реализации
По состоянию на октябрь 2015 года известных аппаратных реализаций архитектуры набора команд MMIX не существует. Однако проект fpgammix реализует MMIX в Verilog , что делает возможным реализацию с использованием программируемой пользователем вентильной матрицы .
Программные инструменты
Архитектура набора команд MMIX поддерживается рядом программных инструментов для исследования компьютерной архитектуры и разработки программного обеспечения.
Симуляторы и ассемблер
- MMIXware - простой (поведенческий) симулятор MMIX-SIM Дональда Кнута, ассемблер MMIXAL, набор тестов, примеры программ, полная документация и архитектурный (конвейерный) симулятор MMIX (
gzipped
tar
файл). - MMIXX - An X11 -На графический пакет вклад Эндрю Pochinsky из MIT «ы Центра теоретической физики , которые в сочетании с источниками MMIXware выше, дополняющая виртуальная машина MMIX с 640 × 480 пикселей , полноцветный „виртуального дисплея“( для UNIX / Linux).
Компилятор
GNU Compiler Collection включает в себя MMIX фоновым для своих C / C ++ компиляторов, внесли свой вклад Ханс-Петер Нильссон и части основного распространения GCC начиная с конца 2001 года по состоянию на ноябрь 2017 г. MMIX фоновым для GCC продолжает активно разработан и поддерживается волонтерами.
- Инструкции по установке инструментов GCC + MMIX от Hans-Peter Nilsson.
- §3.17.26. Параметры MMIX для GNU GCC версии 7.2.0 (веб-сайт GNU GCC).
- §9.28. MMIX-зависимые функции для GNU , как с GNU Binutils версии 2.29, ассемблер фоновым для GNU GCC (GNU Binutils веб - сайта).
Вышеупомянутые инструменты теоретически можно было бы использовать для компиляции, сборки и начальной загрузки всего ядра FreeBSD , Linux или другой подобной операционной системы на оборудование MMIX, если бы такое оборудование существовало.
Смотрите также
- Образовательный язык программирования
- DLX
- LC-3
- Маленький компьютер человека
- MikroSim
- СМЕШИВАНИЕ
- NAR 2 , еще один процессор, разработанный профессором для помощи студентам в обучении.
использованная литература
- Дональд Э. Кнут (2005). Искусство программирования. Том 1, часть 1: MMIX - компьютер RISC для нового тысячелетия . Эддисон-Уэсли. ISBN 0-201-85392-2 (опечатки)
внешние ссылки
- Домашняя страница 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.