MMIX机器简要介绍
Thirty years have passed since the Mix computer was designed. And computer architecture has been converging during those years towards a rather different style of machine. Therefore it is time to replace MIX with a new computer that contains even less saturated fat than its predecessor.
可以看出新的机器必定简单化,实际上Knuth就是在Hennessy和Patterson的帮助下设计MMIX的,那当然是一个RISC机器咯。
MMIX简介
MMIX机器RISC风格的,这意味这它应该有很多寄存器,大部分操作因该都是在寄存器中完成;MMIX是64位机器,说明MMIX的寄存器应该都是64位的。
不错,MMIX有256个通用寄存器,供程序作算术逻辑运算。比如 ADD $0,$1,$2 就是把1号寄存器和2号寄存器的值相加结果存入0号寄存器。
另有32个专用寄存器,供隐式寻址和一些特权指令操作。
MMIX的指令格式为 OP X,Y,Z
操作码和每个操作数各占一字节,就是说MMIX指令的长度永远是4个字节。X一般做目的操作数。
MMIX Hello World
在这里我不能详细描述MMIX,只能提供一些资料,然后写个Helloworld程序,因为我自己所知道的也非常有限。
MMIX模拟器称为mmix,汇编器叫mmixal,下面就写个hello.mms。(mms是MMIX汇编的通用后缀名)
以*开头的行是注释
第5行应该很好理解,就是占用一些内存区,在里面存入"Hello, world!"中每个字符的ASCII值,10是换行,0和C语言中的'\0'是一样的意思。
从第6行行开始每行都是一条指令,MMIX汇编格式中的指令分为三部分,标号、操作码、操作数,之间用空白字符隔开。学过其他汇编的人应该很容易理解MMIX汇编的格式,只是要注意一点,操作数之间只能有一个逗号,连空格都不能有,这应该是knuth写的词法分析中的"BUG"。
第6行将字符串首地址String装入最后一个寄存器
然后在第7行执行TRAP指令,TRAP相当于X86中的中断指令。中断服务程序是Fputs(模拟器提供的基本输入输出函数),它把$255中指示的字符串输出到StdOut中。
最后用TRAP执行Halt指令,退出模拟器。
写好后,就如同使用GCC一样,先用mmixal汇编该源文件得到目标文件
mmixal -o hello hello.mms
再将目标文件hello载入mmix模拟器即可
mmix hello
编译安装mmix模拟器、汇编器及相关工具
本来这一节应该放在Hello World前面,但是我觉得上面的编译过程与平常使用GCC没什么区别,所以把最重要的一节放到最后。
在本文最后我提供了最新的MMIX模拟器源码(不仅仅是模拟器,还有一系列工具,如汇编器),请读者先下载。
解压后打开Readme文件仔细阅读,现在就没我什么事儿了。
什么?不想看英文!哎,这怎么能学得好计算机呢。其实就是下面三步
$ make doc // 会得到所有的文档,包括MMIX架构说明,MMIX汇编说明,应该仔细看看
$ make mmix // 得到MMIX模拟器的可执行文件 mmix
$ make mmixal // 得到MMIX汇编器的可执行文件 mmixal
上面的安装并不是经典的 confgiure、make、make install三部曲。实际上就相当于我们自己写好了源码,然后编译得到了可执行文件,所以如果你想在任何目录下都能执行 mmix,mmixal的话,就要把它所在的目录假如PATH变量
OK,现在你可以去编译开始写的hello文件,并在模拟器中运行了。
ps: 读者如果有兴趣的话最好看看make doc产生的三个文档,实际上几乎没有其他的参考资料
对MMIX感兴趣或有研究的朋友可以通过此博客或者JohnWaken@163.com联系我
MMIX虚拟机源码下载
转载于:https://www.cnblogs.com/john-d/archive/2009/12/06/1618056.html
MMIX机器简要介绍相关推荐
- [翻译]敏捷软件开发 一 之简要介绍
敏捷软件开发一之简要介绍 原则.模式与实践是重要的,但是这三个要素都要由人来使得它们协同工作.正如Alistair Cockburn所说:"一个成功的项目,过程与技术永远都是排第 ...
- Dalvik虚拟机简要介绍和学习计划
出自:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是运行在Dalvik虚拟机里面的,并且每一个应 ...
- openstack及组件简要介绍
openstack及组件简要介绍 为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中 ...
- 数据结构的简要介绍:堆栈如何工作
by Michael Olorunnisola 通过Michael Olorunnisola 数据结构的简要介绍:堆栈如何工作 (A Gentle Introduction to Data Struc ...
- 简要介绍语音识别技术在各领域的应用
语音识别作为信息技术中一种人机接口的关键技术,具有重要的研究意义和广泛的应用价值.介绍了语音识别技术发展的历程,具体阐述了语音识别概念.基本原理.声学建模方法等基本知识,并对语音识别技术在各领域的应用 ...
- 简要介绍的卡拉OK机的历史
简要介绍的卡拉OK机的历史 我们可以跟踪第一个卡拉OK机背的盒式磁带的时间.它包括一个麦克风,音频输出和一个方法来调整记录音乐的音调.随着技术变得更加成熟,卡拉OK机也变得更加复杂,从而保持与这些年来 ...
- 【测试】linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)
目录 随看随用 FIO介绍 FIO 工具常用参数: fio工作参数可以写入配置文件 IO状态监控: Iostat介绍 与FIO相似的工具 fio测试脚本 提取iops和bw gunplot画图 Fio ...
- Android资源管理框架(Asset Manager)简要介绍和学习计划
Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与UI相关的东西,例如UI布局.字符串和图片等.代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI.这样就可使得应用 ...
- Hadoop学习笔记一 简要介绍
Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop. 本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...
最新文章
- 直方图_20210420
- C++ 虚函数与存虚函数
- 程序员被公司辞退12天,领导要求回公司讲代码
- 如果你铁了心要好好搞科研,我强烈建议你看一下这个帖子
- C语言编程,从菜鸟到高手
- JavaScript的DOM操作-重点部分-第一部分
- MFC 字符串截取成数组 wcstok
- C语言将不固定的表达式转换为后缀表达式(附完整源码)
- Ribbon源码解析(一)
- myeclipse链接数据库,SQL语句实现增删改查
- LeetCode 654. 最大二叉树(递归)
- (需求实战_01) SpringBoot2.x 整合RabbitMQ_生产端
- Failure to find com.oracle:ojdbc6:jar:11.2.0.1.0
- (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL视图
- vue 复制 长按_Vue
- 程序员一般都浏览这些网站,不仅仅提升编程水平!
- Xcode 开发 控件如何和代码配合使用
- Ansible之roles使用
- qcom charger
- 怎么用计算机算钱,亚马逊fba费用计算器要怎么使用?