计算机系统结构复习笔记(二)

第二章 计算机指令集结构

2.1指令集结构的分类

区别不同指令集结构的主要因素:
CPU中用来存储操作数的存储单元的类型,主要类型有:堆栈、累加器、通用寄存器组
将指令集结构分为三种类型
1.堆栈结构
2.累加器结构
3.通用寄存器结构
·根据操作数的来源不同,又可进一步分为:
    寄存器-存储器结构(RM结构)(操作数可以来自存储器 )
    寄存器-寄存器结构(RR结构)(所有操作数都是来自通用寄存器组)也称为load-store结构,这个名称强调:只有load指令和store指令能够访问存储器。

对于不同类型的指令集结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。
显式给出:用指令字中的操作数字段给出
隐式给出:使用事先约定好的存储单元

4种指令集结构的操作数的位置以及结果的去向

 


通用寄存器结构是现代指令集结构的主流
在灵活性和提高性能方面有明显的优势:
1.寄存器在CPU内部,其访问速度比存储器快。
2.对编译器而言,能更加容易、有效地分配和使用寄存器。
3.寄存器可以用来存放变量。

根据ALU指令的操作数的两个特征对通用寄存器型指令集结构进一步细分为3种类型
寄存器-寄存器型(RR型)
寄存器-存储器型(RM型)
存储器-存储器型(MM型)

2.2寻址方式(非本节课重点)

寻址方式:一种指令集结构如何确定所要访问的数据的地址的方法。

 采用多种寻址方式可以显著地减少程序的指令条数,但可能增加计算机的实现复杂度以及指令的CPI

立即数寻址方式和偏移寻址方式的使用频度最高。

在比较旧的VAX结构上测试,是因为他寻址方式最多

对于偏移寻址中偏移量的取值范围:
程序所使用的偏移量大小分布十分广泛
较小的偏移量和较大的偏移量均占有相当大的比例

对于立即数寻址方式的使用频度:
大约1/4的load指令和ALU指令采用了立即数寻址

对于立即数的取值范围:
最常用的是较小的立即数
有时也会用到较大的立即数(主要是用于地址计算)。
在指令集结构设计中,至少要将立即数的大小设置为8~16位。

2.3指令集结构的功能设计

指令集结构的功能设计
确定软、硬件功能分配,即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。
在确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性
硬件实现的特点:速度快、成本高、灵活性差
软件实现的特点:速度慢、价格便宜、灵活性好
对指令集的基本要求:完整性、规整性、高效率、兼容性

在设计指令集结构时,有两种截然不同的设计策略:
CISC(Complex Instruction Set Computer--复杂指令集计算机)
增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。
RISC(Reduced Instruction Set Computer-精简指令集计算机)
尽可能地把指令集简化,不仅指令的条数少,而且指令的功能也比较简单。

2.3.1 CISC指令集结构的功能设计(非重点)

CISC结构追求的目标:
强化指令功能,减少程序的指令条数,以达到提高性能的目的

增强指令功能主要是从以下几个方面着手:
面向目标程序增强指令功能
面向高级语言的优化实现来改进指令集
面向操作系统的优化实现改进指令集

2.3.2 RISC指令集结构的功能设计

CISC指令集结构存在的问题:
1.各种指令的使用频度相差悬殊
只有20%的指令使用频度比较高,占运行时间的80%,而其余80%的指令只在20%的运行时间内才会用到。使用频度高的指令也是最简单的指令。
2.指令集庞大,指令条数很多,许多指令的功能又很复杂,使得控制器硬件非常复杂

设计RISC机器遵循的原则:
1.指令条数少而简单。
2.采用简单而又统一的指令格式,并减少寻址方式。
3.指令的执行在单个机器周期内完成。
4.只有load和store指令才能访问存储器,其他指令的操作都是在寄存器之间进行。
5.大多数指令都采用硬连逻辑来实现。
6.强调优化编译器的作用,为高级语言程序生成优化的代码。
7.充分利用流水技术来提高性能。

