学习笔记:计算机组成原理Ch4.栈处理器
在之前已经讲解过stack,这里就介绍一种以stack为原理的处理器
声明:这种处理器被制造出来过,但从来没有商用过,本章只讲解原理
LIFO stack:先入后取 栈
先介绍一下通用的计算机结构:

左右两边两个栈,都是lifo stack;
P是P register,保存连续指令的连续地址,可以再下次马上拿到
I是instruction register,指令被唤起时,先进入I,然后运行
B是base register,管理stack memory;
T是stack pointer;管理stack memory;
右上角有一个两个操作数的stack 操作unit;
注:左边的code memory在运行时只读,并且可以随机定位
右边的data memory可以定位,可以随机访问
下面介绍一些栈处理器的指令集:



我们可以轻松的用C++模拟这样的栈处理器,下面开始把指令翻译成代码:
先写一下这个处理器的主程序,写一个wihle循环即可

这里就非常好的描述了,I执行由P地址导向的指令,并且执行完了P就+1
是不是现在对T和B还一知半解,现在马上揭晓:
我们先来翻译前几个代码

可以看到,T代表的就是data栈最顶上的地址


这里可以看到,P=I.a就是直接把Pjump到a处
上面的指令翻译完了,我们下面可以用上面的指令来表示一下各种控制循环操作:

这里先介绍一下Evaluate B:这个操作会直接得出栈顶的boolean值。
由于是栈结构,所以必须一条线下来,就有了如右边所示结构.。


好了,之后介绍data memory如何存储:
因为操作机只在栈顶操作,那么就需要把任意元素复制到栈顶的指令:


下面来看看它如何运算:

下面来看看for循环如何操作:

当然,它还可以召唤自己的子流程的地址:
召唤之前,先来看看,如何进入子流程,以及如何返回子流程的结果:

当跳过去了,就建立了一个dynamic link
现在来介绍什么是dynamic link,什么是static link

如图所示,这是一个block套block,那么此时先访问blue
就会有:

再访问purple,就会有

其中,blue和purple既建立static link也建立了dynamic link
接下来再访问green,会发现也是如此
再访问yellow,就会发现,它仅和green建立了dunamic link
但是和blue建立了static link
这是因为yellow只有在green call的时候才会和green建立dynamic link
但是yellow一直处在blue的上头,所以天生就有static link
