我理解计算机是图灵完备的概念(具有 MOV 或命令或 SUBNEG 命令,因此能够“合成”其他指令,例如)。如果这是真的,那么拥有 100 条像 x86 这样的指令的目的是什么?是提高效率吗?
2 回答
是的。
同样,任何逻辑电路都可以仅使用 NAND 制成。但这并不会使其他组件变得多余。即使 CPU 只执行一条指令,从 NAND 门制作 CPU 的效率也会非常低下。
操作系统或应用程序的复杂程度与 CPU 相似。
你可以编译它,让它只使用一条指令。但是你最终会得到世界上最臃肿的操作系统。
因此,在设计 CPU 的指令集时,选择是在减小 CPU 尺寸/成本之间进行权衡,因为它们更简单,所以每秒允许更多指令,而更小的尺寸意味着更容易冷却 (RISC);并增加 CPU 的功能,包括需要多个时钟周期才能完成的指令,但使其更大且冷却更麻烦 (CISC)。
这种折衷是为什么数学协处理器在 486 天之前很流行的原因。可以在没有说明的情况下模拟浮点数学。但是,如果它有一个协处理器来完成那些浮点运算的繁重工作,它会快得多。
请记住,图灵机通常被理解为抽象概念,而不是物理事物。这是计算机可以采用的理论上的最小形式,它仍然可以计算任何东西。理论上。重在理论上。
一个真正的图灵机做一些像解码 MP3 这样简单的事情会非常复杂。对其进行编程将是一场彻头彻尾的噩梦,因为机器非常有限,即使将两个 64 位数字相加并将结果记录在第三个位置也需要大量的“磁带”和一大堆“指令”。
当我们说某事是“图灵完备”时,我们的意思是它可以执行通用计算。老实说,这是一个相当低的标准,像生命游戏甚至CSS这样的疯狂事物已被证明是图灵完备的。这并不意味着为它们编程或认真对待它们作为一个计算平台是一个好主意。
在计算机的早期,人们必须手动输入机器代码。将两个数字相加并存储结果通常最多是一两次操作。在图灵机上做这件事需要数千。复杂性使其在最基本的层面上完全不切实际。
作为一个挑战,尝试编写一个简单的 4 位加法器。然后,如果您成功解决了这个问题,请编写一个 4 位乘法器。一旦转向 32 位或 64 位值,复杂性就会呈指数级增长,而当您尝试处理除法或浮点值时,您很快就会淹没在这一切的无耻之中。
当您输入机器代码时,您不会告诉 CPU 要翻转哪些晶体管,指令充当宏来为您执行此操作,但是当您编写图灵机代码时,您可以命令它如何翻转每一点。
如果您想了解有关 CPU 历史和设计的更多信息,那里有大量信息,您甚至可以使用晶体管逻辑或 FPGA 套件实现您自己的,您可以使用更高级别的设计语言(如Verilog )将其编写出来。
英特尔4004芯片是为计算器设计的,因此操作代码主要针对此。随后的 8008 建立在此基础上,当 8086 围绕指令集滚动时,已经采用了熟悉的 x86 风格,尽管是相同的 16 位版本。
在定义单个位的行为(图灵机)和某种假设的 CPU 之间有一个抽象范围,每个场合都有一条指令。1980 年代和 1990 年代的 RISC 和 CISC 设计在这里的理念有所不同,RISC 通常指令较少,CISC 指令较多,但随着 RISC 获得更多功能并且为了简单起见 CISC 变得更像 RISC,这些差异在很大程度上已被消除.
图灵机在 CPU 设计方面是“绝对零”。如果你能想出一些更简单或更简约的东西,你可能会赢得奖品。