第四章:指令系统

一、指令格式

1. 按操作数个数分类

  • 零地址指令
    • 不需要操作数的指令
      • 空操作指令、停机指令、关中断指令
    • 需要操作数的指令
      • 两个操作数从栈顶和次栈顶弹出运算结构再压入堆栈
  • 一地址指令
    • 单操作数指令
      • 加1、减1、求反、求补
    • 双操作数指令
      • 另一个操作数由ACC提供,运算结果放入ACC((ACC)OP(A1))
  • 二地址指令
    • (A1)OP(A2)–>A1
    • image
    • 常用的算术逻辑运算指令
  • 三地址指令
    • 第三个地址用于存放运算结果
  • 四地址指令
    • 第四个地址用于存放下一条指令的地址

2. 定长操作码

  • 指令格式固定

3. 扩展操作码

  • 使用频率高的指令分配短操作码,使用频率低的指令分配长操作码
  • 指令字长一般是存储字长的整数倍(2017)

4. 常见的汇编指令

二、指令寻址和数据寻址

1. 指令寻址

  • 顺序寻址
    • PC=PC+1
  • 跳跃寻址
    • 跳跃只是改变PC的值,下条指令地址还是PC给出
    • 由本条指令给出下条指令的地址

2. 数据寻址

  • 基本概念
    • A:形式地址
      • EA:有效地址
        • (A):地址内存储的内容
  • image
  • 偏移寻址(2011)
    • 基址寻址
      • 为逻辑地址到物理地址的变换提供了支持,用以实现程序的动态重定位
      • 基址寄存器的内容不变,形式地址不断改变(2019)
    • 相对寻址
      • 特别有利于程序浮动
      • PC存储的是下一条指令的地址,形式地址一般用整数补码表示(2009)
    • 变址寻址
      • 设定形式地址A为数组首地址,不断改变变址寄存器的内容
      • 对线性表之类的数组元素进行方便的访问(2017、2018)

3. 考题

  • 相对寻址相对的是PC+1;且要注意当前指令的长度
  • 基址寻址的形式地址按无符号数存储,但计算时却按补码运算(2019)
  • 大题给出了定长指令字的格式,就不能使用扩展指令字计算最值问题(2010、2015)
  • 硬件:符号扩展器、移位寄存器、加法器、多路选择器(2013)
  • 大题代码区:行号—-虚拟地址—-二进制机器指令—-汇编代码
  • 指令格式:操作码+源操作数+目的操作数(目的操作数存放运算结果)(2010)

三、程序的机器级代码表示

1. 无符号和带符号整数的大小比较(2011)

  • 电路图
    • image
  • 标志位
    • ZF:最终结果是否为0
    • OF:符号位进位情况异或最高数位进位情况
    • SF:符号位为多少
    • CF:Sub异或Cout(A+B大于表示范围或A-B的时A<B)
  • 根据标志位分析结果
    • image

2. 常用汇编指令介绍

四、CISC/RISC的基本概念

(2009)

image

五、习题

为了缩短指令中某个地址段的位数,有效的方法是采取寄存器寻址

简化地址结构的基本方法是采用隐地址

在多道程序设计中,最重要的寻址方式是相对寻址