Little Man Computer仍然有意义吗?

时间:2020-05-12 13:03:04

标签: assembly simulation hardware cpu-architecture little-man-computer

我试图学习计算机的实际工作方式,我找到了一些模拟器软件,但看起来非常复杂(我仍然是初学者)。我看到Little Man Computer (LMC)很老了。恐怕该软件的运行方式已不再是当今的真实情况。

那么,小矮人计算机对我来说仍然有意义,以学习计算机如何工作?有更好的吗?

2 个答案:

答案 0 :(得分:3)

今天发生的事情不是确切地,但是它确实显示了基本原理。

如今,CPU具有executing multiple instructions at once的多个内核和方法,通常像小矮人模拟器一样16位。他们还可以使用SIMD说明和其他铃声。

要了解正在发生的事情,您需要阅读一些理论并使用模拟器来实际了解每个步骤中到底发生了什么,所以不要仅仅依靠模拟器来了解cpu的工作原理。

学习肯定足够好。在以后的问题中,您可能希望链接您正在谈论的内容,而不是说“这台小矮人计算机”。

答案 1 :(得分:3)

LMC是像真实计算机一样的冯·诺依曼体系结构,但在其他重要方面,它与真实计算机从未像现在这样,而现在已经不那么真实了(例如,作为累加器)。

它仍被用作玩具架构,用于教授一些汇编语言的基础知识; SO带有大约50个问答的标签。

还有其他玩具ISA,例如LC-3,它们很简单,但是是带有多个寄存器的二进制计算机。与拥有少量“局部变量”的寄存器相比,累加器机器在手工组装时不必要地痛苦。 LC-3 is a 16-bit ISA with eight 16-bit registers。指令为16位宽,并具有4位操作码。 与LMC不同,包括LC-3在内的大多数玩具ISA都是基于二进制数字,并且具有间接寻址功能,您可以在其中使用寄存器作为加载或存储的地址。

LMC没有间接内存寻址:加载和存储指令必须将绝对地址硬编码到程序中。所以如果你想遍历数组或使用查找表,您需要编写自修改代码,将新地址存储到将作为代码执行的“邮箱”中。

被迫编写自修改代码以进行某种计算的方式与现代计算机中的情况大不相同。大多数ISA都是图灵完备的(有限内存除外),并且/或者可以成为C编译器的目标,而无需自我修改代码,即,如果需要,指令可以保存在只读内存中。

了解SMC可能是有用的,例如进行JIT编译,但不是要知道这是取消引用指针的正常方法。


LMC具有用于实际CPU的汇编语言原理( some )(一次执行一条指令,会对架构状态做出一些更改)。

但是它特别避免提供任何 binary 操作,例如按位与,移位或类似操作。这使得在LMC中很难在真实计算机中完成的某些事情。

Wikipedia):LMC通常用于教学生,因为它模拟了简单的冯·诺伊曼(von Neumann)建筑计算机-具有现代计算机的所有基本功能。可以使用机器代码(十进制而不是二进制)或汇编代码进行编程。

它仅通过addsub操作对数字进行运算,这不依赖于以二进制表示的数字。他们可以在房间里用纸上的十进制数字或大理石集与一个小矮人一起工作。至此intentionally simplified,但是当您知道真正的计算机可以非常有效地执行除以2的操作时,这真的很烦人,而在LMC上,您需要一个愚蠢的循环来进行重复减法,或者{{ 3}},其中包含除数的幂表。

LMC具有其他玩具机(例如LC3)所没有的一些怪异的限制:数字必须为正。 fancy tricks显示了这需要您如何避免这种情况,因为它在“ ISA”中未定义,并且不同的模拟器对add或sub溢出的处理方式也不同。

这也表明,对于LMC来说,测试奇/偶(二进制或十进制的平凡)是一个很大的难题,在LMC中,您不能利用任何二进制或其他形式的位置值表示形式。

相比之下,大多数其他玩具ISA(如所有现代的真正的ISA)都使用2的补码表示带符号的数字。 IMO学习二进制整数是汇编语言的重要组成部分。


@trincot还写了一些不错的LMC答案,其中包括How create an Little Mans Computer (LMC) code that will get a number. Display 1 if the number is odd, display 0 if the number is even


超标量/乱序实现。

当然,大多数ISA是按照顺序执行一条指令然后执行另一条指令来定义的。真正的实现通常在保持这种错觉的同时并行执行多个(在指令级并行性允许的情况下)。

如果需要,您可以构建超标量的无序LC-3 ;除非ISA使并行性显式(例如, Mill或IA-64的明确推测,或MIPS上的加载/分支延迟槽。

请参见What happens to instructions given to the Little man in the LMC that begin with 4?http://www.lighterra.com/papers/modernmicroprocessors/

请注意,对于超标量CPU,自修改代码是一个问题。例如当您修改流水线中正在运行的代码附近的内存字节时,真正的x86 CPU将刷新流水线。