小人计算机 (LMC) 是一个非常简单的微处理器和计算机系统,专为教学初学者汇编编程而设计。为了简单起见,它不是以二进制计算机的形式呈现,而是以十进制的形式呈现。它包含 100 个存储单元,编号从 0 到 99。您可以在此处放置程序指令和数据。
每个单元格可以容纳 3 位十进制数。这里我们可以存储计算机要执行的指令或要操作的数据。 CPU 有一个累加器,用于执行算术运算。还有一个输入和输出,您可以在其中读取用户输入并将输出写入用户。
以下是指令集的简单概述。每条指令实际上只是一个 3 位数。但通常在编程时会处理更容易记住的字母缩写。以下是有关如何阅读下面描述的提示。例如, Add
指令被描述为具有编号1xx
。这真正的意思是xx
是你放置操作数(参数)的地方。因此142
是将存储单元42的内容与累加器的内容相加的指令。
ADD
1xx 将内存中地址xx
处的内容添加到累加器中。SUB
2xx 从累加器中存储的内容中减去地址xx
的内容。将结果存储在累加器中。STA
3xx 将累加器存储在内存中的地址xx
处。LDA
5xx 加载累加器,其内容位于内存中地址xx
处。BRA
6xx 跳转到程序中的xx
位置。BRZ
7xx 如果累加器为零则跳转BRP
8xx 跳转。INP
901 用输入的数字填充累加器。OUT
902将累加器中的值推入输出队列。HLT
000 停止程序在示例文件夹中,您可以找到更多程序示例。下面是一个从输入中读取数字然后倒计数的程序示例。因此,如果它在输入上读取 4,那么它将在输出上写出 4、3、2、1 和 0。
INP
OUT
LOOP BRZ QUIT // Jump to QUIT if accumulator is 0
SUB ONE // Subtract from accumulator what is stored in ONE
OUT
BRA LOOP // Jump (unconditionally) to the memory address labeled LOOP
QUIT HLT // Label this memory address as QUIT
ONE DAT 1 // Store 1 in this memory address.
您可以将作为示例编写的程序存储在文件中,并将该文件名提供给assemble(file)
函数,该函数将生成代表您的程序和数据的 3 位整数列表。您可以将其提供给simulate!(program, inputs)
函数来运行您的程序。它将转储输出。
或者,您可以复制粘贴此代码并将代码放入下面描述的基于 Web 的 LMC 模拟器之一。
您可以在线找到多个基于浏览器的 LMC CPU 模拟器。您可以在其中逐步执行程序并实时观看虚拟计算机的运行情况。
根据 LMC 理念的细微变化,您可以玩多种游戏。这可能是让孩子参与学习编程的好方法。