以下我要写MMIXAL基本程序的编写,运行及调试。
去年6月份接到把C代码改写成MMIXAL代码的任务,于是上网查找,几乎无任何收获(但愿不是自己的搜索能力太差)。最后在某个外国网站上找到了编译器,不知道是用哪国语言写的使用说明,摸索了一天终于写出了个"Hello , World!"程序,接下来一个星期的痛苦摸索终于把简单任务给做完。今天写下自己所掌握的东西。x86汇编一下简称汇编。参考资料:<<计算机程序艺术>>第 1 卷,<<mixware>>文档。
http://search.download.csdn.net/search/MMIXAL 编译器的安装和使用
http://search.download.csdn.net/search/mixware mixware文档
/
"Hello , World!"程序
% 数据段声明,类似汇编
LOC Data_Segment
% 无名基地址
GREG @
% 字符串声明,类似于汇编,String为标号,BYTE为类型,
% "#a,0"回车换行
String BYTE "Hello , World!",#a,0
% 指明程序的基地址
LOC #200
% Main 程序的入口地址,类似于汇编的begin或start,在
% Main标号的同一行如果没有代码则会出现警告或者错误
% ,如果一行太长也会出现警告和错误.
% LDA $255 , String 把标号 String 的地址装入寄存
% 器 $255,寄存器$255用于输入输出,之后的程序会相继
% 提到如何使用.
Main LDA $255 , String
% TRAP 0,Fputs,StdOut调用中断输出,类似于汇编
%的 INT 09H中断
TRAP 0,Fputs,StdOut
% TRAP 0,Halt,0程序结束,类似于汇编的 INT 21H
TRAP 0,Halt,0
整个程序如下:
LOC Data_Segment
GREG @
String BYTE “Hello , World!”,#a,0
LOC #200
Main LDA $255 , String
TRAP 0 , Fputs , StdOut
TRAP 0 , Halt , 0
好了,现在"Hello , World!"已经写好,写好的程序保存为Hello.mms。开始运行。打开DOS,进入程序所在位置。如下图
/
从键盘读取一个数存入寄存器 $0 , ScanNum.mms
% OCTA 最大长度为 64 位,20位10进制
% 读入一个OCTA类型的数并存入 $0 寄存器
% 程序中有两个需要注意的地方:
% PBNN $2,2F: 2F表示这一句后面标号为 2H
% 整句的意思就是: