最終更新日 2013年9月4日

MIX.EXE
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」を参照して下さい。

ホームページに戻る