Jump to content

МИКС (абстрактная машина)

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

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

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

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

Их образовательная цель очень похожа на Джона Л. Хеннесси и Дэвида А. Паттерсона из архитектуру DLX книги «Компьютерная организация и проектирование — Интерфейс аппаратного и программного обеспечения» .

Архитектура [ править ]

MIX — это гибридный двоично - десятичный компьютер. При программировании в двоичном формате каждый байт имеет 6 бит (значения варьируются от 0 до 63). В десятичной системе каждый байт имеет две десятичные цифры (значения варьируются от 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 (битовая позиция)
Регистры
± А1 А2 А3 A4 А5 рА , Аккумулятор
± Х1 Х2 Х3 х4 Х5 rX , расширение
Индексные регистры
  ± I1.4 I1.5 rI1 , Индекс 1
  ± I2.4 И2.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 также записывает, произошло ли переполнение предыдущей операции, и имеет индикатор сравнения с одной тритой (меньше, равно или больше).

Память и ввод/вывод [ править ]

Машина 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] and set comparison flag;
CMPX ADDR,i(0:5) сравнивать rX с memory[ADDR + rIi] and set comparison flag;
CMP? ADDR,i(0:5) сравнивать rI? с memory[ADDR + rIi] and set comparison flag;
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
if (rI?<0 or rI?==0 or rI?>0) then goto ADDR + rIi;
if (rI?>=0 or rI?!=0 or rI?<=0) then goto 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 был реализован в программном обеспечении:

Реализация MIX была создана для платы FPGA iCE40HX8K в 2021 году. [3]

См. также [ править ]

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

  1. ^ mix(1) – 9 лицевая страница руководства
  2. ^ Аппаратное обеспечение::Simulator::MIX Perl -модуль из CPAN
  3. ^ «Майкл Шрёдер/микс-фгпа» . ГитЛаб .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9f07a5f4de2a1316c27b62fe59ca7b2d__1714270920
URL1:https://arc.ask3.ru/arc/aa/9f/2d/9f07a5f4de2a1316c27b62fe59ca7b2d.html
Заголовок, (Title) документа по адресу, URL1:
MIX (abstract machine) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)