计组笔记 指令功能、类型与设计
   
    
    
    指令类型与功能
   
    
    
    指令分类方法
   
- 按指令格式分类:双操作指令、单操作数指令、无操作数指令(三操作数指令很少)
- 按操作数存储位置分类:RR型、RS型、SS型、RI型,R为寄存器、S为存储器、I为立即数
- 
     按指令功能分类:传输类指令、运算类指令、控制类指令等
 
 这些指令是编程所关心的
 
    
    
    传输类指令
   
    传输类指令是计算机中最基本的指令,也是编程中使用最多的指令,
    
     用于实现数据传输操作
    
   
    
     从计算机工作机制看,计算机硬件操作基本都可以归结为信息的传送
    
   
    
     注意:
    
   
    传输指令实际为”
    
     复制
    
    “指令
   
    因为数据从源地址传送到目的地后,源地址内容一般保持不变,可以被多次使用(涉及堆栈的数据除外,
    
     因为数据出栈入栈,本身地址就发生了改变
    
    )
   
我们可以根据传输位置分为三大类:
- 寄存器传送指令
- 
     访存指令
 
 用于主存与CPU之间的数据传输,比如加载LOAD 存储:STORE
 
- 
     I/O指令
 
 实现主机和各外围设备之间的信息传送
 
设计传输指令时需说明:
- 传输范围
- 传输单位
- 寻址方式
    
    
     
   
    
    
    运算类指令
   
大概分为
- 算术运算指令
- 逻辑运算指令
- 移位运算指令
- 
     串运算指令
 
   
    
    
    控制类指令
   
    
     用于控制指令的执行顺序,选择程序执行方向,并使程序具有测试、分析和判断的能力
    
   
具体看下图
     
   
    
    
    一些与指令设计有关的要求和需要考虑的因素
   
     
   
    
    
    指令设计例题!
   
    
    
    
    
     
   
    
    
    指令周期
   
    
    
    定义
   
    
     在介绍硬连线控制器前,先补充指令周期以及一些常见指令的指令周期,方便后面看题目时不懵逼
    
   
定义:指令周期是取出一条指令并执行这条指令的时间。由于各种指令的操作功能不同,因此各种指令的指令周期是不尽相同的。
    指令周期常常用若干个
    
     CPU周期数来表示
    
    ,CUP周期数又称为
    
     机器周期
    
   
    
    
    指令周期 CPU周期与时钟周期的关系
   
    **CPU周期:**由于CPU访问一次内存所花的时间较长,
    
     因此通常用内存中读取一个指令字的最短时间来规定CPU周期
    
   
换个角度来说,取指需要一个CPU周期
    
     时钟周期(T周期/节拍脉冲):它是处理操作的最基本的单位
    
   
    下图表明了这三个周期的关系
    
    
    
     
   
    
    
    MOV指令的指令周期
   
    MOV指令是一条RR型指令,需要两个CPU周期来完成,
    
     其中取指需要一个CPU周期,执行周期需要一个CPU周期
    
   
下面简单介绍,具体还是得看课本。。。
总体来看就
    
     取指PC+1 -> 译码 -> 执行
    
    接着就到下一条指令了
   
    
    
    取指周期
   
    
     1. PC装入第一条指令的地址
    
   
    
     2. PC的内容放到地址总线ABUS上,对指存进行译码,并启动读命令
    
   
    
     3. 读出MOV指令通过指令总线IBUS装入指令寄存器IR
    
   
    
     4. PC + 1
    
   
    
     5. 指令寄存器中的操作码OP被译码
    
   
    
     6. CPU识别出是MOV指令
    
   
    接着译码
    
     译码也算在取值周期中
    
   
    
    
    执行周期
   
- 选择R1为源寄存器,R0为目标寄存器
- OC送控制信号到ALU,指定ALU做传输操作
- 
     将ALU输入到数据总线DBUS上
 
 注意,任何时候DBUS上只能有一个数据
 
- 将DBUS上的数据打入到数据缓冲寄存器DR中
- 将DR中的数据打入目标寄存器R0,R0的内容改变
    
    
    LAD指令的指令周期
   
LAD指令是RS型指令,需要三个CPU周期
个人理解类似load?加载数据到某个地方
    
    
    取指周期
   
与MOV一致
    
    
    执行周期
   
    
     占用两个CPU周期
    
   
- 将指令中的直接地址码放到数据总线DBUS上
- 将地址码装入地址寄存器AR
- 将数存中AR对应的地址数读到DBUS上
- 将DBUS上的数据装入DR
- 将DR中的数装入通用寄存器R1,原本R1的数被替换
    
    
    ADD指令的指令周期
   
ADD指令是RR型指令,在运算器中用两个寄存器R1和R2的数据进行加法运算。指令周期只需要两个CPU周期
    
    
    取指周期
   
与MOV指令一致
    
    
    执行周期
   
- 选择R1做源寄存器,R2做目标寄存器
- OC送控制命令到ALU,指定ALU做R1和R2的加法操作
- 打开ALU三态门,运算结果放到DBUS上
- 将DBUS上数据打入DR,ALU产生的进位信号保存在状态字寄存器PSWR中
- 将DR装入R2,R2原本的内容被替换掉
    
    
    STO指令的指令周期
   
RS指令
先访问取出STO指令,然后按照按照R3的地址访问数存,将R2存放的数写入数存中R3的单元
    
     需要3个CPU周期,执行周期为两个
    
   
    
    
    取指周期
   
与MOV指令一致
    
    
    执行周期
   
- 选择R3做数据存储器的地址单元
- 将R3上的地址放到DBUS上
- 将地址打入AR,并进行数存地址译码
- 将R2上的数据放到DBUS上
- 将R2的数据存入数存里R3对应的单元,这个地址原本的数被冲掉
    
     先送地址,后送数据!
    
   
    
    
    JMP指令的指令周期
   
JMP指令是一条无条件转移指令,用来改变程序执行顺序。
    
     指令周期为两个CPU周期
    
   
    
    
    取指周期
   
与MOV指令一致
    
    
    执行周期
   
- 将IR中的地址码发到DBUS上
- 
     将DBUS上的地址码打入程序计数器PC中,PC中原本的内容被更换。
 
 同时,由于PC中原先的内容被更换,下一条指令就不是从原来的位置取出了
 
    
    
    用方框图表示指令周期
   
    规则如图
    
     
   
    
    
    对前面讲的几条指令进行归纳
   
     
   
 
