СМЕСЬ - MIX

СМЕШИВАНИЕ
Дизайнер Дональд Кнут
Биты 31-битный
Введено 1968 г.
Дизайн аккумуляторная машина
Тип гипотетический
Кодирование Фиксированный
Разветвление Код состояния и проверка регистра
Порядок байтов Большой
Открытым Да, и без лицензионных отчислений
Регистры
Всего 9

MIX - это гипотетический компьютер, использованный в монографии Дональда Кнута « Искусство компьютерного программирования» ( TAOCP ). Номер модели MIX - 1009, который был получен путем объединения номеров моделей и названий нескольких современных коммерческих машин, которые автор считает важными. Кроме того, «MIX» читается как римская цифра 1009.

На смену MIX 1960-х годов пришла новая (тоже гипотетическая) компьютерная архитектура MMIX , которая будет включена в следующие выпуски TAOCP .

Программные реализации как для архитектур MIX, так и для MMIX были разработаны Knuth и сделаны в свободном доступе (названные «MIXware» и «MMIXware» соответственно). Также существует несколько производных эмуляторов MIX / MMIX Кнута. GNU MDK - один из таких программных пакетов; он бесплатный и работает на самых разных платформах.

Их цель образования очень похожа на Джон Л. Хеннесси «s и David A. Patterson » s DLX архитектуру, от компьютера Организации и дизайна - Аппаратный интерфейс программного обеспечения .

Архитектура

MIX представляет собой гибрид бинарного - десятичное компьютер. При программировании в двоичном формате каждый байт имеет 6 бит (значения от 0 до 63). В десятичном формате каждый байт состоит из 2 десятичных цифр (значения от 0 до 99). Байты сгруппированы в слова по пять байтов плюс знак. Большинство программ, написанных для MIX, будут работать как в двоичном, так и в десятичном формате, если они не пытаются сохранить значение больше 63 в одном байте.

Слово имеет диапазон от -1 073 741 823 до 1 073 741 823 (включительно) в двоичном режиме и от -9 999 999 999 до 9 999 999 999 (включительно) в десятичном режиме. Вход и магнитуды представление целых чисел в MIX архитектуре различает между «-0» и «+0» . Это контрастирует с современными компьютерами, чье представление целых величин с дополнением до двух включает единственное представление для нуля, но чей диапазон для данного количества битов включает на одно отрицательное целое число больше, чем количество представимых положительных целых чисел.

Регистры MIX
3 0 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (битовая позиция)
Регистры
± A1 A2 A3 A4 A5 rA , аккумулятор
± X1 X2 X3 X4 X5 rX , Расширение
Индексные регистры
  ± I1.4 I1.5 rI1 , индекс 1
  ± I2.4 I2.5 rI2 , Индекс 2
  ± I3.4 I3.5 rI3 , Индекс 3
  ± I4.4 I4.5 rI4 , Индекс 4
  ± I5.4 I5.5 rI5 , Индекс 5
  ± I6.4 I6.5 rI6 , Индекс 6
Счетчик команд
  J4 J5 rJ , прыжок
Флаги кода условия
  О Флаг переполнения
  <=> Флаг сравнения

Регистры

В MIX 9 регистров :

  • rA : Аккумулятор (полное слово, пять байтов и знак).
  • rX : расширение (полное слово, пять байтов и знак).
  • rI1 , rI2 , rI3 , rI4 , rI5 , rI6 : индексные регистры (два байта и знак).
  • rJ : адрес перехода (два байта, всегда положительный).

Предполагается, что байт должен быть не менее 6 бит. В большинстве инструкций можно указать, какое из «полей» (байтов) регистра должно быть изменено, используя суффикс формы (первое: последнее) . Нулевое поле - это однобитовый знак.

MIX также записывает ли переполнение предыдущей операции, и имеет одно- Trit индикатора сравнения (меньше, равно или больше , чем).

Память и ввод / вывод

Машина MIX имеет 4000 слов памяти (каждое с 5 байтами и знаком) с адресами от 0 до 3999. Также включены различные устройства ввода и вывода:

  • Ленточные блоки (устройства 0… 7).
  • Дисковые или барабанные агрегаты (аппараты 8… 15).
  • Картридер (устройство 16).
  • Карточный перфоратор (устройство 17).
  • Линейный принтер (устройство 18).
  • Терминал для пишущей машинки (прибор 19).
  • Бумажная лента (прибор 20).

инструкции

Каждая машинная инструкция в памяти занимает одно слово и состоит из 4 частей: адреса (2 байта и знак слова) в памяти для чтения или записи; спецификацию индекса (1 байт, описывающий, какой регистр индекса rI использовать) для добавления к адресу; модификация (1 байт), которая указывает, какие части регистра или ячейки памяти будут прочитаны или изменены; и код операции (1 байт). Все коды операций имеют связанную мнемонику.

3 0 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0
± Адрес Показатель Модификация Операция

Программы MIX часто используют самомодифицирующийся код, в частности, для возврата из подпрограммы, поскольку в MIX отсутствует стек автоматического возврата подпрограммы. Самомодифицирующемуся коду способствует байт модификации, позволяющий программе сохранять данные, например, в адресной части целевой инструкции, оставляя остальную часть инструкции неизменной.

