第五章 指令系统

指令系统概述

指令:控制计算机执行某种操作(加减乘除等)的命令
指令系统:计算机中所有指令的集合

指令通常包括以下内容:

  • 具体做什么操作
  • 操作对象的来源
  • 操作结果的存放位置

指令系统是计算机系统性能的集中体现,是计算机软硬件系统的设计基础,一方面,硬件设计者要根据指令系统进行硬件的逻辑设计,另一方面,软件设计者也要根据指令系统来建立计算机的系统软件,如何表示指令,如何构建指令系统,直接影响计算机系统的软硬件功能,一个完善的指令系统应该满足下面4方面的要求:

  • 完备性
    编程时,指令系统直接提供的指令足够使用,不必用软件实现,即要求指令种类齐全,使用方便

  • 有效性
    用指令编写的程序能高效运行,占用资源少

  • 规整性
    规整性包括三个方面

    1. 对称性:衡量指令对各种寻址方式的支持,即指令能同等对待存储器/寄存器,指令能使用各种寻址方式
    2. 均齐性:衡量指令对各种数据类型的支持
    3. 一致性:指的是指令长度与数据长度的关系,通常是字节的整数倍
  • 兼容性
    机器上运行的程序,无需修改或者少量修改就能在另一台计算机运行

指令格式

指令是计算机中传输控制信息的载体,每条指令代表某个基本的信息处理操作及操作的对象
一般的指令格式:

操作码 + 操作数地址码

操作码

操作码用来表示具体的操作性质,不同功能的指令其操作码编码不同
操作码又可分为两种:

  • 固定长度操作码:不仅操作码长度固定,而且在指令中的位置也固定
  • 可变长操作码:操作码长度不固定,在指令中的位置也不固定

地址码

地址码字段的作用随指令类型和寻址方式不同而不同,根据一条指令中所包含的操作数地址数量,可以分为四种:

  • 三地址指令
    两个操作数进行某种运算,其结果放入第三个操作数
  • 双地址指令
    两个操作数进行某种运算,其结果放回其中的一个操作数中
  • 单地址指令
    1. 单目运算符,如求反操作
    2. 将另一个操作数隐含于某个寄存器
  • 零地址指令
    1. 操作不需要地址,如NOP,WAIT等
    2. 需要一个操作数,但是隐含于某个寄存器
    3. 需要两个操作数,但是都位于堆栈中

指令长度

指令长度是指指令的二进制位数,可以分为:

  • 半字长指令
    指令字长等于半个机器字长,每个存储单元可以存放两条指令
  • 但字长指令
    指令字长等于一个机器字长,每个存储单元可以存放一条指令
  • 多字长指令
    指令字长等于多个机器字长,多个存储单元存放一条指令

指令和操作数的寻址方式

寻址方式:寻找指令或操作数有效地址的方法
运行程序之前,必须将指令和数据存放到主存中,主存是基于地址访问的存储器,只有获得相应的地址,CPU才可以访问到主存中对应的内容

指令的寻址方式

顺序寻址

顺序寻址:程序中的指令序列往往是顺序存放,如果知道第一条指令的地址,很容易得到下一条指令的地址
CPU用程序计数器PC保存下一条将被执行的指令地址,每执行一条指令,PC值自动加1,得到下一条指令的地址,这里的加1,是指加一条指令占用的存储单元数,如32位系统中,一条指令4字节,因此按字节编址的情况下,实际是加4

跳跃寻址

当程序中出现分支或转移时,会改变程序执行顺序,这时采用跳跃寻址,下一条指令地址通过PC加上一个偏移值得到

操作数寻址方式

操作数寻址方式:形成操作数有效地址的方法
单地址指令结构:操作码 OP+ 寻址方式特征码 I + 形式地址 D

立即数寻址

此时寻址方式特征码指示为立即寻址,形式地址D是操作数本身,这个立即数作为指令的一部分与指令一起存放在主存单元,取指令时送到指令寄存器中
特点:指令执行速度快,但是受指令所分配的位数限制,不能表示太大的数

直接寻址

直接寻址:指令的地址码字段直接作为操作数地址
此时特征码指出直接寻址方式,形式地址给出操作数的地址
特点:地址直观,不需要通过计算就可以直接获取到操作数地址,但是受位数限制,寻址范围受限,不能表示太大的地址,数据地址改变时,程序也要改变,编程不变

