学习笔记:计算机组成原理Ch4.栈处理器

在之前已经讲解过stack,这里就介绍一种以stack为原理的处理器

声明:这种处理器被制造出来过,但从来没有商用过,本章只讲解原理

LIFO stack:先入后取 栈

先介绍一下通用的计算机结构:

043_001.jpg

左右两边两个栈,都是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可以定位,可以随机访问

下面介绍一些栈处理器的指令集:

043_002.jpg043_003.jpg043_004.jpg

我们可以轻松的用C++模拟这样的栈处理器,下面开始把指令翻译成代码:

先写一下这个处理器的主程序,写一个wihle循环即可

043_005.jpg

这里就非常好的描述了,I执行由P地址导向的指令,并且执行完了P就+1

是不是现在对T和B还一知半解,现在马上揭晓:

我们先来翻译前几个代码

043_006.jpg

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

043_007.jpg043_008.jpg

这里可以看到,P=I.a就是直接把Pjump到a处

上面的指令翻译完了,我们下面可以用上面的指令来表示一下各种控制循环操作:

043_009.jpg

这里先介绍一下Evaluate B:这个操作会直接得出栈顶的boolean值。

由于是栈结构,所以必须一条线下来,就有了如右边所示结构.。

043_010.jpg043_011.jpg

好了,之后介绍data memory如何存储:

因为操作机只在栈顶操作,那么就需要把任意元素复制到栈顶的指令:

043_012.jpg043_013.jpg

下面来看看它如何运算:

043_014.jpg

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

043_015.jpg

当然,它还可以召唤自己的子流程的地址:

召唤之前,先来看看,如何进入子流程,以及如何返回子流程的结果:

043_016.jpg

当跳过去了,就建立了一个dynamic link

现在来介绍什么是dynamic link,什么是static link

043_017.jpg

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

就会有:

043_018.jpg

再访问purple,就会有

043_019.jpg

其中,blue和purple既建立static link也建立了dynamic link

接下来再访问green,会发现也是如此

再访问yellow,就会发现,它仅和green建立了dunamic link

但是和blue建立了static link

这是因为yellow只有在green call的时候才会和green建立dynamic link

但是yellow一直处在blue的上头,所以天生就有static link

043_020.jpg


学习笔记:计算机组成原理Ch4.栈处理器
https://yiyuwang.be/2021/01/07/2021-01-07-342660480/
作者
StevenWong
发布于
2021年1月7日
许可协议