Программы MIX обычно создаются с использованием языка ассемблера MIXAL; например, см. страницу со списком программ hello world .

LDA ADDR,i(0:5) rA := memory[ADDR + rIi];
LDX ADDR,i(0:5) rX := memory[ADDR + rIi];
LD? ADDR,i(0:5) rI? := memory[ADDR + rIi];
LDAN ADDR,i(0:5) rA := - memory[ADDR + rIi];
LDXN ADDR,i(0:5) rX := - memory[ADDR + rIi];
LD?N ADDR,i(0:5) rI? := - memory[ADDR + rIi];
STA ADDR,i(0:5) memory[ADDR + rIi] := rA;
STX ADDR,i(0:5) memory[ADDR + rIi] := rX;
ST? ADDR,i(0:5) memory[ADDR + rIi] := rI?;
STJ ADDR,i(0:5) memory[ADDR + rIi] := rJ;
STZ ADDR,i(0:5) memory[ADDR + rIi] := 0;
ADD ADDR,i(0:5) rA := rA + memory[ADDR + rIi];
SUB ADDR,i(0:5) rA := rA - memory[ADDR + rIi];
MUL ADDR,i(0:5) (rA,rX) := rA * memory[ADDR + rIi];
DIV ADDR,i(0:5)
rA := int( (rA,rX) / memory[ADDR + rIi] );
rX := (rA,rX) % memory[ADDR + rIi];
ENTA ADDR,i rA := ADDR + rIi;
ENTX ADDR,i rX := ADDR + rIi;
ENT? ADDR,i rI? := ADDR + rIi;
ENNA ADDR,i rA := - ADDR - rIi;
ENNX ADDR,i rX := - ADDR - rIi;
ENN? ADDR,i rI? := - ADDR - rIi;
INCA ADDR,i rA := rA + ADDR + rIi;
INCX ADDR,i rX := rX + ADDR + rIi;
INC? ADDR,i rI? := rI? + ADDR + rIi;
DECA ADDR,i rA := rA - ADDR - rIi;
DECX ADDR,i rX := rX - ADDR - rIi;
DEC? ADDR,i rI? := rI? - ADDR - rIi;
CMPA ADDR,i(0:5) сравнить rAсmemory[ADDR + rIi];
CMPX ADDR,i(0:5) сравнить rXсmemory[ADDR + rIi];
CMP? ADDR,i(0:5) сравнить rI?сmemory[ADDR + rIi];
JMP ADDR,i
rJ := address of next instruction;
goto ADDR + rIi;
JSJ ADDR,i goto ADDR + rIi;
JOV ADDR,i
if (overflow) then
   overflow := false; 
   goto ADDR + rIi;
JNOV ADDR,i
if (no overflow) then
    goto ADDR + rIi;
else 
    overflow := false;
JL, JE, JG ADDR,i
JGE, JNE, JLE ADDR,i
if (less, equal, greater) then goto ADDR + rIi;
if (no less, unequal, no greater) then goto ADDR + rIi;
JAN/JAZ/JAP ADDR,i
JANN/JANZ/JANP ADDR,i
if (rA<0 or rA==0 or rA>0) then goto ADDR + rIi;
if (rA>=0 or rA!=0 or rA<=0) then goto ADDR + rIi;
JXN/JXZ/JXP ADDR,i
JXNN/JXNZ/JXNP ADDR,i
if (rX<0 or rX==0 or rX>0) then goto ADDR + rIi;
if (rX>=0 or rX!=0 or rX<=0) then goto ADDR + rIi;
J?N/J?Z/J?P ADDR,i
J?NN/J?NZ/J?NP ADDR,i
если (rI? <0 или rI? == 0 или rI?> 0), то перейти к ADDR + rIi;
если (rI?> = 0 или rI?! = 0 или rI? <= 0), то перейти к ADDR + rIi;
MOVE ADDR,i(F)
for (n = 0; n < F; n++, rI1++)
    memory[rI1] := memory[ADDR+rIi+n];
SLA/SRA ADDR,i
SLAX/SRAX ADDR,i
SLC/SRC ADDR,i
сдвиг rAвлево / вправо на ADDR+rIiбайты
сдвиг (rA,rX)влево / вправо на ADDR+rIiбайты
поворот (rA,rX)влево / вправо на ADDR+rIiбайты
NOP ничего не делать;
HLT остановить исполнение;
IN ADDR,i(F) чтения в одном блоке из блока ввода F
в memory[ADDR + rIi]год;
OUT ADDR,i(F) Выход один блок в блок F
из memory[ADDR + rIi]года;
IOC ADDR,i(F) отправить команду управления на блок ввода / вывода F;
JRED ADDR,i(F) if (i/o unit F is ready) then goto ADDR + rIi;
JBUS ADDR,i(F) if (i/o unit F is busy) then goto ADDR + rIi;
NUM rA := numerical value of characters in (rA,rX);
CHAR (rA,rX) := character codes representing value of rA;

Реализации

Программное обеспечение MIX реализовано:

  • MIXWare Кнута и производный GNU MDK ;
  • Микс 9front (1); а также
  • Оборудование :: Симулятор :: MIX на CPAN .

Реализация MIX на ПЛИС была создана для платы iCE40HX8K-EVB в 2021 году.

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

использованная литература

внешние ссылки