间接寻址

特征码指出间接寻址方式,地址码字段中的形式地址给出操作数地址的地址,因此D只是一个间接地址
特点:解决直接寻址范围受限问题,用较短的地址码访问较大的主存空间

寄存器寻址

寄存器寻址:操作数在CPU内的某个通用寄存器中
这种方式下,取操作数不需要访问主存,因此形式地址字段不表示主存地址,而是通用寄存器号
特点:不需要访问主存,指令执行速度快,所需的地址码短,指令长度可以缩短,节省内存空间

寄存器间接寻址

操作数的地址存放在寄存器中,指令的形式地址字段D给出的是寄存器号,以对应寄存器的内容为地址访问主存单元,得到操作数
特点:访问一次寄存器和一次内存,相对于间接寻址访问两次内存,速度更快,所有既能扩展寻址范围,又不增加访问主存的次数

相对寻址

相对寻址:把程序计数器PC的内容加上指令中形式地址D,形成操作数的有效地址
特点:编程只要确定程序内部操作数与指令的相对距离,而无需确定操作数在主存中的绝对地址,便于实现程序浮动

变址寻址

用一个寄存器存放变化的地址,这个寄存器称为变址寄存器,同时用指令的形式地址字段存放一个偏移值,变址寄存器的内容与指令中形式地址D之和即为操作数的有效地址
一般情况下,变址寄存器的内容每次操作后都会改变,而指令中的偏移量是不变的
对于某些指令,变址寄存器是隐含的,例如(SI 和 DI 寄存器),如果采用通用寄存器作为变址寄存器,则需要显式地指定
变址寻址一般用于对数组之类的线性数据访问

基址寻址

用一个寄存器存放基地址,这个寄存器称为基址寄存器,同时用指令的形式地址字段存放变化的地址值,基址寄存器的内容与形式地址D之和即为操作数据的有效地址
一般情况下,基址寄存器的内容不变,形式地址字段的内容一直变化,正好与变址寻址相反
CPU内部有专门的基址寄存器(BX 和 BP),因此基址寄存器将会隐藏,如果采用通用寄存器作为基址寄存器,则需要指令中指出

和变址寻址的对比

  • 基址寻址面向系统,主要用于程序的重定位
  • 变址寻址面向用户,主要解决程序循环问题

堆栈寻址

堆栈以先进后出的方式存储数据,寻找存放在堆栈中的操作数地址的方法称为堆栈寻址
在内存中设置一个堆栈基地址,设置一个栈顶指针SP,即可形成堆栈空间

其它寻址

复合寻址

复合寻址是几种寻址方式的组合,主要用于复杂指令集结构计算机

  • 变址寻址 + 间接寻址
  • 间接寻址 + 变址寻址
  • 相对寻址 + 间接寻址

段寻址

段寻址是为了扩大寻址范围,参考8086汇编

分页寻址

为了解决直接寻址中,受位数限制,寻址访问有限的问题
将内存分页,页号提前送入,寻址时,将页号与形式地址进行组合

指令系统类型

一个完善的指令系统应该包括的基本指令有:

  • 数据传送指令
    数据传送指令是计算机中最基本最常用的指令,主要用于两个部件之间的数据传送

  • 算数逻辑运算指令
    进行各类数据信息处理,包括各种算数运算以及逻辑运算

  • 移位操作指令
    分为算数移位,逻辑移位,循环移位,对操作数进行移动

  • 堆栈操作指令
    堆栈操作主要是入栈和出栈,用于保存和恢复中断和子程序调用时现场数据和指令地址,以及子程序调用的参数传递等

  • 字符串处理指令
    属于非数值处理指令,便于直接用硬件支持非数值处理,一般包括字符串传送,字符串比较,字符串查找,字符串抽取,字符串替换等

  • 程序控制指令
    用于控制程序运行的顺序和选择程序的运行方向,主要包括转移指令,循环控制指令,子程序调用与返回指令

  • 陷阱指令
    陷阱是由于意外事故而导致程序执行中断,发生这类时间将导致计算机无法正常工作,必须采取措施

  • 输入输出指令
    简称IO指令,用于主机与外部之间的数据输入输出,主机向外设发出各种控制命令

  • 其它指令
    NOP,WAIT等

指令格式设计及优化

