MMIX - MMIX

MMIX
ДизайнерДональд Кнут
Биты64-битный
ДизайнRISC
КодированиеФиксированный
РазветвлениеКод состояния
Порядок байтовБольшой
ОткрытьДа, и без лицензионных отчислений
Регистры
32 специальных регистра
Общее назначение256

MMIX (произносится em-mix) это 64-битный вычисление с сокращенным набором команд (RISC) архитектура разработано Дональд Кнут, со значительным вкладом Джон Л. Хеннесси (кто участвовал в разработке Архитектура MIPS ) и Ричарда Л. Сайта (который был архитектором Альфа архитектура). Кнут сказал, что «MMIX - это компьютер, предназначенный для иллюстрации аспектов программирования на машинном уровне. В моих книгах Искусство программирования, он заменяет СМЕШИВАНИЕ, машина в стиле 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 указывает регистр, используемый для хранения результата инструкции, а остальные определяют операнды инструкции. Каждое из этих полей имеет ширину восемь бит. Например, ДОБАВИТЬ $ 0, $ 1,3 означает «Установить $ 0 как сумму 1 и 3 долларов».

Большинство инструкций могут принимать либо немедленные значения, либо содержимое регистра; таким образом, одна мнемоника команды может соответствовать одному из двух кодов операции.

Программы MMIX обычно создаются с использованием языка ассемблера MMIXAL. Ниже представлена ​​простая программа MMIXAL, которая печатает строку "Привет, мир! ":

        LOC # 100% Первоначально установите для адреса программы% значение 0x100. GETA $ 255, строка% Поместите адрес строки% в регистр 255. TRAP 0, Fputs, StdOut% Запишите строку, на которую указывает регистр% 255, в регистр 255. стандартный выходной файл%. TRAP 0, Halt, 0% End process.string BYTE «Hello, world!», # A, 0% Строка для печати. #a - это% новая строка, 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, регистр обратного перехода
    Используется для сохранения адреса следующей инструкции с помощью PUSHes и 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 (сжатый деготь файл).
  • MMIXX[6] - An X11 графический пакет на основе Андрея Починского из Массачусетский технологический институт Центр теоретической физики, который в сочетании с указанными выше источниками MMIXware дополняет виртуальную машину MMIX 640 × 480 пикселей, истинный цвет «Виртуальный дисплей» (для UNIX / Linux).

Компилятор

В Коллекция компиляторов GNU включает MMIX бэкэнд для своего C /C ++ компиляторы, предоставленные Хансом-Петером Нильссоном и являющиеся частью основного дистрибутива GCC с конца 2001 г. По состоянию на ноябрь 2017 г.серверная часть MMIX для GCC продолжает активно развиваться и поддерживаться добровольцами.

  • Инструкции по установке инструментов GCC + MMIX от Ханса-Петера Нильссона.[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, если бы такое оборудование существовало.

Смотрите также

Рекомендации

  1. ^ а б Кнут, Дональд Э. (октябрь 1999 г.), MMIXware: RISC-компьютер для третьего тысячелетия, Конспект лекций в учебнике по информатике, 1750, Гейдельберг: Springer-Verlag, ISBN  3-540-66938-8 (Опечатки)
  2. ^ Кнут, Дональд (1999-02-09). MMIX: RISC-компьютер нового тысячелетия (смещение 7:36). Стэнфордская лекция. (Крей-1 + IBM 801 + RISC II + Машинка для стрижки C300 + 29k драм + Motorola 88k + IBM 601 + Intel i960 + Альфа 21164 + МОЩНОСТЬ2 + MIPS R4000 + Hitachi Super H4 + Сильная рука 110 + SPARC 64) / 14 = 28126 / 14 = 2009
  3. ^ а б Кнут, Дональд (2005). "Раздел 1.4.2'". MMIX - RISC-компьютер нового тысячелетия. Искусство программирования. Vol. 1, фас. 1. Эддисон Уэсли. п. 58.
  4. ^ мастер (2008-08-24). "fpgammix". Repo.or.cz. Получено 2014-05-25.
  5. ^ «MMIXware». Cs-faculty.stanford.edu. Получено 2014-05-25.
  6. ^ «MMIXX». Malgil.com. 2002-03-06. Получено 2014-05-25.
  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. Получено 2017-11-20.
  • Дональд Э. Кнут (2005). Искусство программирования, том 1, часть 1: MMIX - компьютер RISC для нового тысячелетия. Эддисон-Уэсли. ISBN  0-201-85392-2 (опечатки)

внешняя ссылка