Mars机目前你所见到的几乎都是软件模拟系统,模拟器模拟Mars系统工作。
有的模拟器支持88标准,有的支持94标准,有的支持88标准并部分支持94
标准,所以你在选择一个模拟器时应该好好看看它支持那个标准。
Mars机的汇编程序通常称为RedCode,而Mars模拟器几乎都集成了一个RedCode
的编译器,将RedCode程序编译为机器码写入内存。
系统初始时内存中都是DATA $ 0,$ 0 ,每一个程序加载到内存的随机位置
,当多个程序都加载完后系统给每个程序创建一个进程,此时每个进程在进程
队列中的位置是随机的,然后系统开始运行。然后各个程序开始进行对抗,
看最终谁能生存下来。
<三> RedCode简单语法(按94标准)
指令写法可以记做:
<label>OPCODE <OP_modify> <A_modify> A_field,<B_modify> B_field
--------------- ---------------
整体记做A 整体记做B
<>包含的部分可以省略。
通常A表示源地址,B表示目标地址。
OPCODE包含:
DAT 中止进程
MOV 移动数据A到B
ADD A加B并将结果存入B
SUB A减B并将结果存入B
MUL A乘B并将结果存入B
DIV B/A并将结果存入B,如果A=0进程结束
MOD B%A并将结果存入B,如果A=0进程结束
JMP 跳转到A
JMZ 如果B=0则跳转到A
JMN 如果B!=0则跳转到A
DJN 先将B减1, 如果B!=0跳转到A
SPL 开启一个新进程,新进程起始执行地址为A
SLT 如果A<B跳过下一条指令
CMP 和SEQ相同
SEQ 如果A=B跳过下一条指令
SNE 如果A!=B跳过下一条指令
NOP 空指令,什么也不干。
LDP STP 本地地址操作指令,一般都没有实现,这里就不解释了。
DAT 指令可以只有A区域出现,此时一般编译器会将内存的A区域拷贝
一份到B区域。
JMP SPL 指令也可以只有一个A区域出现,此时一般编译器会将内
存的B区域作为$ 0