最終更新日 2003年9月4日

MIX.EXE
MIX とは Knuth 著「THE ART OF COMPUTER PROGRAMMING Volume 1」に載っている 仮想計算機です。翻訳は「基本算法・基礎概念」広瀬健訳 サイエンス社です。 この本のプログラムをただ単に紙の上で読んでいるだけではよくわからないところがあり、実際に動く計算機が欲しくて、 このプログラムを作りました。だいたい本に書いてある通りに作ったつもりですが、モデルが古くて、 マイコンとは随分異なった処があり、作者の意図通りではないところがあるかもわかりません。
 Windows 98 で作ったので、メモリーの大きさは本では4000語ですが、 Windows の制約でメモの大きさが64Kですので、1000語にしました。
 まだ入出力命令 < 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 の本にある次のプログラムを打ち込みます。

* 500 個の素数を見つけるアセンブリ言語のプログラム
* 500 個の素数の表の印刷 PRIME.PRO
*
L EQU 500 これから探す素数の個数
PRINTER EQU 18 印字機の機番
PRIME EQU -1 素数表の記憶領域
BUF0 EQU 800 BUFFER[0] の記憶領域
BUF1 EQU BUF0+25 BUFFER[1] の記憶領域
ORIG 600
START IOC 0(PRINTER) 改頁
LD1 =1-L= P1. 表の作成開始. J<--1.
LD2 =3= N<--3.
2H INC1 1 P2. N は素数, J<--J+1.
ST2 PRIME+L,1 PRIME[J]<--N.
J1Z 2F P3. すでに 500 個見つけたか.
4H INC2 2 P4. N を進める.
ENT3 2 P5. K<--2.
6H ENTA 0 P6. PRIME[K] | N か.
ENTX 0,2
DIV PRIME,3
JXZ 4B R=0 か.
CMPA PRIME,3 P7. PRIME[K] の方が大きいか.
INC3 1 P8. K を進める.
JG 6B Q>PRIME[K] なら飛び越し,
JMP 2B さもなければ N は素数.
2H OUT TITLE(PRINTER) P9. 見出しの印刷
ENT4 BUF1+10 Set B<--1.
ENT5 -50 Set M<--0.
2H INC5 L+1 M を進める.
4H LDA PRIME,5 P10. 一行分の印刷内容を入れる.
CHAR
STX 0,4(1:4)
DEC4 1
DEC5 50 (正の範囲で rI5 の内容が 50 個ずつ減る)
J5P 4B
OUT 0,4(PRINTER) P11. 一行印刷.
LD4 24,4 緩衝領域の切替.
J5N 2B rI5=0 なら完了.
HLT
* INITIAL CONTENTS OF TABLES AND BUFFERS
ORIG PRIME+1
CON 2 最初の 2.
ORIG BUF0-5
TITLE ALF FIRST 表題の文字情報.
ALF FIVE
ALF HUND
ALF RED P
ALF RIMES
ORIG BUF0+24
CON BUF1+10 各緩衝領域が他の緩衝領域を参照.
ORIG BUF1+24
CON BUF0+10
END START 終わり.

 単なるテキストですから、自分の好きな EDITOR で打ち込んでファイルを作り、 File メニューの load で読み込んでも良いです。ここに打ち込んだプログラムはFile メニューの save で保存できます。 また、File メニューの new でメモの内容を消去することが出来ます。

 Assemble のボタンを押します。

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

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

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

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

CAL のボタンを押します。

 160が表示されました。使い方は以上です。使える命令等の詳細は Knuth の本を参照して下さい。

ホームページに戻る

数学教育を改善するためのソフト開発に戻る