第二章 指令系统

【此专栏的文章会不断更新,适合有点基础的伙伴阅读,若有不正确之处,麻烦各位伙伴留言,确认后我会改正。】

知识总览:
计算机系统的设计基本原理
数据表示、数据类型
指令集及指令格式、寻址方式,指令类型,指令系统设计与优化
CISC与RISC技术的特点及相互关系
RISC基本指令集(常用汇编指令介绍)

一、计算机系统的设计基本原理

二、数据表示、数据类型

三、指令集及指令格式,指令类型,指令系统设计与优化
(控制器支持的指令,如何设计?)
首先回忆一下计算机的工作过程:
我们用高级语言写的代码会编译装入主存,然后形成与之对等的机器语言即机器指令,除了一些指令还有一些数据也会被放进主存里。
那么,程序执行的过程其实就是CPU执行一条一条指令的过程,任何一条指令都有两个部分组成,操作码和地址码,操作码指明了做什么,地址码指明了对谁动手。但是当最后一条指令为停机指令时,可以不需要地址码。(利用中断机制通知操作系统终止该进程)

指令集:指令(机器指令)是指示计算机某种操作的命令,一台计算机的所有指令的集合构成该机的指令系统,也称指令集。

指令基本格式:操作码字段+地址码字段
操作码:该指令执行什么性质的操作以及具有何种功能。操作码是识别指令、了解指令功能及区分操作数地址内容的组成和使用方法等关键信息。eg:指出是算术加运算还是算术减运算,是程序转移还是返回操作;

地址码:给出被操作信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址,运算结果的保存地址、程序的转移地址、被调用的子程序的入口地址等。
在这里插入图片描述由于各种各样的指令所需要执行的操作不一样,那么所需的地址码个数也需要变化。

依据地址码个数分类:

零地址指令OP:
1、不需要操作数,如空操作、停机、关中断等指令
2、堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶(操作数会固定的隐含在一个位置)基于后缀表达式进行计算。

一地址指令:
1、只需要单操作数,如加1、减1、取反、求补等,指令含义:OP(A1)–>A1,完成一条指令需要3次访存:取指–>读A1–>写A1
2、需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC),(ACC)OP(A1)–>ACC,完成一条指令需要2次访存:取指–>读A1
注:A1指某个主存地址(类比,C语言指针)(A1)表示A1所指向的地址中的内容

二地址指令:常需要两个操作数的算术运算、逻辑运算相关指令。A1目的操作数,A2源操作数。
指令含义:(A1)OP(A2)–>A1,完成一条指令需要访存四次,取指–>读A1–>读A2–>写A2在这里插入图片描述

正常情况下,取指令之后程序计数器PC+1,指向下一条指令,但是,四地址指令:执行指令后,将PC的值修改为A4所指地址。

思考一下,地址码的位数对我们的指令执行会有什么影响呢?
n位地址码的直接寻址范围=2的n次方
若指令总长度固定不变,则地址码数量越多,寻址能力越差。

小结:在这里插入图片描述
依据指令长度分类:
指令的长度是指一条指令中所包含的二进制代码的位数。
指令字长:一条指令的总长度(可能会变)。取决于操作码的长度、操作数地址码的长度和操作数地址的个数。
指令长度与机器字长没有固定的关系,它可以等于机器字长也可不等。
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数,(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)

半字长指令、单字长指令、双字长指令-----指令长度是机器字长的多少倍
指令字长会影响所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令(32bit)需要两次访存

定长指令字结构:指令系统中所有指令的长度对相等
变长指令字结构:指令系统中各种指令的长度不等

依据操作码长度分类:
定长操作码:指令系统中所有指令的操作码长度都相同(控制器的译码电路设计简单,但灵活性较低)n位–>2的n次方条指令
可变长操作码:指令系统中各指令的操作码可变(控制器的译码器电路设计复杂,但灵活性较高)
定长指令字结构+可变长操作码—>扩展操作码指令格式

依据操作类型分类
1、数据传送:
LOAD 作用:把存储器中的数据放到寄存器中(源–>目的)
STORE 作用:把寄存器中的数据放到存储器中
2、算术逻辑操作
算术:加、减、乘、除、增1、减1、浮点运算、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位求反
3、移位操作
算术移位、逻辑移位、循环移位(带进位和不带进位)
4、转移操作(程序控制类:改变程序执行的顺序)
无条件转移 JMP
条件转移 JZ:结果为0;JO:结果溢出;JC:结果有进位
调用和返回 CALL和RETURN
陷阱(Trap)与陷阱指令
5、输入输出操作
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)

