银河

SKYIV STUDIO

  博客园 :: 首页 :: 博问 :: 闪存 :: :: :: 订阅 订阅 :: 管理 ::

MMIX 官方主页:Knuth: MMIX。有关 MMIX 的资料和软件都可以在上面找到。

可以按以下步骤安装 MMIXware

ben@ben-m4000t:~$ sudo apt-get install texlive-latex-extra
ben@ben-m4000t:~$ cd src
ben@ben-m4000t:~/src$ mkdir mmix; cd mmix
ben@ben-m4000t:~/src/mmix$ wget http://www-cs-faculty.stanford.edu/~knuth/programs/mmix-20090321.tar.gz
ben@ben-m4000t:~/src/mmix$ tar xzf mmix-20090321.tar.gz
ben@ben-m4000t:~/src/mmix$ make all doc
ben@ben-m4000t:~/src/mmix$ sudo mv mmix mmixal mmmix mmotype /usr/local/bin/
ben@ben-m4000t:~/src/mmix$ ls -l *.ps
-rw-r--r-- 1 ben ben 255644 2009-12-21 10:15 mmixal-intro.ps
-rw-r--r-- 1 ben ben 546919 2009-12-21 10:15 mmix-doc.ps
-rw-r--r-- 1 ben ben 198837 2009-12-21 10:15 mmix-sim-intro.ps
ben@ben-m4000t:~/src/mmix$

上述的 mmixal-intro.ps(13页)、mmix-doc.ps(48页) 和 mmix-sim-intro.ps(8页) 是重要的文档资料。

此外还有 fasc1.ps(140页),就是下面这本书:

计算机程序设计艺术(第1卷,第1册,双语版) MMIX: 新千年的RISC计算机

The Art of Computer Programming, Volume 1, Fascicle 1, MMIX: A RISC Computer for the New Millennium

[美]Donald E.Knuth 著,苏运霖 译,机械工业出版社,2006年12月第1版

TAOCP Vol1 Fascicle 1

 

让我们来看看 hello.mms 吧:

然后汇编、运行:

ben@ben-m4000t:~/mmix$ mmixal -l hello.mml hello.mms
ben@ben-m4000t:~/mmix$ ls -l hello.*
-rw-r--r-- 1 ben ben 493 2009-12-21 11:02 hello.mml
-rw-r--r-- 1 ben ben 144 2009-12-21 11:02 hello.mmo
-rw-r--r-- 1 ben ben 192 2009-12-21 10:53 hello.mms
ben@ben-m4000t:~/mmix$ mmix hello
hello, 世界
ben@ben-m4000t:~/mmix$ hd hello.mmo
00000000 98 09 01 01 4b 2e e5 56 98 02 01 00 98 06 00 03 |....K..V........|
00000010 68 65 6c 6c 6f 2e 6d 6d 73 00 00 00 98 07 00 03 |hello.mms.......|
00000020 8f ff 01 00 00 00 07 01 f4 ff 00 00 00 00 07 01 |................|
00000030 00 00 00 00 98 04 00 03 2c 20 e4 b8 98 07 00 08 |........, ......|
00000040 96 e7 95 8c 98 07 00 08 0a 00 00 00 98 0a 00 ff |................|
00000050 00 00 00 00 00 00 01 00 98 0b 00 00 20 3a 50 50 |............ :PP|
00000060 10 40 40 20 4d 20 61 20 69 02 6e 01 00 81 20 53 |.@@ M a i.n... S|
00000070 20 74 10 10 20 72 20 69 20 6e 02 67 01 14 83 40 | t.. r i n.g...@|
00000080 20 61 20 72 20 67 0f 76 01 82 00 00 98 0c 00 0c | a r g.v........|
00000090
ben@ben-m4000t:~/mmix$ cat hello.mml
($001) argv IS $1
LOC #100
...100: 8fff0100 Main LDOU $255,argv,0
...104: 00000701 TRAP 0,Fputs,StdOut
...108: f4ffxxxx GETA $255,String
...10c: 00000701 TRAP 0,Fputs,StdOut
...110: 00000000 TRAP 0,Halt,0
...114: 2c20e4b8 String BYTE ", 世界",#a,0
...118: 96e7958c
...11c: 0a00

Symbol table:
Main = #0000000000000100 (1)
String = #0000000000000114 (3)
argv = $001 (2)
ben@ben-m4000t:~/mmix$ mmotype hello.mmo
File was created Mon Dec 21 11:02:46 2009
0000000000000100: 8fff0100 ("hello.mms", line 3)
0000000000000104: 00000701 (line 4)
0000000000000108: f4ff0000 (line 5)
000000000000010c: 00000701 (line 6)
0000000000000110: 00000000 (line 7)
0000000000000108: 00000003
0000000000000114: 2c20e4b8 (line 8)
0000000000000118: 96e7958c (line 8)
000000000000011c: 0a000000 (line 8)
g255: 0000000000000100
Symbol table (beginning at tetra 23):
Main = #0100 (1)
String = #0114 (3)
argv = $001 (2)
ben@ben-m4000t:~/mmix$

从上例可以看出, MMIX 机器使用 UTF-8 编码。

 

关于 MMIXAL,有以下几个要点:

一个指令由三个字段组成:

  1. LABEL(标号)字段。它或者是空白,或者是一个符号。LABEL字段必须在一行的开始处开始。
  2. OP(操作码)字段。它或者是一个 MMIX 操作码或者是一个 MMIXAL 虚拟操作符。注意,OP字段不能位于一行的开始处。
  3. EXPR(表达式)字段。它是由一些逗号分开的一个或多个表达式的表。EXPR字段也可以是空白,在该情况下它等价于单个表达式0。

如果头一个非空白字符不是一个字母或数字,则整个行就是一个注释;否则注释在EXPR字段之后开始。注意,如果EXPR字段是空白,则该行上的注释必须通过某种特殊的界定符来引入。

如果用分号把指令隔开,则两个或多个指令可以放在输入单个行上。

如果跟随一个分号的指令有一个非空白的标号,则这个标号必须紧跟这个分号。

 

2009年12月6日,John Waken 写了一篇文章:MMIX机器简要介绍,谈到:

MMIX汇编格式中的指令分为三部分,标号、操作码、操作数,之间用空白字符隔开。学过其他汇编的人应该很容易理解MMIX汇编的格式,只是要注意一点,操作数之间只能有一个逗号,连空格都不能有,这应该是knuth写的词法分析中的"BUG"。

这不是“BUG”,因为空白要用来分隔EXPR后面的注释,所以EXPR的操作数之间就不能有空白。

posted on 2009-12-21 11:58  银河  阅读(11554)  评论(20编辑  收藏  举报