指令系统

1.概述

指令系统:指一台计算机所具有的全部机器指令的集合,反映了该计算机所拥有的基本功能,是计算机硬件的语言系统,也被称为机器语言

  • CISC与RISC指令系统的特点及区别
CISC RISC
指令系统庞大,软件硬化 指令系统简单
指令格式和寻址方式多样性 指令长度固定,指令格式,寻址方式种类少
编译程序复杂,程序编译速度慢 优先选取高频简单指令,避免复杂指令
大多数指令功能复杂 各字段划分比较一致,功能也比较规整
各种指令都可访问存储器 只有LOAD,STORE指令可访问存储器
绝大多数指令需多个机器周期完成 多数指令一个机器周期内完成
控制单元设计采用微程序控制技术 控制单元设计采用硬布线控制逻辑
各种指令使用频度相差悬殊 CPU使用流水线结构
难以调试维护,可靠性差 采用编译优化技术,减少程序执行时间
  • 指令系统的设计原则

    • 完整性:要求通用计算机应具备完善的指令功能
    • 规整性:所有运算部件都能等同地访问所有数据存储单元
    • 高效性:利用该指令系统编写的程序能够高效率地运行
    • 兼容性:通常只能做到向上兼容向后兼容
  • 地址空间

    • 三地址空间:通用寄存器,主存储器,输入输出设备分别进行独立编址
    • 二地址空间:通用寄存器独立编址,主存和I/O设备统一编址,
      优点:能够简化指令系统不必另外设置输入输出指令所有能访问主存的指令都能访问I/O设备
      缺点:所有访问主存的指令都需通过地址译码来判断是否访问I/O设备影响指令的执行速度
      二地址空间
    • 一地址空间:所有设备统一编址,地址编码最长,所有能访问寄存器的指令,也能访问主存和I/O设备
      一地址空间
    • 零地址空间:隐含编址方式,堆栈计算机中有这种方式
  • 独立编址和统一编址的对比

    • 独立编址
      专用的I/O端口编址,存储器和I/O端口在两个独立的地址空间中
      • 优点:I/O端口的地址码较短,译码电路简单,存储器同I/O端口的操作指令不同,程序比较清晰;存储器和I/O端口的控制结构相互独立,可以分别设计
      • 缺点:需要有专用的I/O指令,程序设计的灵活性较差
    • 统一编址
      存储器映像编址,存储器和I/O端口共用统一的地址空间,当一个地址空间分配给I/O端口以后,存储器就不能再占有这一部分的地址空间
      • 优点:不需要专用的I/O指令,任何对存储器数据进行操作的指令都可用于I/O端口的数据操作,程序设计比较灵活;由于I/O端口的地址空间是内存空间的一部分,这样,I/O端口的地址空间可大可小,从而使外设的数量几乎不受限制
      • 缺点:I/O端口占用了内存空间的一部分,影响了系统的内存容量;访问I/O端口也要同访问内存一样,由于内存地址较长,导致执行时间增加

2.编址方式

  • 按字编址

    • 实现容易简单,每个编址单位设备的访问单位一致,即每个编址单位所包含的信息量(二进制位数)与访问一次设备所获得的信息量是等同的,早期采用这种方式
    • 缺点:对非数值计算支持不足,不支持字节操作,位操作,需专门设置字节操作指令,微操作指令
  • 按字节编址

    • 编址单位是字节,与信息的基本单位一致
    • 即有字节地址,又有字地址,字节地址一般连续,字地址一般不连续
      字地址 = n * 字长 / 8(n = 0,1,2,...)
    • 每个编址单位所包含的信息量与访问一次存储器所获得的信息量不相同
  • 字节编址顺序问题

    • 小端方式(低字节低地址)
      字节地址从左往右逆序
      小端方式
    • 大端方式(高字节低地址)
      字节地址从左往右升序
      大端方式
  • 数据存放边界对齐问题

    • 边界对齐
      • 规定了字节半字单字双字存放的起始位置
      • 优点:访问各种长度的数据都可在一个存储周期内完成读写控制简单
      • 缺点:造成存储空间浪费存储空间利用率低
        边界对齐
    • 边界不对齐:可从任意位置开始存储
      • 不浪费存储空间,不同长度的数据一个紧接着一个存放,存储空间利用率高
      • 访问双字,单字都有可能跨越两个字单元存放,可能需花费两个存储周期的时间,存储器工作速度降低一倍
      • 存储器读写控制复杂
        边界不对齐

