参考资料
一简介
程序大战也叫磁核大战,英文名为“CoreWars”,是一个很古老的游戏,当年比尔·盖茨
上学时就有这个东西了,不过国内玩的人很少。 目前一些免费 Unix 如 FreeBSD 等的
ports 里就有它。这个游戏可以从名字也能看出来就是程序之间的大赛。就是大家都写一个
程序,然后我们把这些程序都放到内存,然后开始“并发”运行,看最终的结果是谁的程序消
灭了内存中的其他程序而存活了下来。这一程序对抗模型可以看作是原始的病毒对抗。每个
程序都要尽力的消灭其他程序,为了能够生存,程序应该能保护自己,不断移动自身来躲过
其他程序的攻击或当自身受到攻击后能自我修复。
当然这些程序不是运行在家用 PC 上,也不是随便使用大家常用的 intel 汇编来编写。
其运行平台为 Mars 机。Mars 是一种简单的计算机,他有固定的 8000 个内存单元,和约
10 来个指令。然后整个大战程序就是由这些指令完成。
二 体系结构
Mars 机器由一个组内存单元,一个 CU 单元,一个简单进程管理系统,和一组指令集
构成。Mars 机的标准主要参考 pMars 虚拟机器标准,主要有两个:88 标准和 94 标准。
以下都是默认为 88 标准,扩展 94 标准会专门标识出来。
该系统内存大小固定为 个内存单元,每一个内存单元由 个部分构成
<1> OPCODE 区:操作数区,该区域指定了机器指令,如 MOV ,ADD。
<2> A 数据区 :一个 32 位的数据存储区,存放相应数据,如 128,-100。
<3> A 数据区寻址修饰:指定了 A 数据区的寻址方式。
<4> B 数据区。
<5> B 数据区寻址修饰。
( 94 标准中加入了一个新的部分 <6>操作数修饰区。 )
OPCODE 区,存放各种指令,如 MOV,ADD
A 数据区寻址修饰 B 数据区寻址修饰
A 数据区 B 数据区
单个内存单元的结构示意(忽略了操作数修饰区),每条指令占用一个
单元,如 ,则 OPCODE 区为“ADD”,A 修饰区为“#”,