Введение

64-битная RISC-архитектура, разработанная Дональдом Кнутом
архитектура набора команд

MMIX (произносится как "эм микс") — это 64-битная архитектура с упрощенным набором команд (RISC), разработанная Дональдом Кнутом с существенным вкладом Джона Л. Хеннесси (который участвовал в разработке архитектуры MIPS) и Ричарда Л. Сайта (который был архитектором архитектуры Alpha). Кнут говорил, что

MMIX — это компьютер, предназначенный для иллюстрации аспектов программирования на машинном уровне. В моих книгах «Искусство программирования» он заменяет MIX, машину образца 1960-х годов, которая ранее выполняла такую роль. Я стремился спроектировать MMIX так, чтобы его машинный язык был простым, элегантным и легким в освоении. В то же время я старался учесть всю сложность, необходимую для достижения высокой производительности на практике, чтобы MMIX в принципе можно было построить и, возможно, сделать конкурентоспособным с одними из самых быстрых компьютеров общего назначения на рынке. Кнут начал разработку MMIX в 1999 году и выпустил стабильную версию проекта в 2011 году. Процессор имеет номер «2009», поскольку, по словам Кнута, это среднее арифметическое от номеров других компьютерных архитектур, а также соответствует римской записи "MMIX".

Архитектура

MMIX — это 64-битный компьютер с прямой последовательностью байтов (big endian) и упрощенным набором команд (RISC), оснащенный 256 64-битными регистрами общего назначения, 32 64-битными специальными регистрами, инструкциями фиксированной длины 32 бита и 64-битным виртуальным адресным пространством. Набор инструкций MMIX состоит из 256 опкодов, один из которых зарезервирован для будущего расширения. MMIX использует числа с плавающей точкой в формате IEEE 754.

Реестры

В чипе MMIX имеется 256 архитектурных регистров общего назначения, адресуемых напрямую, обозначенных от $0 до $255, и 32 архитектурных регистра специального назначения. Доступ к регистрам специального назначения осуществляется с помощью инструкций GET и PUT. Два специальных регистра, rL и rG, определяют, какие из регистров общего назначения являются локальными, а какие – глобальными. Все регистры от $0 до ([rL] − 1) являются локальными регистрами и представляют собой окно во внутренний стек регистров. Это реализовано с помощью специальных регистров rO и rS, которые фиксируют, какая часть стека локальных регистров находится в памяти, а какая – в локальных физических регистрах. Стек регистров обеспечивает быстрое связывание подпрограмм.

Программные инструменты

Архитектура набора команд MMIX поддерживается рядом программных средств для исследований в области компьютерной архитектуры и разработки программного обеспечения.

Симуляторы и сборщики

MMIXware – простой (поведенческий) симулятор MMIX, ассемблер MMIXAL, набор тестов, примеры программ, полная документация и архитектурный (конвейерный) симулятор MMIX (архивный файл, сжатый с помощью gzip). MMIXX – графический пакет на основе X11, разработанный Эндрю Почински из Центра теоретической физики MIT, который в сочетании с исходными кодами MMIXware, описанными выше, расширяет возможности виртуальной машины MMIX, добавляя виртуальный дисплей с разрешением 640×480 пикселей и поддержкой true color (для UNIX/Linux).

Компилятор

GNU Compiler Collection включает в себя бэкэнд MMIX для своих компиляторов C/C++, разработанный Хансом Петером Нильссоном и являющийся частью основного дистрибутива GCC с конца 2001 года. По состоянию на 2017 год, бэкэнд MMIX для GCC продолжает активно разрабатываться и поддерживаться добровольцами. Инструкция по установке инструментов GCC + MMIX от Ханса Питера Нильсона. §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, если бы такое оборудование существовало.