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 ...
随机推荐
- Android:JNI与NDK(三)NDK构建的脚本文件配置
友情提示:欢迎关注本人公众号,那里有更好的阅读体验以及第一时间获取最新文章 本文目录 一.前言 本篇我们介绍Android.mk与CMakeLists.txt构建NDK的配置文件,我们知道目前NDK的 ...
- Visual Studio Debug
在watch窗口输入,$err,hr可以看到上一个错误代码和相关描述信息 Error Lookup可以将错误代码转换成为相应的文本描述 FormatMessage()
- git基本命令学习(一)
1 git配置文件 1.1 git权限控制 git有三个不同的权限控制文件,高优先权的设置会覆盖低优先权的设置项,以下按照优先权从高到低介绍: 文件夹中".git" 子文件夹中的c ...
- Java虚拟机(一)-Java内存区域
通过看深入理解java虚拟机这本书,大致总结一些笔记,或者提出一些问题,希望大家深入交流学习,第一次写博客,大家多多支持 Java虚拟机对于很多Java开发人员每天都在用,但是大部分人初学者对这些并不 ...
- 2019最新最全Java开发面试常见问题答案总结
2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...
- Git使用(码云)
1.安装git软件(码云/GitHub) 2.码云注册,保存代码 3.创建代码托管仓库,仓库名相当于码云上的文件夹 4.写作业并提交 在作业文件夹上,右键选择‘get bash here’ 在黑框里输 ...
- 关于int的范围以及溢出问题
最近在练一些算法题目的时候恰巧碰到了几道关于int范围与溢出相关的问题,于是就整理一下. 1.原码.补码 在计算机中数值都是用补码表示和存储的(正数补码与原码一致,负数补码是原码符号位不变,其余位取反 ...
- 【模板】zkw线段树
题意简述 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 代码 #include <cstdio> using namespace std; in ...
- cs231n---语义分割 物体定位 物体检测 物体分割
1 语义分割 语义分割是对图像中每个像素作分类,不区分物体,只关心像素.如下: (1)完全的卷积网络架构 处理语义分割问题可以使用下面的模型: 其中我们经过多个卷积层处理,最终输出体的维度是C*H*W ...
- 如何调教你的博客Episode2——移动端支持和UI美化
这个系列的文章是我在搭建博客园博客时所经历的过程. 在上一期如何调教你的博客Episode1——修改整体样式中,我们通过添加CSS样式,修改了页面的总体布局.但将文章发出之后,博客的布局就出现问题了: ...