408复习笔记——计算机组成原理(四):指令系统

408笔记系列(十二)(PS:本人使用的是王道四本书和王道视频)


前言

上一章节中,我们花费很多篇幅介绍了计算机的存储系统,主要分为纯硬件构成的“Cache—主存”和操作系统负责的“主存——辅存”两部分,分别解决了主存和CPU之间的速度问题以及主存的容量不足问题,使得我们的计算机在访存时能够花费最少的时间并且使得计算机的存储容量最大化;

根据冯诺依曼的存储结构系统,我们现在应该学习计算机的处理器CPU啦,但是在此之前,我们需要学习一套计算机的指令系统,那么什么是指令系统呢?这也就是我们这一章将要学习的东西;


一、简介

指令系统其实就是计算机上所有指令的集合,那么什么又是指令呢?还记得“存储程序”的概念吗?将指令以代码的形式事先输入计算机的主存储器,然后按其在存储器中首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束;再看“存储程序”的概念,应该能够想到指令其实就是指示计算机执行某种操作的命令;

接下来问题就是具体是干什么的呢?大家还记得指令寄存器IR吗?当时介绍IR时,我们说IR是用来存放当前指令,其内容来自主存的MDR,(这其实就是我们上一章存储器学习的内容),指令中的操作码OP(IR)送到CU,用以分析指令并发出各种为操作命令序列;而地址码Ad(IR)送往MAR,用以去操作数;通过IR我们知道指令分为操作码和地址码,并且操作码会指导应该执行什么性质的操作以及具有何种功能;而地址码则给出了被操作信息的地址;

二、主要内容

1. 操作码

操作码根据指令的操作类型,我们主要划分四种,分别是数据传送类型,运算类型、程序控制类型和输入输出操作类型,其中运算类型又包括算术和逻辑运算操作以及移位操作,程序控制类指令的功能是改变程序执行顺序;值得注意的是:调用指令和转移指令都是程序控制类型指令,但是他们的区别在于执行调用指令时必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执行;而转移指令则不返回执行;

在第一章中,我们曾学习过指令字长的概念,我们知道往往指令字长都是固定的,我们称之为定长指令字长,当然也有变长指令字长,一般定长指令字长执行速度较快且控制简单;

既然指令字定长,指令中又包含着操作码和地址码,那么操作码一般会有多少呢?操作码数量主要和地址码有关,根据地址码中的地址数量我们又可以将指令划分为零地址指令、单地址指令、二地址指令和三地址指令;而在这些指令中,如果操作码定长,那么一定是由指令字长减去地址码的位数决定;

但是,我们知道如果操作码定长的话,那对于有单地址和双地址的指令集来说,当指令后是单地址时,双地址的另外一个地址码其实是浪费掉的,而这对于我们的大佬们而言是绝对不允许存在,为此,扩展操作码指令格式出现了,如图所示:
在这里插入图片描述
通过扩展操作码的指令格式,显然,我们的操作码数量是可以得到很大提升的,在设计扩展操作码指令格式时,我们需要注意以下两点:

  1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分代码相同
  2. 各指令的操作码不能重复

其实这和我们之前学过的哈夫曼编码是很相似的;

2. 地址码寻址

指令除了要将操作码发送到CU外,还会将操作信息发送到MAR进行寻址,寻址往往包括两个方面:指令的寻址和操作数的寻址;

其中指令的寻址其实我们在指令的类型中也有提到,分为顺序寻址方式和跳跃寻址方式,他们的下一条指令地址都是有程序计数器PC给出的,相信大家对这个并不陌生;顺序寻址方式指的是通过程序计数器加1(这个1与指令字长有关,通常需要注意计算机是按照什么进行编址的)的操作来形成下一条指令的地址;跳跃寻址方式指的是修改当前指令的PC值为下跳指令的地址;

接下里是更加重要的操作数寻址,操作数寻址包含了十种类型:

  1. 隐含寻址:指的是指令中隐含操作数的地址;有利于缩短指令字长,能够简化地址结构
  2. 立即寻址:指的是指令中地址码就是操作数,数据存储一般是采用补码的形式;由于不访问主存,所以访存的速度很快,缺点就是地址码的位数限制了立即数的范围;
  3. 直接寻址:指的是指令地址码存放的操作数的有效地址,也是我们正常会想到的一种寻址方式,这种寻址方式就是很简单,但会有一次访存拿操作数,但是地址码的位数将决定操作数的寻址范围;
  4. 间接寻址:指的是在指令地址码存放的是操作数有效地址的有效地址;有点套娃的意思了,你可能会很好奇为什么?因为这样首先可以扩大寻址范围,而且有助于我们调用子函数来编制程序,但是这样会发生两次主存的访存,因此速度很慢;
  5. 寄存器寻址:指的是指令地址码中存放的是寄存器的编号,操作数放在寄存器中,寄存器大家都知道速度是非常快的,,而且寄存器数量较少,所以指令的长度也比较短,所以执行速度快,支持向量矩阵运算,当然缺点就是寄存器太贵了;
  6. 寄存器间接寻址:指的是寄存器存放的是操作数有效地址,其实学过间接寻址大家也比较熟悉这种操作,不过这种操作要比直接用间接寻址效果好太多了;寄存器间接寻址去操作数的速度接近直接寻址;
  7. 相对寻址:指的是有效地址为程序计数器执行这个指令后的值与地址码进行相加,地址码指的是相对于当前指令的偏移量,可正可负,往往以补码表示;这样的操作是便于程序浮动的,但是主要使用于代码在程序之间浮动;
  8. 基址寻址:指的是有效地址为基址寄存器与地址码偏移量相加,基址寄存器的值是不变的,这样的设置有利于多道程序的设计,并且便于程序浮动,主要是程序在内存中的浮动;
  9. 变址寻址:指的是有效地址为变址寄存器与地址码偏移量的和,地址码不变,程序员可以通过改变变址寄存器的值来实现偏移,往往用于编制循环程序,便于数组的使用;
    10.堆栈寄存器:指的是用堆栈存储器来存储数据,并且会有专门的寄存器存放堆栈指针,其中寄存器堆栈称之为硬堆栈,主存中的一段区域做堆栈称之为软堆栈,他的数据的弹出和弹入就是出栈和入栈操作;

我们需要注意的是:有的时候题目可能问的是我们有效地址的地址而不是操作数的地址;此外有些题目并不是只有单纯的一种寻址方式,两种寻址方式相结合的方式

还有一个知识点关于程序状态寄存器也非常有必要在这里说一下:程序状态寄存器(PSW)包括进位/错位标志位CF、零标志位ZF、符号标志位SF、溢出标志位OF;他们如下表所示:

标志位表示1表示0
CF发生进位未发生进位
ZF运算结果为0运算结果为非0
SF运算结果为负运算结果为正
OF发生溢出未发生溢出

3.CISC和RISC

先放一张图和表,之后学完处理器再来补充:
在这里插入图片描述

在这里插入图片描述


三、常见题型和易错题

存储器的答案:A、略、C、C、D、B、D、B、D、A、C、D(重复了)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
答案见下一章!!!(PS:感觉越写越差,时间越来越紧张)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值