指令格式的设计

指令一般由操作码和地址码组成,指令格式的设计首先要确定指令的编码格式,在此基础上还要确定操作码字段和地址码字段的大小和组合形式,以及各种寻址方式的编码

指令编码格式的设计

指令的编码格式设计就是要确定指令是采用定长指令结构,变长指令结构,还是混合结构

  • 定长指令格式
    指令系统中,各种类型指令长度都相等,结构规整,有利于简化硬件,但是容易出现冗余码点,指令不易拓展
  • 变长指令格式
    指令字的长度随功能的不同而不同,结构灵活,指令码点冗余少,易于拓展,但是格式不规整,会导致控制复杂
  • 混合编码指令格式
    是定长与变量的综合,提供若干长度固定的指令字

操作码的设计

满足完备性是操作码设计的基本要求,还要确认操作码采用定长结构还是变长结构

地址码的设计

地址码要能为指令提供必要的操作数,还要满足指令系统的有效性和规整性

寻址方式的设计

一般将寻址方式单独编码,分配一个寻址方式字段

指令格式的优化

指令格式的优化设计的目的

  • 节省程序的存储空间
  • 指令格式要尽量规整,以减少硬件译码的复杂程度
  • 不能降低指令的执行速度

操作码优化

定长结构的操作码虽然规整,译码简单,但是冗余严重,因此可以缩短长度,降低冗余,主要有以下两种方法

huffman编码

将发生概率最高的指令,用最短的位数表示,出现概率较低的,用较长的位数表示
设某计算机指令系统中有n种不同的指令,第i种操作码在程序种出现的概况为pi,则编码步骤为

  • 把所有指令按照操作码出现的概率从低到高的次序自左向右排列
  • 选取两个概率最小的节点合并成一个概率值是两者之和的新节点,并把这个新节点与其它还没有合并的节点一起组成新节点集合,并按合并后的概率重新排序
  • 在新结点集合种选取两个概率最小的节点进行合并,如此继续,直到全部节点合并完毕
  • 最后得到的根节点概率为1
  • 每个节点都有两个分支,分别用0和1表示
  • 从根节点开始,逐级下移,到达属于每条指令的概率节点,把沿线所经过的代码组合起来,得到相应指令的操作码编码

扩展编码

huffman操作码的主要缺点是长度不规整,硬件译码困难,与地址码共同组成固定长的指令比较困难,扩展编码就是为了解决上述问题

  • 等长扩展
    每次扩展位数相同,根据选择位数不同,等长扩展也有很多不同的方法

  • 不等长扩展
    每次扩展位数不同

基于地址码扩展的操作码优化

通常在指令中用一个固定长度的操作码字段对基本的指令进行编码,对于不需要地址字段的指令,可以把操作码扩展到地址码字段

地址码优化方法

地址码优化的根本目的是缩短地址码长度,用一个较短的地址码表示同一个较大的逻辑地址空间

  • 间接寻址方式:在存储器低端开辟一个区域,将实际的地址存入,实现缩短地址码的目的
  • 偏移寻址方式:由于局部性原理,使用偏移量位数可以比较短
  • 寄存器间接寻址:寄存器中存放实际地址,但是缺点是寄存器数量比较少

CISC和RISC的基本概念

复杂指令集计算机CISC

  • 指令系统复杂庞大,指令数目一般多达两三百条
  • 寻址方式多
  • 指令格式多
  • 指令字长不固定
  • 访存指令不加限制
  • 各种指令使用频率相差大
  • 各种指令执行时间相差大
  • 大多数采用微程序控制器

精简指令集计算机RISC

CISC典型程序中,80%的程序只用到了20%的指令集,因此提出RISC
针对CISC指令系统种类太多,指令格式不规范,寻址方式太多的缺点,减少指令种类,简化寻址方式,方便处理器内部的并行处理,从而大幅提高CPU性能

特点:

  • 选取使用频率高的指令,避免使用复杂指令
  • 大多数指令在一个机器周期内完成
  • 采用load/store结构,尽量减少主存访问
  • 采用简单的指令格式和寻址方式,指令长度固定
  • 固定的指令格式,可简化指令的译码逻辑
  • 面向寄存器的结构,为减少访问内存,CPU内设置大量寄存器
  • 采用硬布线控制逻辑
  • 注重编译的优化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章