RodRego — a register machine
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的更多相关文章
- 【译】使用 Python 编写虚拟机解释器
[译]如何使用 Python 创建一个虚拟机解释器? 原文地址:Making a simple VM interpreter in Python 更新:根据大家的评论我对代码做了轻微的改动.感谢 ro ...
- android系统平台显示驱动开发简要:Samsung LCD接口篇『三』
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...
- hello world 为什么我们看到学习中有这一句话!!!
Hello World ,中文意思:你好,世界.世界上的第一个程序就是Hello World,由Brian Kernighan创作. Hello, world"程序是指在计算机屏幕上输出“H ...
- Solidity 中文文档 —— 第一章:Introduction to Smart Contracts
第一章:智能合约简介 粗略地翻译了 Ethereum 的智能合约开发语言的文档:Solidity.欢迎转载,注明出处. 有任何问题请联系我,本人微信:wx1076869692,更多详情见文末. 我是 ...
- 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 ...
- 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 ...
- register instruction pointer
Computer Science An Overview _J. Glenn Brookshear _11th Edition We have already encountered the conc ...
- 高通ASOC中的machine驱动
ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...
- Azure Machine Learning
About me In my spare time, I love learning new technologies and going to hackathons. Our hackathon p ...
随机推荐
- Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文
前言 之前也分享了不少自己的文章,但是对于 Flink 来说,还是有不少新入门的朋友,这里给大家分享点 Flink 相关的资料(国外数据 pdf 和流处理相关的 Paper),期望可以帮你更好的理解 ...
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
- MyBatis 核心配置综述之 ResultSetHandler
目录 ResultSetHandler 简介 ResultSetHandler 创建 ResultSetHandler 处理结果映射 DefaultResultSetHandler 源码解析 我们之前 ...
- dotnetcore 与 hbase 之二——thrift 客户端的制作
说明 在上一篇文章dotnetcore 与 hbase 之一--hbase 环境准备结束后,我们已经有了 hbase 数据库环境.接下来就可以利用 thrift 生成 c# hbase 客户端了.如果 ...
- 从boosting谈起
Boosting 将一些表现效果一般(可能仅仅优于随机猜测)的模型通过特定方法进行组合来获得一个表现效果较好的模型.抽象地说,模型的训练过程是对一任意可导目标函数的优化过程. Adaptive boo ...
- Leetcode solution 227: Basic Calculator II
Problem Statement Implement a basic calculator to evaluate a simple expression string. The expressio ...
- SpringBoot中读取配置文件的几种方式
1.读取application文件 在application.yml或者properties文件中添加: info: name: xiaoming age: 13 sex: 1 读取方式如下: imp ...
- 【CodeForces - 1200A】Hotelier(水题、模拟)
Hotelier 直接翻译了 Descriptions Amugae的酒店由10人组成10客房.房间从0开始编号0到99 从左到右. 酒店有两个入口 - 一个来自左端,另一个来自右端.当顾客通过左入口 ...
- linux下实现并发逻辑
################shell 模拟实现并发跑数#################有时候我们知道一些程序是可以同时跑的,互不影响,为了提高效率不得不使用并发跑脚本 #1.思路一我们都知道在 ...
- Arranging Your Team HDU - 3720 【DFS】
思路 题意:此题大意是指首先给你23个队员的信息,包括他们的名字,能力值,在赛场上的职位.然后给出几个若能满足某两个队员同时在球场上就额外加上一定的值.最后让你从23个队员中选出11个人,使得最终的v ...