小结:
此外,还有一个扩展操作码的指令格式(不同地址数的指令使用不同长度的操作码)
定长指令字结构+可变长操作码

为什么三地址指令,我们要保留4个全1的状态?
事实上,CPU在取得一条指令的时候,一定是直接读入16位,根据开头的这几位是否全为1,就可判断这是一条三地址指令还是二地址指令。
对于一地址指令,前面的8位全都是1,方便CPU判断这是几地址指令。
零地址指令,前12位。
注意事项:

如何设计扩展操作码?

对于如上这种设计方式来说,CPU是如何解析一条指令的?
CPU一次性读入16bit,首先会判断前4位,如果前4位不是全1的状态,那说明这是一条三地址指令,那CPU会根据这4位的指示,按三地址的规则去执行这个指令。如果CPU检测到开始的前4位全是1的话,CPU会检查后面的2位是不是全1的状态,如果不是全1那就说明这是一条二地址指令,那么CPU会依据前8位来判断这是一条怎样的二地址指令。
如果CPU检测到开始的前6位全是1的话,会接着检查后面的全5位是不是1…

设地址长度为n,上一层留出m种状态,下一层可扩展出m乘2的n次方种状态。
即:
指令格式小结:
在这里插入图片描述

四、寻址方式

指令寻址:如何确定下一条指令的存放地址?分为顺序寻址和跳跃寻址
程序计数器PC:指明下一条指令的存放地址
下一条指令的地址:(PC)+1—>PC
以上是按字的情况,如果按字节编址怎么办?每次加2;采用变长指令字结构怎么办?

指令寻址—>下一条欲执行指令的地址—>(始终由程序计数器PC给出)



以上都可归为顺序寻址,一条一条的执行;(PC)+‘1’—>PC

**跳跃寻址:**直接改变PC的值

小结:

**数据寻址:**确定本条指令的地址码指明的真实地址
【地址码的解读方式不同】十种解读方式,在原有的格式上增加几个bit位来表示寻址特征


①、直接寻址:指令字中的形式地址A就是操作数的真实地址EA,即EA=A

一条指令的执行:取指令 访存一次,执行指令 访存1次,暂不考虑存结果共访存2次
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。

②、简接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)
一条指令的执行:取指令 访存一次,执行指令 访存2次,暂不考虑存结果共访存3次

优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)
便于编制程序(用间接寻址方式可以方便地完成子程序返回)
缺点:指令在执行阶段要多次访存(一次简址需两次访存,多次寻址需要根据存储字的最高位确定几次访存)

③、寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在由Ri所指的寄存器内。

一条指令的执行:取指令 访存一次,执行指令 访存0次,暂不考虑存结果共访存1次
优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
缺点:贵,计算机中寄存器个数有限,寻址能力有限。

④、寄存器简介寻址:寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)

一条指令的执行:取指令 访存一次,执行指令 访存1次,暂不考虑存结果共访存2次
优点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)

⑤、隐含寻址:不是明显地给出地址,而是在指令中隐含着操作数的地址

⑥、立即寻址:形式地址A就是操作数本身,又称为立即数,一般采用补码形式。寻址特征:# 表示立即寻址特征
一条指令的执行:取指令 访存一次,执行指令 访存0次,暂不考虑存结果共访存1次
优点:指令执行阶段不访问主存,指令执行时间最短
缺点:A的位数限制了立即数的范围,如A的位数为n,且立即数采用补码时,可表示的数据范围为
小结:

需要重点关注:如何根据形式地址得到有效地址,不同形式的地址对A的解读方式不同,以及每一种寻址方式的访存次数?

⑦、偏移寻址(包含3种)回忆最开始的例子

基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A

寻址特征:在指令中指明,要将哪个通用寄存器作为基址寄存器使用
思考:要用几个bit指明寄存器?
根据通用寄存器总数判断

基址寻址存在的必要?
采用基址寻址无需修改指令中的地址码,便于程序“浮动”,方便实现多道程序并发运行
程序运行前,CPU将BR的值修改为该程序的起始地址(存在操作系统进程控制块PCB中)
注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。当采用通用寄存器作为基址寄存器时,但其内容仍由操作系统确定。
优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)

变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=(IX)+A,其中IX可为变址寄存器(专用),也可通用寄存器作为变质寄存器。

注:变址寄存器是面向用户的,在程序执行中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址)
变址寻址的作用:

优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。

基址&变址复合寻址:

【未完】

五、CISC与RISC技术的特点及相互关系

六、RISC基本指令集(常用汇编指令介绍)

  • 29
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值