MIX — це гіпотетичний комп'ютер, що застосовується в монографії Дональда Кнута, «Мистецтво програмування». Номер моделі комп'ютера MIX — 1009, є комбінацією номерів і назв комерційних моделей машин, сучасних часу написання книги, які здалися автору значущими. Крім того, «MIX» дорівнює 1009 в Римській системі числення.
MIX 1960-х був замінений новою (також гіпотетичною) комп'ютерною архітектурою, MMIX, яка буде включена в очікуваній редакції TAOCP. Програмні реалізації MIX і MMIX архітектур розроблені різними авторами й вільно доступні (наприклад, розроблені самим Кнутом MIXware і MMIXware).
Існують MIX/MMIX емулятори, які забезпечують роботу програмного забезпечення для комп'ютерів MIX на інших архітектурах. Одним із таких пакетів програмного забезпечення є ; він є вільним і працює на різних платформах.
Архітектура
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 9 регістрів:
- rA: Акумуляторний регістр (accumulator): повне слово (full word), п'ять байт зі знаком;
- rX: Розширення (extension): повне слово, п'ять байт зі знаком;
- 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 байт). Всі коди операції мають словесні позначення.
Програми MIX часто використовують код який самомодифікується, зокрема, щоб повернутися з підпрограми, так як в MIX відсутній автоматичний стек підпрограм.
Програми для комп'ютера MIX звичайно пишуться на MIXAL асемблері.
Команди завантаження
Вміст поля за адресою [ADDR + rIi (вміст регістра I з індексом i)] завантажується в регістр.
LDA ADDR, i(0 : 5) | rA := memory[ ADDR + rIi ]; | завантажити в A |
---|---|---|
LDX ADDR, i(0 : 5) | rX := memory[ ADDR + rIi ]; | завантажити в X |
LDi ADDR, i(0 : 5) | rIi := memory[ ADDR + rIi ]; | завантажити в I з індексом i |
LDAN ADDR, i(0 : 5) | rA := -memory[ ADDR + rIi ]; | завантажити в A з протилежним знаком |
LDXN ADDR, i(0 : 5) | rX := -memory[ ADDR + rIi ]; | завантажити в X з протилежним знаком |
LDiN ADDR, i(0 : 5) | rIi := -memory[ ADDR + rIi ]; | завантажити в Ii з протилежним знаком |
Команди запису в пам'ять
Записує вміст регістра в елемент пам'яті з адресою [ADDR + rIi]
STA ADDR, i(0 : 5) | memory[ ADDR + rIi ] := rA; | записати A |
---|---|---|
STX ADDR, i(0 : 5) | memory[ ADDR + rIi ] := rX; | записати X |
STi ADDR, i(0 : 5) | memory[ ADDR + rIi ] := rIi; | записати Ii |
STJ ADDR, i(0 : 5) | memory[ ADDR + rIi ] := rJ; | записати J |
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? := 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) | compare rA with memory[ ADDR + rIi ]; |
---|---|
CMPX ADDR, i(0 : 5) | compare rX with memory[ ADDR + rIi ]; |
CMP? ADDR, i(0 : 5) | compare rI? with memory[ ADDR + rIi ]; |
Команди переходу
JMP ADDR, i | goto ADDR + rIi; |
---|---|
JSJ ADDR, i | goto ADDR + rIi; rJ не міняється! |
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[ ADDR + rIi + n ] := memory[ rI1 ]; |
---|---|
SLA/SRA ADDR, i SLAX/SRAX ADDR, i SLC/SRC ADDR, i | shift rA to the left/right by ADDR+rIi bytes shift (rA, rX) to the left/right by ADDR+rIi bytes rotate (rA, rX) to the left/right by ADDR+rIi bytes |
NOP | do nothing; |
HLT | halt execution; |
Команди введення-виведення
IN ADDR, i( F ) | read in one block from input unit F into memory[ ADDR + rIi ] onwards; |
---|---|
OUT ADDR, i( F ) | output one block to unit F from memory[ ADDR + rIi ] onwards; |
IOC ADDR, i( F ) | send control instruction to i/o unit 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; |
Посилання
- MMIX 2009: A RISC Computer for the Third Millennium [ 16 липня 2011 у Wayback Machine.] Knuth’s official MIX page
- MMIX News [ 16 липня 2011 у Wayback Machine.] Knuth’s official MIX news
- MMIXware: A RISC Computer for the Third Millennium [ 16 липня 2011 у Wayback Machine.] Knuth’s official MIX book
- Open Directory: Computers: Programming: Languages: Assembly: MIX-MMIX [ 17 вересня 2011 у Wayback Machine.] many MIX-MMIX/MIXAL-MMIXAL links
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
MIX ce gipotetichnij komp yuter sho zastosovuyetsya v monografiyi Donalda Knuta Mistectvo programuvannya Nomer modeli komp yutera MIX 1009 ye kombinaciyeyu nomeriv i nazv komercijnih modelej mashin suchasnih chasu napisannya knigi yaki zdalisya avtoru znachushimi Krim togo MIX dorivnyuye 1009 v Rimskij sistemi chislennya MIX 1960 h buv zaminenij novoyu takozh gipotetichnoyu komp yuternoyu arhitekturoyu MMIX yaka bude vklyuchena v ochikuvanij redakciyi TAOCP Programni realizaciyi MIX i MMIX arhitektur rozrobleni riznimi avtorami j vilno dostupni napriklad rozrobleni samim Knutom MIXware i MMIXware Isnuyut MIX MMIX emulyatori yaki zabezpechuyut robotu programnogo zabezpechennya dlya komp yuteriv MIX na inshih arhitekturah Odnim iz takih paketiv programnogo zabezpechennya ye vin ye vilnim i pracyuye na riznih platformah ArhitekturaMIX yavlyaye soboyu gibridnij dvijkovo desyatkovij komp yuter Koli komp yuter programuyetsya u dvijkovomu rezhimi kozhen bajt maye 6 bit znachennya vid 0 do 63 U desyatkovomu rezhimi kozhen bajt maye 2 desyatkovih znaki znachennya vid 0 do 99 Bajti zgrupovani v slova po p yat bajt zi znakom Bilshist program napisanih dlya MIX budut pracyuvati yak u dvijkovomu tak i v desyatkovomu rezhimah poki voni ne sprobuyut zberegti znachennya bilshe 63 v odnomu bajti Znachennya slova mozhe zminyuvatisya v mezhah vid 1 073 741 823 do 1 073 741 823 vklyuchno u dvijkovomu rezhimi j vid 9 999 999 999 do 9 999 999 999 vklyuchno v desyatkovomu rezhimi U komp yuteri MIX rozriznyayutsya chisla 0 i 0 chogo nemaye na suchasnih komp yuterah v yakih ye tilki odne podannya nulya a kilkist negativnih chisel yaki mozhut buti predstavleni pevnoyu kilkistyu bit na odinicyu bilsha kilkosti pozitivnih chisel Registri U komp yuteri MIX 9 registriv rA Akumulyatornij registr accumulator povne slovo full word p yat bajt zi znakom rX Rozshirennya extension povne slovo p yat bajt zi znakom rI1 rI2 rI3 rI4 rI5 rI6 Indeksni registri Dva bajti i znak rJ Adresa perehodu dva bajti zavzhdi pozitivnij Vvazhayetsya sho bajt maye yak minimum 6 bit Bilshist instrukcij mozhut vkazuvati yaki z poliv bajt registra potribno zminiti vikoristovuyuchi sufiks u formi pershij ostannij Nulove pole odnobitovih znak MIX takozh zapisuye chi viklikala poperednya operaciya perepovnennya i odin z troh indikatoriv menshe dorivnyuye abo bilshe Na diagrami nizhche kozhen registr pokazanij rozdilenim na svoyi polya A1 A2 A3 A4 A5 X1 X2 X3 X4 X5 J4 J5 OV lt gt I1 4 I1 5 I2 4 I2 5 I3 4 I3 5 I4 4 I4 5 I5 4 I5 5 I6 4 I6 5 Pam yat i vvedennya vivedennya Komp yuter MIX maye 4000 sliv zberigannya kozhne po 5 bajt zi znakom sho adresuyutsya z 0 do 3999 Krim togo ye bagato pristroyiv vvedennya ta vivedennya Magnitofonni pristroyi pristroyi 0 7 Disk abo barabanni pristroyi pristroyi 8 15 Pristrij chitannya kart pristrij 16 Kartkovij perforator pristrij 17 Poryadkovij printer pristrij 18 Drukarska mashinka pristrij 19 Perfostrichka pristrij 20 Instrukciyi Kozhna mashinna instrukciya v pam yati zajmaye odne slovo j skladayetsya z 4 chastin adresa 2 bajti zi znakom u pam yati dlya chitannya abo zapisu vkazivka indeksnogo registra 1 bajt sho viznachaye yakij indeksnij registr rI vikoristovuvati dlya dodavannya do adresi modifikaciya 1 bajt sho viznachaye yaki chastini registra abo komirki pam yati budut prochitani abo zmineni i kod operaciyi 1 bajt Vsi kodi operaciyi mayut slovesni poznachennya Programi MIX chasto vikoristovuyut kod yakij samomodifikuyetsya zokrema shob povernutisya z pidprogrami tak yak v MIX vidsutnij avtomatichnij stek pidprogram Programi dlya komp yutera MIX zvichajno pishutsya na MIXAL asembleri Komandi zavantazhennya Vmist polya za adresoyu ADDR rIi vmist registra I z indeksom i zavantazhuyetsya v registr LDA ADDR i 0 5 rA memory ADDR rIi zavantazhiti v A LDX ADDR i 0 5 rX memory ADDR rIi zavantazhiti v X LDi ADDR i 0 5 rIi memory ADDR rIi zavantazhiti v I z indeksom i LDAN ADDR i 0 5 rA memory ADDR rIi zavantazhiti v A z protilezhnim znakom LDXN ADDR i 0 5 rX memory ADDR rIi zavantazhiti v X z protilezhnim znakom LDiN ADDR i 0 5 rIi memory ADDR rIi zavantazhiti v Ii z protilezhnim znakom Komandi zapisu v pam yat Zapisuye vmist registra v element pam yati z adresoyu ADDR rIi STA ADDR i 0 5 memory ADDR rIi rA zapisati A STX ADDR i 0 5 memory ADDR rIi rX zapisati X STi ADDR i 0 5 memory ADDR rIi rIi zapisati Ii STJ ADDR i 0 5 memory ADDR rIi rJ zapisati J STZ ADDR i 0 5 memory ADDR rIi 0 obnuliti vmist klitinki Arifmetichni komandi ADD ADDR i 0 5 rA rA memory ADDR rIi dodavannya SUB ADDR i 0 5 rA rA memory ADDR rIi vidnimannya MUL ADDR i 0 5 rA rX rA memory ADDR rIi mnozhennya DIV ADDR i 0 5 rA int rA rX memory ADDR rIi rX rA rX memory ADDR rIi dilennya Komandi operacij z adresami 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 ADDR rIi DECA ADDR i rA rA ADDR rIi DECX ADDR i rX rX ADDR rIi DEC ADDR i rI rI ADDR rIi Komandi porivnyannya CMPA ADDR i 0 5 compare rA with memory ADDR rIi CMPX ADDR i 0 5 compare rX with memory ADDR rIi CMP ADDR i 0 5 compare rI with memory ADDR rIi Komandi perehodu JMP ADDR i goto ADDR rIi JSJ ADDR i goto ADDR rIi rJ ne minyayetsya 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 lt 0 or rA 0 or rA gt 0 then goto ADDR rIi if rA gt 0 or rA 0 or rA lt 0 then goto ADDR rIi JXN JXZ JXP ADDR i JXNN JXNZ JXNP ADDR i if rX lt 0 or rX 0 or rX gt 0 then goto ADDR rIi if rX gt 0 or rX 0 or rX lt 0 then goto ADDR rIi J N J Z J P ADDR i J NN J NZ J NP ADDR i if rI lt 0 or rI 0 or rI gt 0 then goto ADDR rIi if rI gt 0 or rI 0 or rI lt 0 then goto ADDR rIi Inshi komandi MOVE ADDR i F for n 0 n lt F n rI1 memory ADDR rIi n memory rI1 SLA SRA ADDR i SLAX SRAX ADDR i SLC SRC ADDR i shift rA to the left right by ADDR rIi bytes shift rA rX to the left right by ADDR rIi bytes rotate rA rX to the left right by ADDR rIi bytes NOP do nothing HLT halt execution Komandi vvedennya vivedennya IN ADDR i F read in one block from input unit F into memory ADDR rIi onwards OUT ADDR i F output one block to unit F from memory ADDR rIi onwards IOC ADDR i F send control instruction to i o unit 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 komandi peretvorennya NUM rA numerical value of characters in rA rX CHAR rA rX character codes representing value of rA PosilannyaMMIX 2009 A RISC Computer for the Third Millennium 16 lipnya 2011 u Wayback Machine Knuth s official MIX page MMIX News 16 lipnya 2011 u Wayback Machine Knuth s official MIX news MMIXware A RISC Computer for the Third Millennium 16 lipnya 2011 u Wayback Machine Knuth s official MIX book Open Directory Computers Programming Languages Assembly MIX MMIX 17 veresnya 2011 u Wayback Machine many MIX MMIX MIXAL MMIXAL links