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 специальным физическим архитектурным регистрам относятся следующие:
- 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.[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, если бы такое оборудование существовало.
Смотрите также
- Образовательный язык программирования
- DLX
- LC-3
- Маленький компьютер человека
- MikroSim
- СМЕШИВАНИЕ
- НАР 2, еще один процессор, разработанный профессором для помощи студентам в обучении.
Рекомендации
- ^ а б Кнут, Дональд Э. (октябрь 1999 г.), MMIXware: RISC-компьютер для третьего тысячелетия, Конспект лекций в учебнике по информатике, 1750, Гейдельберг: Springer-Verlag, ISBN 3-540-66938-8 (Опечатки)
- ^ Кнут, Дональд (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
- ^ а б Кнут, Дональд (2005). "Раздел 1.4.2'". MMIX - RISC-компьютер нового тысячелетия. Искусство программирования. Vol. 1, фас. 1. Эддисон Уэсли. п. 58.
- ^ мастер (2008-08-24). "fpgammix". Repo.or.cz. Получено 2014-05-25.
- ^ «MMIXware». Cs-faculty.stanford.edu. Получено 2014-05-25.
- ^ «MMIXX». Malgil.com. 2002-03-06. Получено 2014-05-25.
- ^ Инструкции по установке для инструментов GCC + MMIX
- ^ https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/MMIX-Options.html §3.17.26. MMIX
- ^ «Зависящие от §9.28 функции MMIX». Sourceware.org. Получено 2017-11-20.
- Дональд Э. Кнут (2005). Искусство программирования, том 1, часть 1: MMIX - компьютер RISC для нового тысячелетия. Эддисон-Уэсли. ISBN 0-201-85392-2 (опечатки)
внешняя ссылка
- Домашняя страница MMIX
- Страница Дональда Кнута MMIX - Краткое введение в MMIX и причины, по которым Кнут использовал гипотетический язык ассемблера в TAoCP.
- Страница новостей Дональда Кнута MMIX - An Открытый исходный код симулятор написан на CWEB, руководство программиста и примеры программ.
- Веб-сайт MMIXmasters - Веб-сайт для добровольцев (MMIXmasters), которые переводят все программы TAOCP, тома 1–3, со старого MIX на новый MMIX.
- VMMMIX - VMMMIX - виртуальная машина MMIX. Он имеет консоль, жесткий диск и ввод / вывод Ethernet. В настоящее время эта виртуальная машина работает только в Windows. И Linux работает на этой виртуальной машине MMIX.
- Домашняя страница VMB - Проект Virtual Motherboard Project предлагает набор устройств plug and play, которые можно использовать с соответствующей версией процессора MMIX.