构建图灵完整处理器所需的绝对最小指令集是多少?


19

我对处理器如何处理指令有一个大致的了解,但我会花时间在大多数高级语言上工作。也许更接近铁杆的人可以提供一些有价值的见解。

假设编程语言基本上是处理器指令集的高级抽象,那么创建图灵完整机器所需的最基本指令集是什么?

注意:我对硬件体系结构的多样性一无所知,但是-为了简单起见-假设它是具有ALU(如有必要)和指令堆栈的典型处理器。*


计算机科学SE可能是一个提出类似问题的好地方。(目前,没有必要将您引导到那里。)不过,这是一个有趣的问题。
Oskar Skog

随着ISA指令数量的减少,NUMBER指令的意义也随之降低。当ISA的指令少于“最佳” RISC时,它们就会变得怪异。一个只有一条指令的ISA将会很奇怪。//随着数字的增加,他们也变得越来越奇怪,并且ISA变成了CISC。//“怪异”当然或多或少是主观的。
奥斯卡·斯科格

Answers:


35

原来,您只需要一条指令即可构建一台具有图灵计算能力的计算机。这类只有一条指令并且图灵完整的机器称为“ 一个指令集计算机”,或者也被戏称为终极RISC”


4
+1表示可能的最佳答案,除非找到零指令解决方案(实际上,一台指令计算机有时称为零指令计算机,因为在指令本身中未找到任何信息)
Cort Ammon-Reinstate Monica 2014年

4
是的,但是一条指令并不能使机器图灵完成:魔术存在于指令可以解决的所有不同的专用寄存器中。我认为您的答案指出,OP将“计算机”等同于“冯·诺依曼体系结构”,而实际上,“计算机”类别的范围要大得多。
所罗门慢

2
@jameslarge魔术不一定在专门的寄存器中。BitBitJump,SBNZ,SUBLEQ和SUBNEG根本不需要寄存器,每个寄存器只需要一条指令,并且不需要内存。
8bittree '17

2
@ 8bittree,Hunh!我想我忘记了设计怪异但完整的图灵架构是一项竞争性的运动。当我读到Jörg的答案时,我回想起我本科时代(大约在1980年代左右)的一个朋友,他打算用74LS系列芯片构建“一台指令计算机”,然后对其进行编程以模拟DecSystem 10。在Wikipedia页面上,我现在知道他的设计今天将被称为“运输触发体系结构”。我不知道他是否曾经跟进。
所罗门慢

2
@jameslarge:英特尔MMU也是图灵完备的(特别是陷阱机制)。这确实很奇怪,但是,与设计相反,这纯属偶然。
约尔格W¯¯米塔格

15

有许多方法可以实现可以在其中使用图灵机的功能。

当您查看处理器时,最适用的处理器可能是套准机模型。其中最简单的(就符号而言)是多带两个符号(markblank)。如果你去的东西不是很深奥的inc(r)dec(r)jz(r,z)(跳跃如果寄存器r是零指令z)或clr(r)(清晰r), ,incje(i,j,z)跳如果寄存器i和j等于指令Z)。

我看过提到的注册机:

  • inc(i,m)-递增寄存器i并转到第m行
  • jzdec(i,m1,m2)-如果寄存器i为0,则转到第m行,否则递减i,然后转到第m2行

这也是完整的-它是一台Minsky寄存器机,尽管它对磁带中的数据有其他限制(它必须是存储状态的Gödel编号,而不是单独的寄存器)

而已。而已。


那么,为什么不使用这些超风险处理器呢?为他们编写编译器确实很痛苦,而您却放弃了处理器可以做的许多其他事情。有一个逐位的and,这真的很好,add而不是尝试通过递增寄存器和循环来完成所有事情。这就是名为“ Brainfuck ”的最受欢迎的编程语言的基础,该语言有8条指令。

  • > 递增数据指针
  • < 递减数据指针
  • + 在数据指针处增加数据
  • - 在数据指针处递减数据
  • . 在数据指针处输出数据
  • , 读取输入,将数据存储在数据指针处
  • [如果指针处的数据为零,则不要将指令指针向前移动一,而是在匹配]命令之后将其向前跳转到命令
  • ]如果指针处的数据为非零,则不要向前移动指令指针,而是在匹配]命令之后将其跳转回命令

人们可以找到编译器 Brainfuck,但它真的不好玩在它甚至做简单的事情。除非您享受无奈,这就是语言的目的。

相关阅读:


5

我怀疑Post机器是图灵完备设备的最简单形式。您需要提供可按位寻址的存储器,指向当前数据位置的地址寄存器以及五条指令:

  • 将位设置在当前位置;
  • 在当前位置重置该位;
  • 移至下一个地址(增量数据地址寄存器);
  • 移至前一个地址(递减数据地址寄存器);
  • 检查当前数据位置的位。

我认为发明一些更简单的硬件方法并不容易,尽管可能存在一些更简化的方法。


5

实作

该答案将集中在单指令集CPU,编译器和汇编器的有趣实现上。

动摇器

https://github.com/xoreaxeaxeax/movfuscator

仅使用movx86指令编译C代码,以非常具体的方式表明单个指令就足够了。

图灵的完整性似乎已经在一篇论文中得到了证明:https : //www.cl.cam.ac.uk/~sd601/papers/mov.pdf

子句

https://esolangs.org/wiki/Subleq

也可以看看

/programming/3711443/minimal-instruction-set-to-solve-any-problem-with-a-computer-program/38523869#38523869


3

构建图灵完整处理器所需的绝对最低限度的指令集是什么?

JörgW Mittag说:“一个”,但是零呢?

您为什么认为“处理器”必须具有“指令”?

图灵机是图灵完备的处理器,它本身不能在“指令”上运行。它具有规则,但是规则不是从随机存取存储器中获取的指令。

当艾伦·图灵(Alan Turing)想出自己的同名机器时,他正在寻找最简单的“计算”模型,以便他可以使用数学技术来回答“什么是可计算的”这个问题。

您将很难设计出比实际的图灵机更简单的图灵等效机。

FWIW,您正在考虑的一种处理器-一种从内存中获取指令,对其进行解码并执行它们,并对存储在同一内存系统中的数据进行操作的处理器-被称为冯·诺依曼架构

https://zh.wikipedia.org/wiki/冯·诺依曼建筑

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.