早期的RISC微处理器共同特点:
1.采用load-store结构
2.指令字长为32位
3.采用高效的流水技术

2.3.3 控制指令(非重点)

控制指令是用来改变控制流的。
能够改变控制流的指令:
1.分支(控制指令是有条件改变控制流)
2.跳转(指令是无条件改变控制流)
3.过程调用(call)
4.过程返回(ret)

改变控制流的大部分指令是分支指令(条件转移)。

2.4操作数的类型和大小(非重点)

数据表示:计算机硬件能够直接识别、指令集可以直接调用的数据类型。
数据结构:由软件进行处理和实现的各种数据类型。
操作数的大小:操作数的位数或字节数。
主要的大小:字节(8位)、半字(16位)、字 (32位)、双字(64位)
基准程序对单字和双字的数据访问具有较高的频度。

2.5指令格式的设计

指令由两部分组成:操作码地址码

操作码的编码比较简单和直观:
Huffman编码法
减少操作码的平均位数,但所获得的编码是变长的,不规整,不利于硬件处理。
固定长度的操作码
保证操作码的译码速度。

寻址方式的两种表示方法:
1.将寻址方式编码于操作码中,由操作码描述相应操作。
适合:处理机采用load-store结构,寻址方式只有很少几种。
2.设置专门的地址描述符,由地址描述符表示相应操作数。
适合:处理机具有多种寻址方式,且指令有多个操作数。

指令集的3种编码格式:

变长编码格式

定长编码格式
将操作类型和寻址方式一起编码到操作码中。

混合型编码格式

2.6MIPS指令集的结构(这里不详细写了,可以看看讲的好的博客:https://blog.csdn.net/JAck_chen0309/article/details/102459349)

2.6.1 MIPS的寄存器
32个64位通用寄存器(GPRs)
32个64位浮点数寄存器(FPRs)
一些特殊寄存器
例如,浮点状态寄存器用来保存有关浮点操作结果的信息。也可以与通用寄存器交换数据。

2.6.2 MIPS的数据表示
整数
字节(8位) 半字(16位)
字(32位) 双字(64位)
浮点数
单精度浮点数(32位) 双精度浮点数(64位)

2.6.3 MIPS的数据寻址方式
直接实现只有两种:立即数寻址偏移量寻址(立即数字段和偏移量字段都是16位的。)
寄存器间接寻址是通过把0作为偏移量来实现的
16位绝对寻址是通过把R0(其值永远为0)作为基址寄存器来完成的
MIPS的存储器是按字节寻址的,地址为64位
所有存储器访问都必须是边界对齐的

2.6.4 MIPS的指令格式
寻址方式编码到操作码中(前面介绍的第一种)
所有的指令都是32位的(固定长度)
3种指令格式
操作码占6位

I类指令:
包括所有的load和store指令、立即数指令、分支指令、寄存器跳转指令、寄存器链接跳转指令。
立即数字段为16位,用于提供立即数或偏移量。

R类指令
包括ALU指令、专用寄存器读/写指令、move指令等。

 

 

J类指令
包括跳转指令、跳转并链接指令、自陷指令、异常返回指令。
在这类指令中,指令字的低26位是偏移量,它与PC值相加形成跳转的地址。

2.6.5 MIPS的操作
MIPS指令可以分为四大类
load和store(I类)
ALU操作(R类、I类)
分支与跳转( I类、J类、R类)
浮点操作( I类、R类)
R0的值永远是0,它可以用来合成一些常用的操作。

2.6.6 MIPS的控制指令
由一组跳转和一组分支指令来实现控制流的改变
2.6.7 MIPS的浮点操作
由操作码指出操作数是单精度(SP)或双精度(DP)
后缀S:表示操作数是单精度浮点数
后缀D:表示是双精度浮点数

 

posted @ 2023-06-20 17:42  Midvoy_尺  阅读(242)  评论(0编辑  收藏  举报