3.指令格式

  • 操作码:给出指令操作性质,即指令要完成的功能
  • 地址码:指出操作数的地址,或下一条指令在主存储器中的地址


    指令基本格式
  • 三地址指令:指令执行后两个源操作数内容不变,但指令字长较长
    • 通常完成 A3 <- (A1)OP(A2)
      三地址指令
  • 二地址指令:两个源地址之一和目的地址结合起来,留下另一个源地址格式保持独立
    • 通常完成 A1 <- (A1)OP(A2)
    • 优势:通过减少一个地址码字段,可以减少指令字长度。可通过增加地址码字段位数,提高可寻址范围
    • 缺点:影响了程序的灵活性


      二地址指令
  • 一地址指令:在二地址指令格式基础上,将源操作数或目的操作数设定到一个专用寄存器(通常为AC累加器)
    • 通常完成 AC <- (AC)OP(A)
      一地址指令
  • 零地址指令:源操作数和目的操作数都内含在一个处理机堆栈中,由两个栈顶单元提供两个源操作数,结果(目的操作数)存放在栈顶
    零地址指令
  • 地址码个数选择标准
    • 程序所占存储量尽可能小
    • 程序的执行速度尽可能快

4.操作码扩展技术

可充分利用指令信息位,有效压缩操作码平均长度
基本思想:当采用定长指令字格式,且多种地址码结构混合使用,可利用地址码个数较少的指令空出来的地址码字段来增加操作码的位数

  • 定长操作码: 操作码OP长度固定指令译码结构简单浪费信息位
  • 变长操作码:操作码OP长度不固定
    首先需明确两个原则:
  • 不允许短码是长码的前缀
  • 可表示的指令的操作码一定不能重复
    通常用全1作为扩展标志码,例如下图,4位操作码时,用1111作为扩展标志码,该操作码不表示三地址指令,这样,8位操作码时,操作码高4位全为1表示是因为不允许短码是长码的前缀,若高4位用从0000~1110之间任一编码,则违反了上述第一个原则,故高位必须是上一长度操作码的扩展标志码,只能从低位开始进行当前操作码长度指令编码,故最多可表示15条二地址指令,12位时,11111111作为扩展标志码,16位操作码时,由于后面没有可扩展的地址空间了,故1111111111111111 可以表示一条零地址指令

5.寻址方式

