RodRego — a register machine
寄存器机(register machine)是一种类似于图灵机一样的抽象机器,是计算机模型的一种,他和其他的抽象机一样都是图灵等价的。寄存器机器主页: http://sites.tufts.edu/rodrego/
RodRego是哲学家丹尼尔·丹尼特和他的朋友制作的一款寄存器机模拟软件。通过编写简单的命令在RodRego进行计算,你可以了解计算机是如何进行计算的。
寄存器在线版本:http://proto.atech.tufts.edu/RodRego/
文章图片
教程 通过上图我们可以看到,界面的左侧是RodRego的寄存器部分。图灵机的特点是在一条无限长的磁带上运动,而寄存器机的原理是通过对理论上无限个的寄存器进行简单的
+1
和-1
运算。左侧寄存器的红点个数表示寄存器存储的数值,你可以通过+
和-
调整寄存器的初始值。右侧是输入指令的地方,RodRego的指令只有3条:
INC
,EDB
和END
。INC
是将一个寄存器+1
,既寄存器增加一个红点。格式如下,其中[step]是每条指令的标号,是指令跳转到何处的标识;而[register]是指令作用的对象寄存器,用1-9标号指定;[go to step]是指出下一条指令的标号。[step] INC [register] [go to step]
DEB
作用是将一个寄存器的数值-1
,并检查此时寄存器数值是否为0,若不为0,则跳转到[go to step],若为0,则跳转到[go to step if already empty]。[step] DEB [register] [go to step] [go to step if already empty]
END
是程序结束的标志,执行到此指令时寄存器机结束运行。#
号表示注释,以#
号开头的语句会被寄存器机在执行时忽略掉。举个例子
1 deb 4 1 2#一直执行对寄存器4的减一,直到寄存器4为0,既清空寄存器4。
2 deb 2 3 4# 2和3指令是一个循环,每个循环对寄存器2进行减一,对寄存器4进行加一,直到寄存器2为0。
3 inc 4 2
4 deb 3 5 6#4和5指令也是一个循环,每个循环对寄存器3进行减一,对寄存器4进行加一,知道寄存器3为0。
5 inc 4 4
6 end
以上代码的作用是将寄存器2和寄存器3的数相加,结果存到寄存器4内,因此,在一开始要将寄存器的数清零。这个例子是用寄存器机如何实现简单的加法运算。
文章图片
运行前:寄存器2=5 寄存器3=3 寄存器4=4
文章图片
运行后:寄存器4=8=3+5
【计算机基础科学|寄存器机 RodRego】上述的加法只是一个简单的例子,除此之外,你还可以进行更加复杂的乘法除法运算等等。在理论上寄存器机是图灵完备的,也就是说正常计算机可以进行的计算它都可以完成。