指令集结构的分类
指令集结构不同的原因
Q:指令集结构都是相同的吗?如果不同,为什么不同?
不同的主要因素:CPU中用来存储操作数的存储单元的类型
为啥?那是因为CPU内部存储单元的类型是不同的。
CPU存储操作数的存储单元有三种主要类型
- 堆栈
- 累加器
- 寄存器组
指令集的结构分类
PS:因此我们把指令集结构也分为三种类型
-
堆栈结构
-
累加器结构
-
通用寄存器结构
根据操作数的来源不同,可进一步被分为
- 寄存器-存储器结构(RM结构)【操作数可以来自存储器】
- 寄存器-寄存器结构(RR结构)【所有操作数都来自通用寄存器组】
这个结构也被称作load-store结构,因为只有load指令和store指令可以访问存储器
这个进一步分为可能有点抽象,结合图片和四种操作类型就很直观了
还有两个不知从哪里冒出来毫无逻辑的知识点,小声bb
操作数的两种给出方式
- 显式给出:用指令字中的操作数字段给出
- 隐式给出:用事先约定好的存储单元
用人话讲,显式给出就是直接给你看到,隐式告诉你个地址,你也能找到
四种指令结构的操作数位置(指令放在哪)结果去向(执行完指令后结果存在哪)
对应四幅图(自己看链接ppt,不看也应该能明白)
堆栈结构:操作数放栈顶,结果存储在栈里(很显然啊,栈先进后出,你指令不放栈顶咋取?)
累加器结构:操作数和结果都在累加器中完成
通用寄存器(RM)结构通用寄存器(RR)结构的不同在于:
RM的操作数可以来自内存,RR必须来自寄存器。其他的都与前面的差不多,都在结构内部。
继续划分
分割线,后面都是再讲那个牛b的现代主流指令集结构以及深度划分( ̄ε(# ̄)
分析了四种之后,我们来介绍一下现代指令集结构的主流——通用寄存器结构
为什么可以成为主流?
- 访问速度快
- 对编译器友好
- 寄存器自己存变量不用访问存储器又快占地址位又少
根据ALU指令的操作数的两个特征又可以对通用寄存器指令集结构进一步细分
不会有人不知道ALU是啥吧(算术逻辑单元)
ALU的两个特征
-
ALU指令的操作数个数
- 三个操作数的指令(两个源操作数、一个目的操作数)
- 两个操作数的指令(其中一个既是源操作数又是目的操作数)
可以看看例题C = A + B中的操作
-
ALU存储器操作数个数(0~3)
通用寄存器又多了一种 存储器-存储器型(MM型),还有RM,RR型
三种各有优缺点,八股文自行查询(ง •_•)ง