堆栈机
堆栈机,全称为“堆栈结构机器”,即英文的 “Stack Machine”。基于堆栈机模型实现的计算机,无论是虚拟机还是实体计算机,都会使用“栈”这种结构来实现数据的存储和交换。栈是一种“后进先出(LIFO)”的数据结构,即最后被放入栈容器的数据会被最先取出。
堆栈机的指令集中包含了零地址指令(“0-operand” instruction set),硬件在运行运算时,使用两种基本操作进行运算:
- 推入:将数据放入堆栈的顶端(数组形式或串列形式),堆栈顶端 top 指针加一。
- 弹出:将顶端数据输出(回传),堆栈顶端数据减一。
累加器机
累加器机,英文为“Accumulator Machine”,是一种寄存器,用来存储计算产生的中间结果。累加器机模型是一种古老的计算模型,仅能够支持单一值的累加寄存器单元,因此,基于累加器机模型设计的指令都只支持一个操作数。
寄存器机
寄存器机,英文为 Register Machine,也译为暂存器机,这种计算模型的机器,使用特定的 CPU 寄存器组,来作为指令执行过程中数据存储和交换的容器。
在寄存器中,由于每一条参与到数据交换和处理的指令,都需要显示地标记操作数所在的寄存器,相较于堆栈机和累加器机,指令更长,但也更加灵活。
三种计算模型的比较
- 堆栈机使用栈结构作为数据存储与交换的容器,由于其“先进后出”的特性,无法直接操作位于栈底的数据,因此,在特殊情况下,机器会使用额外的指令来进行栈数据的交换过程,从而损失一定的执行效率。但另一方面,堆栈机模型实现简单,指令代码长度适中。
- 累加器机由于只有一个累加器寄存器可用于存储数据,因此在指令的执行过程中,可能会频繁请求机器的线形内存,从而导致一定的性能损耗。但另一方面,该模型最多只能有一个操作数,因此对应的指令代码较为精简。
- 寄存器机内大多数与数据操作相关的指令,都需要在执行时指定目标寄存器,因此,指令代码的长度较长。寄存器机拥有更多的数据暂存容器,一方面,灵活的数据操作导致寄存器的分配和使用规则变得复杂,另一方面,在使用得当的情况下,同样的计算逻辑,基于寄存器机模型,可以生成更为高效的指令执行结构。
最后
我的个人主页 里也同步进行了更新,欢迎来逛逛。