Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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 специальным физическим архитектурным регистрам относятся следующие:

  1. rB, регистр начальной загрузки (поездка)
  2. При отключении rB ← 255 $ и 255 $ ← rJ. Таким образом сохраняется rJ в общем регистре.
  3. rD, регистр дивидендов
    Целочисленное деление без знака использует это как левую половину 128-битного ввода, которая должна быть разделена другим операндом.
  4. rE, эпсилон-регистр
    Используется для плавающих сравнений относительно эпсилона.
  5. rH, химический регистр
    Используется для хранения левой половины 128-битного результата умножения целых чисел без знака.
  6. rJ, регистр обратного перехода
    Используется для сохранения адреса следующей инструкции с помощью PUSH и POP для возврата из PUSH.
  7. rM, регистр маски мультиплексирования
    Используется мультиплексной инструкцией.
  8. rR, регистр остатка
    Устанавливается на остаток от целочисленного деления.
  9. rBB, регистр начальной загрузки (ловушка)
    При треппинге rBB ← $ 255 и $ 255 ← rJ. Таким образом, сохраняя rJ в общем регистре
  10. rC, счетчик циклов
    Увеличивается каждый цикл.
  11. rN, серийный номер
    Константа, идентифицирующая этот конкретный процессор MMIX.
  12. rO, смещение стека регистров
    Используется для реализации стека регистров.
  13. rS, указатель стека регистров
    Используется для реализации стека регистров.
  14. rI, счетчик интервалов
    Уменьшается каждый цикл. Вызывает прерывание при нуле.
  15. rT, регистр адреса прерывания
    Используется для хранения адреса вектора отключения.
  16. rTT, регистр адреса динамической ловушки
    Используется для хранения адреса вектора прерывания.
  17. rK, регистр маски прерывания
    Используется для включения и отключения определенных прерываний.
  18. rQ, регистр запроса прерывания
    Используется для записи прерываний по мере их возникновения.
  19. rU, счетчик использования
    Используется для подсчета выполненных инструкций.
  20. rV, виртуальный регистр перевода
    Используется для преобразования виртуальных адресов в физические. Содержит размер и количество сегментов, корневое расположение таблицы страниц и номер адресного пространства.
  21. rG, глобальный пороговый регистр
    Все ссылки на общие регистры с номером больше или равным rG относятся к глобальным регистрам.
  22. rL, локальный пороговый регистр
    Все ссылки на общие регистры с номером меньше rL относятся к локальным регистрам.
  23. rA, регистр арифметического статуса
    Используется для записи, включения и отключения арифметических исключений, таких как переполнение и деление на ноль.
  24. rF, регистр местоположения отказа
    Используется для хранения адреса инструкции, вызвавшей сбой.
  25. rP, регистр прогноза
    Используется условным свопом (CSWAP).
  26. rW, регистр прерывания (отключение)
    Используется при отключении для сохранения адреса инструкции после той, которая была прервана.
  27. rX, регистр выполнения (поездка)
    Используется при отключении для сохранения прерванной инструкции.
  28. rY, операнд Y (поездка)
    Используется при отключении для сохранения операнда Y прерванной инструкции.
  29. rZ, операнд Z (поездка)
    Используется при отключении для сохранения операнда Z прерванной инструкции.
  30. rWW, регистр прерывания (прерывание)
    Используется при захвате для сохранения адреса инструкции после той, которая была прервана.
  31. rXX, регистр выполнения (ловушка)
    Используется при захвате для сохранения прерванной инструкции.
  32. rYY, операнд Y (ловушка)
    Используется при захвате для сохранения операнда Y прерванной инструкции.
  33. 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 , еще один процессор, разработанный профессором для помощи студентам в обучении.

Ссылки [ править ]

  1. ^ a b Knuth, Дональд Э. (октябрь 1999 г.), MMIXware: RISC-компьютер для третьего тысячелетия , конспекты лекций в учебном пособии по компьютерным наукам , 1750 г. , Гейдельберг: Springer-Verlag, ISBN 3-540-66938-8 (Опечатки)
  2. ^ Кнут, Дональд (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
  3. ^ a b Кнут, Дональд (2005). "Раздел 1.4.2 " ". MMIX - компьютер RISC для нового тысячелетия . Искусство программирования. Vol. 1, фас. 1. Эддисон Уэсли. п. 58.
  4. ^ мастер (2008-08-24). "fpgammix" . Repo.or.cz . Проверено 25 мая 2014 .
  5. ^ «MMIXware» . Cs-faculty.stanford.edu . Проверено 25 мая 2014 .
  6. ^ «MMIXX» . Malgil.com. 2002-03-06 . Проверено 25 мая 2014 .
  7. ^ Инструкции по установке для инструментов GCC + MMIX
  8. ^ https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/MMIX-Options.html §3.17.26. MMIX
  9. ^ "§9.28 Зависящие от MMIX функции" . Sourceware.org . Проверено 20 ноября 2017 .
  • Дональд Э. Кнут (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.