RodRego — a register machine

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

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

寄存器机器主页: http://sites.tufts.edu/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 — 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. 前端笔记之微信小程序(四)WebSocket&Socket.io&摇一摇案例&地图|地理位置

    一.WebSocket概述 http://www.ruanyifeng.com/blog/2017/05/websocket.html Workerman一款开源高性能异步PHP socket即时通讯 ...

  2. Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)

    简介 在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现.MultiAction是多点触控的类,可以模拟用户多点操作.主要包含加载add( ...

  3. byte数组和正数BigInteger之间的相互转换

    旧代码 public static void main(String[] args) { SecureRandom random = new SecureRandom(); byte[] key = ...

  4. 使用sar进行性能分析

    sar可用于监控Linux系统性能,帮助我们分析性能瓶颈.sar工具的使用方式为”sar [选项] intervar [count]”,其中interval为统计信息采样时间,count为采样次数. ...

  5. MVC + EFCore 完整教程19-- 最简方法读取json配置:自定义configuration读取配置文件

    问题引出 ASP.NET Core 默认将 Web.config移除了,将配置文件统一放在了 xxx.json 格式的文件中. 有Web.config时,我们需要读到配置文件时,一般是这样的: var ...

  6. 使用Sigar做后台服务器管理时,遇到的linux上的问题

    首先是线下猛如虎,线上惨不忍赌........ 问题的出处是: function change() { /*获取cpu*/ $.ajax({ url: "http://localhost:8 ...

  7. c++采集windows操作系统名称

    WINAPI windows通过c++获取操作系统主要分两种: 1. windows是8.1版本以下版本:获取操作系统可以通过windows提供的api中GetVersionEx函数来获取 2. wi ...

  8. Spring学习之旅(十三)--使用NoSQL数据库

    除了关系型数据库之外,现在还有一种 NoSQL 数据库非常流行,而 Spring 自然也没有放过对它的支持. NoSQL 数据库有很多种,如: MongoDBGenericJackson2JsonRe ...

  9. 《Effective Java第二版》总结

    第1条:考虑用静态工厂方法代替构造器 通常我们会使用 构造方法 来实例化一个对象,例如: // 对象定义 public class Student{ // 姓名 private String name ...

  10. egret之弹幕

    要实现弹幕功能,首先需要将弹幕配置成配置表.然后代码随机生成. /**生成单个弹幕 */ private showCaptionAnim(captionText: string) { egret.lo ...