MIX の改訂版です。
メモリーの大きさを本の通り4000語にしました。
オペランドが不要な命令 NOP と HLT と NUM と CHAR の命令にコメントを付けるとアセンブラがエラーを出力していたバグを
修正しました。これでKnuth 著「THE ART OF COMPUTER PROGRAMMING Volume 1」に載っている基本的なプログラムは修正無しで実行出来るはずです。多分。
MIX とは Knuth 著「THE ART OF COMPUTER PROGRAMMING Volume 1」に載っている
仮想計算機です。翻訳は「基本算法・基礎概念」広瀬健訳 サイエンス社です。
この本のプログラムをただ単に紙の上で読んでいるだけではよくわからないところがあり、実際に動く計算機が欲しくて、
このプログラムを作りました。だいたい本に書いてある通りに作ったつもりですが、モデルが古くて、
マイコンとは随分異なった処があり、作者の意図通りではないところがあるかもわかりません。
まだ入出力命令 < IN(input) C=36,F=機番、OUT(output) C=37,
F=機番、IOC(input−output control) C=35,F=機番、
JRED(jump ready) C=38,F=機番、JBUS(jump busy) C=34,
F=機番 > は F=0(磁気テープ)と F=18(印字機)しか作っていません。
テープの大きさは相変わらず10ブロックしか取っていません。その他の器機は本を読んでいて必要になれば作るつもりです。
このプログラムはフリーソフトです。お役に立つならご自由にお使い下さい。
MIX.EXE を立ち上げます。

右側のメモにプログラムを打ち込みます。例えば、Knuth の本にある次のプログラムを
修正無しに打ち込みます。
* EXAMPLE PROGRAM ... TABLE OF PRIMES
*
L EQU 500 The number of primes to find
PRINTER EQU 18 Unit number of the line printer
PRIME EQU -1 Memory area for table of primes
BUF0 EQU 2000 Memory area for BUFFER[0]
BUF1 EQU BUF0+25 Memory area for BUFFER[1]
ORIG 3000
START IOC 0(PRINTER) Skip to new page.
LD1 =1-L= P1. Start table. J <- 1.
LD2 =3= N <- 3.
2H INC1 1 P2. N is prime. J <- J + 1.
ST2 PRIME+L,1 PRIME[J] <- N.
J1Z 2F P3. 500 found?
4H INC2 2 P4. Advance N.
ENT3 2 P5. K <- 2.
6H ENTA 0 P6. N/PRIME[K]?
ENTX 0,2 rAX <- N.
DIV PRIME,3 rA <- Q, rX <- R.
JXZ 4B To P4 if R = 0.
CMPA PRIME,3 P7. PRIME[K] large?
INC3 1 P8. Advance K.
JG 6B To P6 if Q > PRIME[K].
JMP 2B Otherwise N is prime.
2H OUT TITLE(PRINTER) P9. Print title.
ENT4 BUF1+10 Set B <- 1.
ENT5 -50 Set M <- 0.
2H INC5 L+1 Advance M.
4H LDA PRIME,5 P10. Set up line. (Right to left)
CHAR Convert PRIME[M] to decimal.
STX 0,4(1:4)
DEC4 1
DEC5 50 (rI5 goes down by 50 until
J5P 4B it becoms nonpositive)
OUT 0,4(PRINTER) P11. Print line.
LD4 24,4 Switch buffers.
J5N 2B If rI5 = 0, we are done.
HLT
* INITIAL CONTENTS OF TABLES AND BUFFERS
ORIG PRIME+1
CON 2 The first prime is 2.
ORIG BUF0-5
TITLE ALF FIRST Alphabetic information for
ALF FIVE title line
ALF HUND
ALF RED P
ALF RIMES
ORIG BUF0+24
CON BUF1+10 Each buffer refers to the other.
ORIG BUF1+24
CON BUF0+10
END START End of routine.
単なるテキストですから、自分の好きな EDITOR で打ち込んでファイルを作り、
File メニューの load で読み込んでも良いです。ここに打ち込んだプログラムはFile メニューの save で保存できます。
また、File メニューの new でメモの内容を消去することが出来ます。

Assemble のボタンを押します。

プログラムが文法的に正しければ、真ん中のメモリの領域に機械語がセットされます。下に MIX の操作が
出来ますと表示されます。プログラムが間違っていれば、

エラーメッセージが出ます。間違いを直し、再度アセンブルします。
機械語が出来上がれば。Start か Step のボタンを押します。Start のボタンを押すとプログラムの最後まで実行します。
Step のボタンを押すと、一行だけ実行します。
Step のボタンを二回押します。

Start のボタンを押します。

このプログラムは素数を500個プリンタに打ち出すようになっています。
しかし、実際にプリンタに打ち出すのではなく、プリンタのためのメモに結果を打ち出すように作っています
。結果を見るには、メニューの Printer の Show をクッリクして下さい。

MIX は64進法で表示されています。そこで、64進法を10進法に直すために、CAL のボタンの横のボックスに
64進数を入力して下さい。区切りには : を使います。例えば、2:32を入力して、

CAL のボタンを押します。

160が表示されました。
このMIX の命令は
LDA
LDX
LD1
LD2
LD3
LD4
LD5
LD6
LDAN
LDXN
LD1N
LD2N
LD3N
LD4N
LD5N
LD6N
STA
STX
ST1
ST2
ST3
ST4
ST5
ST6
STJ
STZ
ADD
SUB
MUL
DIV
ENTA
ENTX
ENT1
ENT2
ENT3
ENT4
ENT5
ENT6
ENNA
ENNX
ENN1
ENN2
ENN3
ENN4
ENN5
ENN6
INCA
INCX
INC1
INC2
INC3
INC4
INC5
INC6
DECA
DECX
DEC1
DEC2
DEC3
DEC4
DEC5
DEC6
CMPA
CMPX
CMP1
CMP2
CMP3
CMP4
CMP5
CMP6
JMP
JSJ
JOV
JNOV
JL
JE
JG
JGE
JNE
JLE
JAN
JAZ
JAP
JANN
JANZ
JANP
JXN
JXZ
JXP
JXNN
JXNZ
JXNP
J1N
J1Z
J1P
J1NN
J1NZ
J1NP
J2N
J2Z
J2P
J2NN
J2NZ
J2NP
J3N
J3Z
J3P
J3NN
J3NZ
J3NP
J4N
J4Z
J4P
J4NN
J4NZ
J4NP
J5N
J5Z
J5P
J5NN
J5NZ
J5NP
J6N
J6Z
J6P
J6NN
J6NZ
J6NP
MOVE
SLA
SRA
SLAX
SRAX
SLC
SRC
NOP
HLT
IN
OUT
IOC
JRED
JBUS
NUM
CHAR
があります。
MIX のアセンブリ言語はパソコンのアセンブリ言語とかなり感じが違います。
MIX のアセンブリ言語の詳細およびプログラムのサンプルは Knuth の本「THE ART OF COMPUTER PROGRAMMING 1-4A」を参照して下さい。