如果一台计算机可以图灵完成一条指令,那么拥有多条指令的目的是什么?

时间:2017-10-06 21:32:54

标签: instruction-set turing-complete

我理解计算机完全图灵的概念(具有MOV或命令或SUBNEG命令,因此能够"合成"其他指令,例如)。如果这是真的,那么拥有像x86这样的100条指令的目的是什么呢?是提高效率吗?

2 个答案:

答案 0 :(得分:2)

同样,任何逻辑电路都可以仅使用NAND。但这并不会使其他组件变得多余。即使该CPU仅执行一条指令,从NAND门制作CPU也是非常低效的。

操作系统或应用程序具有与CPU类似的复杂程度。

你可以编译它,所以它只使用了一条指令。但是你最终会得到世界上最臃肿的操作系统。

因此,在设计CPU指令集时,选择是在减小CPU大小/费用之间进行权衡,因为它们更简单,每秒允许更多指令,更小尺寸意味着更容易冷却(RISC);并增加了CPU的功能,包括需要多个时钟周期才能完成的指令,但要使它更大,更酷,更酷(CISC)。

这种权衡是数学协处理器在486天内回归的原因。可以在没有指令的情况下模拟浮点数学。但是,如果有一个协处理器可以对这些浮点数进行繁重的工作,那就快得多了。

答案 1 :(得分:1)

请记住,图灵机通常被理解为抽象概念,而不是physical thing。这是计算机可以采用的理论 minimal 形式,它仍然可以计算任何东西。理论上。理论上非常强调。

真正的图灵机做了如此简单的解码MP3将会非常复杂。对它进行编程将是一个彻头彻尾的噩梦,因为机器非常有限,即使将两个64位数字加在一起并将结果记录在第三个位置,也需要大量的“磁带”和一大堆“指令”。 / p>

当我们说“Turing Complete”时,我们的意思是它可以执行通用计算。所有诚实都是一个相当低的标准,像the Game of Life甚至CSS等疯狂的东西都被证明是图灵完全。这并不意味着为它们编程是一个好主意,或者将它们作为一个计算平台认真对待。

在计算的早期阶段,人们必须手动输入机器代码。将两个数字相加并存储结果通常最多是一个或两个操作。在图灵机中完成它需要数千个。复杂性使其在最基本的层面上完全不切实际。

作为挑战,尝试编写一个简单的4位加法器。然后,如果您已经成功解决了这个问题,请编写一个4位乘法器。一旦你转向32或64位值之类的东西,复杂性会呈指数级上升,当你试图解决除法或浮点值时,你很快就会陷入这种无耻之中。

当您输入机器代码时,您不会告诉CPU要翻转哪些晶体管,这些指令充当了为您执行此操作的宏,但是当您编写图灵机代码时,由您来命令它如何翻转每一位

如果您想了解有关CPU历史和设计的更多信息,那里有大量信息,您甚至可以使用transistor logic或FPGA工具包实现自己的工具,您可以使用更高级别的设计将其写出来像Verilog这样的语言。

Intel 4004芯片用于计算器,因此操作代码主要针对此。随后的8008构建于此之上,当8086在指令集周围滚动时,采用了那种熟悉的x86风格,虽然它是16位版本。

这里有一个抽象谱,用于定义各个位的行为(图灵机)和某种假设的CPU,并为每个场合指定一个指令。 20世纪80年代和90年代的RISC和CISC设计在他们的哲学上有所不同,其中RISC通常具有较少的指令,CISC具有更多,但是这些差异在很大程度上已被删除,因为RISC获得了更多功能,而CISC为了简单起见变得更像RISC

图灵机在CPU设计方面是“绝对零”。如果你能想出更简单或更简单的东西,你可能会赢得奖品。