RodRego — a register machine

寄存器机(register machine)是一种类似于图灵机一样的抽象机器,是计算机模型的一种,他和其他的抽象机一样都是图灵等价的。

RodRego是哲学家丹尼尔·丹尼特和他的朋友制作的一款寄存器机模拟软件。通过编写简单的命令在RodRego进行计算,你可以了解计算机是如何进行计算的。

寄存器机器主页: http://sites.tufts.edu/rodrego/

寄存器在线版本:http://proto.atech.tufts.edu/RodRego/

教程

通过上图我们可以看到,界面的左侧是RodRego的寄存器部分。图灵机的特点是在一条无限长的磁带上运动,而寄存器机的原理是通过对理论上无限个的寄存器进行简单的+1-1运算。左侧寄存器的红点个数表示寄存器存储的数值,你可以通过+-调整寄存器的初始值。

右侧是输入指令的地方,RodRego的指令只有3条:INCEDBEND

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 — a register machine的更多相关文章

  1. 【译】使用 Python 编写虚拟机解释器

    [译]如何使用 Python 创建一个虚拟机解释器? 原文地址:Making a simple VM interpreter in Python 更新:根据大家的评论我对代码做了轻微的改动.感谢 ro ...

  2. android系统平台显示驱动开发简要:Samsung LCD接口篇『三』

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

  3. hello world 为什么我们看到学习中有这一句话!!!

    Hello World ,中文意思:你好,世界.世界上的第一个程序就是Hello World,由Brian Kernighan创作. Hello, world"程序是指在计算机屏幕上输出“H ...

  4. Solidity 中文文档 —— 第一章:Introduction to Smart Contracts

    第一章:智能合约简介 粗略地翻译了 Ethereum 的智能合约开发语言的文档:Solidity.欢迎转载,注明出处. 有任何问题请联系我,本人微信:wx1076869692,更多详情见文末. 我是 ...

  5. Optimizing TLB entries for mixed page size storage in contiguous memory

    A system and method for accessing memory are provided. The system comprises a lookup buffer for stor ...

  6. How to configure windows machine to allow file sharing with dns alias (CNAME)

    Source: http://serverfault.com/questions/23823/how-to-configure-windows-machine-to-allow-file-sharin ...

  7. register instruction pointer

    Computer Science An Overview _J. Glenn Brookshear _11th Edition We have already encountered the conc ...

  8. 高通ASOC中的machine驱动

    ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...

  9. Azure Machine Learning

    About me In my spare time, I love learning new technologies and going to hackathons. Our hackathon p ...

随机推荐

  1. java 8中新的日期和时间API

    java 8中新的日期和时间API 使用LocalDate和LocalTime LocalDate的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息.另外,它也不附带任何与时区相关的信 ...

  2. sqoop增量导数据

    sqoop要实现增量导入参数到hive或者hdfs 1.需要在mysql中创建可以自动更新的字段,当插入数据时和更新数据时改字段自动更新,如图中update_time,当数据插入时会记录更新为插入时间 ...

  3. .NET----错误和异常处理机制

    前言 错误的出现并不总是编写程序的人的原因,有时应用程序会因为应用程序的最终用户引发的动作或运行代码的环境发生错误.无论如何,我们都应预测应用程序中出现的错误,并相应的进行编码. .Net改进了处理错 ...

  4. Hyper-V虚拟机上安装Ubuntu16.04/Ubuntu18.04.2LTS,搭建GitLab

    我的电脑系统是win10,内存8g如下 一开始是装的Ubuntu18.04.2LTS, gitlab-ce_12.1.3-ce.0_amd64.deb,每次能够安装成功,但是修改完ip后,运行gitl ...

  5. 【Java例题】7.4 文件题1-学生成绩排序

    4.学生成绩排序.已有一个学生成绩文件,含有多位学生的成绩:读取这个文件中的每位学生的成绩,然后排序:最后将这些排好序的成绩写到另一个文件中. package chapter7; import jav ...

  6. 【Java例题】4.4使用牛顿迭代法求方程的解

    4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...

  7. JavaWeb——使用会话维持状态3

    这次的例子是使用会话给上一个例子添加登陆功能 1.页面逻辑 首先是登陆页面,这里需要输入账号和密码,输入正确后将进入商品列表页面,输入错误将会提示账号或者密码错误 其次是商品列表和购物车页面,添加了注 ...

  8. JavaWeb——Servlet开发2

    1.HttpServletRequest的使用 获取Request的参数的方法. 方法getParameter将返回参数的单个值 方法getParameterValues将返回参数的值的数组 方法ge ...

  9. 阿里P8架构师浅析——MySQL的高并发优化

    一.数据库结构的设计 1.数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率. 2.能够用数字类型的字段尽量选择数字类型而不用字符串类型的 ...

  10. AutoCAD二次开发(.Net)之创建图层Layer

    //https://blog.csdn.net/qq_21489689?t=1[CommandMethod("CREATELY")] public void CreateLayer ...