MMIX是一种64位的RISC芯片,它有32个专用寄存器和至少256个
通用寄存器。
MMIX: 为第三个千年设计的计算机
用途
这个处理器的设计有长期的科研和教学价值。
很多大学计算机系的汇编语言课现在还在讲 8086 汇编语言。我们知道 8086 以及后来的 80286,386,486,Pentium,…… Pentium 4,…… 不管它们主频怎么高,速度如何快,它们的设计可以说都是非常糟糕的。因为 Intel 在设计 8086 的时候就没有设计好,没有考虑到将来的扩展。到了后来为了保持自己的市场,为了兼容以前的程序,不得不加入很多难懂的“高超技术”。很多人以懂得 80486, Pentium 的“先进指令” 为豪,很多学校的汇编语言课也加入了一些 386, 486 的东西,使用“宏汇编”,认为这就是赶上了 “时代潮流”。但是,其实我们正在往我们的学生脑子里灌输一些他们完全没有必要知道的东西。当然 80x86 不好不等于 Intel 不好, Intel 也有很好的处理器,不过它们跟 80x86 有很大差别。
一个计算机系的学生如果“深刻理解”了 80x86 的设计,而且很感兴趣,那么他就会花很多时间去“钻研” 80x86 里面一些“高级机密”,并且引以为豪。在将来的设计中就会效仿 80x86 的很多不好的东西。他很难再理解和接受干净的,优雅的设计。再加上 Windows 系统,那么这个学生就会认为计算机就是如此麻烦,如此矛盾,如此丑陋,如此朝生暮死的东西。他如果当了老师,甚至会对一个学生发脾气:“你连
扩展内存是什么都不知道?你的汇编语言是怎么学的!” 他的学生就会觉得自己为什么这么傻,然后就认为一台计算机一定有“基本内存”和“扩展内存”之分…… 这是一件可怕的事情。
现在好了,你正在认识一个优雅,干净,先进的处理器。MMIX 就是改变你对处理器的看法的起点。MMIX 比现在所有的处理器设计都要干净利落,而且溶合了各种处理器的优点。你一旦明白了它是怎样工作,你就很容易的明白当今现实生活中最先进的处理器是怎样工作的。你会认识一些非常强大的指令,你会认识什么才是一个真正优秀的汇编语言,你甚至会很乐意的用这种汇编语言写程序!比较一下:想一想你是多么的不原意看到 80x86 的汇编语言吧 :)
现在有了 MMIX 的模拟程序,你就可以分析这台机器的每一个周期,每一条指令,流水线,
指令缓存和
数据缓存,…… 你可以欣赏一台计算机的美!
And now I see with eye serene, the very pulse of the machine. — WILLIAM WORDSWORTH
特点
遵循RISC思想, 只加入了必须或者是很有用的指令, 参见指令表。
子程序进程切换时只需要把用过的
寄存器入栈,加速了切换。
具有强大的整数运算能力, 具有其它芯片没有的强大的MOR和MXOR指令。
具有大量
通用寄存器(至少256个), 大大减少MMIX程序的长度和对内存的访问次数。
对IEEE浮点数的FINT和FREM指令非常高效。
MMIX的程序可以很容易的翻译成可在 Cray I, IBM801, RISC II, Clipper C300, AMD29K, Motorola 88K, IBM 601, Intel i960, Alpha21164, POWER2, MIPS R4000, HitachiSuper H4, StrongARM110, Sparc64 等真实机器上运行的程序。
资源
MMIX的详细描述可在这里下载fasc1.ps.gz
Knuth教授鼓励大家帮他找出其中的错误,不论是技术上的,历史上的,打字上的,或是政治上的,每发现一个新的错误奖励2.56美元。
Knuth设计了一个模拟程序, 可以在大多数机器上模拟MMIX以及运行其上的一个原始的操作系统。
这个程序是非常复杂的程序,它涉及了计算机体系结构的许多重要方面,包括
机器周期,指令编码,超长整数运算,
浮点运算,流水线,
虚拟内存,高速缓存管理,汇编优化器,
可执行文件格式... 从这个程序你可以发现,Knuth是比我们高明得多的程序员,他总是用最好的办法解决所有问题,哪怕是最简单的问题。你能从他的代码学到很多东西,当然要看他的程序,有时你不得不参阅 taocp。
这个处理器具有长期科学研究的价值. 你甚至可以为它增加虚拟彩色显卡! Knuth 教授专门就MMIX做了演讲。
模拟程序安装方法:
请先下载CWEB( 解压后make, 然后把
可执行文件(cweave 和 ctangle) 拷贝到 /usr/bin/ 或是PATH里的其他目录,准备用它们来编译MMIX模拟器)
然后用它编译MMIX模拟器:点击这里下载MMIX 。解开mmix.tar.gz, make all, 把可执行文件拷贝到/usr/bin/ 或是PATH里的其他目录,完成!