几个与地址相关的概念
形式地址:指指令中显式给出的地址
有效地址:也称逻辑地址,通常指在本程序中的相对地址,可根据形式地址通过某种变换得到
有效地址 = 形式地址 + 寻址方式

  • 指令寻址:确定下一条将要执行的指令所在主存单元地址的方法
    • 顺序寻址:程序计数器PC+1,自动形成下一条指令地址,PC初始值设定为该程序第一条指令所在主存单元的地址
    • 跳跃寻址:转移类指令给出下一条指令的地址信息
  • 数据寻址
    如图,通常在指令地址码字段设置寻址方式子字段,又称寻址特征字段,指出具体寻址方式,另一个子字段给出形式地址,一条指令可能包含多个操作数,各操作数的寻址方式可以不同
    一地址指令
    • 基本寻址方式
      根据数据所在位置不同可分为:

      • 立即寻址:操作数直接在指令地址码字段给出,即操作数本身设在指令字中

        • 形式地址 I 不是操作数的地址,而是操作数本身,又称立即数
        • #表示立即寻址特征
        • 只能用于源操作数寻址
        • 作用 :给寄存器赋初值立即数作为常数参与运算
        • 有效地址EA 就是该指令在主存单元的地址
        • 特点:只要取出指令,便可立即获得操作数,执行阶段不必再次访问存储器,指令执行速度快
        • 缺点:I 的位数限制了所能表示的立即数范围,大量使用立即寻址程序的通用性会下降
          立即寻址
      • 寄存器寻址 : 指源操作数已经在通用寄存器中,或操作结果要返回通用寄存器,源操作数,目的操作数都适用

        • 形式地址EA = Ri,Ri为通用寄存器编号
        • 获得操作数无需访问内存指令执行时间短
        • 形式地址字段只需指明寄存器编号(位数远小于主存单元地址位数),故指令字长短节省存储空间
          寄存器寻址
      • 存储器寻址
        有效地址形成方式,可分为:

        • 直接寻址:地址码字段的形式地址A就是操作数或下一条指令的有效地址

          • 有效地址EA = A
          • 形成地址无需变换获得有效地址比较简单
          • 指令执行期间需访问一次内存
          • 缺点:指令字长限制了形式地址字段的位数,故操作数或指令的可寻址范围比较小
            直接寻址
        • 存储器间接寻址

          • 形式地址是操作数地址的地址
          • 有效地址EA = (A),括号表示地址A对应存储单元的内容
          • 至少两次或两次以上访存才可获得操作数(或指令),可多次间接
          • 指令中形式地址码长度可以很短,但寻址范围可以很大
          • 寻址范围取决于主存字长m
          • 一次间接寻址的最大寻址范围2^m字,两次间接寻址的最大寻址范围2^(m-1)字(其中一位用来作间接寻址标志位,故为m-1次方)
          • 可为程序设计提供很好灵活性
          • 访问不同主存单元数据时,可通过改变形式地址对应主存单元内容,而不必改变指令本身
          • 缺点:需多次访问主存影响指令执行速度
            存储器一次间接寻址
          • 多次间接寻址的寻址标志问题
            第一次间接寻址标志指令给出,以后每次的间接寻址标志由紧接着访问主存所取出来的地址码给出,如果取出的地址码的间接寻址标志位(通常用最高位)为1,则表示要用除去标志位后的部分作为地址码,继续访问主存,直至取出来的间接寻址标志位为0为止,此时除去间接寻址标志位的地址码即为有效地址
            多次间接寻址

            多次间接寻址
        • 寄存器间接寻址

          • 有效地址EA = (Ri)
          • 指令中地址码长度更短,寄存器间接寻址范围取决于寄存器位数(即机器字长n)
            寄存器间接寻址
        • 偏移寻址

          • 有效地址EA = (Ri) + ARi专用寄存器通用寄存器编号,形式地址A偏移量,是有符号整数
            偏移寻址

          偏移寻址可分为如下三类:

          • 相对寻址
            • 有效地址EA = (PC) + APC为程序计数器
            • 地址码字段较短
            • 相对寻址范围取决于偏移量A的位数k,即寻址范围为:(PC)-2^(k-1) ~ (PC)+2^(K-1) -1 (A是有符号数,k位补码表示范围为-2^(k-1) ~ 2^(K-1) -1)
            • 特点:只要操作数或下一条指令与当前指令的相对距离不变,无论程序存放在主存中哪段区域都可以正确执行,即有利于程序在内存中浮动可编写与位置无关的代码
          • 变址寻址
            • 引用一个变址寄存器
            • 若采用专用变址寄存器Rx,有效地址EA = (Rx) + A
            • 若采用通用寄存器Ri,有效地址EA = (Ri) + A
            • 常用于对数组处理或字符串操作,变址寄存器存放地址修改量,形式地址A给出基本地址值(起始地址,无符号整数)
            • 操作数地址变化由变址值增,减量完成
            • 寻址范围由变址寄存器位数n决定,最大寻址空间2^n字
          • 基址寻址
            • 引用一个基址寄存器Rb
            • 有效地址EA = (Rb) + A
            • 常用于实现操作系统对用户程序的动态定位
            • 基址寄存器存放的是基本地址值,一旦设定后一般用户不能改变
            • 操作数或指令地址变化由不同的偏移量A完成,寻址范围由偏移量位数决定
          • 变址寻址和基址寻址的共同目标是不必修改程序中指令,而达到修改地址码的目的
        • 段寻址:基址寻址的一种特例,用于地址长度超过机器字长的场合

          • 基本思想:将主存空间在逻辑上划分成若干段,一个程序可以占用多个段,对指令或操作数的访问,需指出所在段以及段内偏移量。与机器字长相等的段地址和段内偏移量错位相加,获得更长存储器地址,段地址存放在专用的段地址寄存器Rs中
          • 整个段寻址过程由硬件自动完成,对用户透明
          • 段内偏移量是其他寻址方式形成的有效地址EA
          • 段寻址后形成的地址就是实际的主存单元地址,即物理地址
      • 堆栈寻址:FIFO先进后出

        • 寄存器堆栈(硬堆栈)
        • 存储器堆栈(软堆栈):在主存开辟一块区域,一端固定称为栈底,另一端浮动称为栈顶
    • 复合寻址方式:将两种以上寻址方式联合起来使用即复合寻址,关键问题在于地址的计算顺序,一般从名称反映,先按在前的方式进行寻址

你可能感兴趣的:(指令系统)