1. 寄存器
<aside>
📖 寄存器分类
- 用户可见寄存器(user-visible register)
- 允许编程人员通过机器语言或汇编语言访问,通过优化寄存器的使用而减少对主存的访问
- 控制和状态寄存器(control and status register)
- 由控制器来控制CPU的操作,并由拥有特权的操作系统程序来控制程序的执行
- 大多数控制和状态寄存器在大多数机器上是用户不可见的
- 某些在控制或操作系统模式下执行的机器指令是用户可见的
- 两者的区分并不严格
</aside>
1.1 用户可见寄存器
<aside>
📖 寄存器
- 通用寄存器(general-purpose register)
- 数据寄存器(data register)
- 地址寄存器(address register)
- 可以是自身有某些通用性,或是专用于某种具体的寻址方式
- 例如: 段指针、变址寄存器、栈指针......
- 条件码寄存器(condition codes register) / 标志(flag)寄存器
- CPU硬件设置这些条件位作为操作的结果
- 至少是部分用户可见的
- 同时也构成控制寄存器
</aside>
<aside>
📖 设计出发点
- 使用完全通用的寄存器还是规定各寄存器的用途
- 寄存器数量
- 太少的寄存器会导致更多的存储器访问
- 太多的寄存器又不能显著地减少存储器访问
- 寄存器长度
- 应能保存大多数数据类型的值
- 某些机器允许两个相邻的寄存器作为一个寄存器来保持两倍长度的值
</aside>
<aside>
📖 保护与恢复
- 子程序调用会导致自动保存所有用户可见的寄存器,并在返回时自动取回
- 这些保存和恢复是作为调用和返回指令执行功能的一部分,由CPU完成
- 这允许各个子程序独立地使用用户可见寄存器
- 子程序调用之外保存用户可见寄存器的相关内容是程序员的责任, 需要在程序中为此编写专门的指令
</aside>
1.2 控制和状态寄存器
<aside>
📖 寄存器
- 程序计数器(Program counter,PC)
- 存有待取指令的地址
- 通常在每次取指令之后,PC的内容即被CPU更改,转移或跳步指令也会修改PC的内容,因此总指向将被执行的下一条指令
- 指令寄存器(Instruction register,IR)
- 存储器地址寄存器(Memory address register,MAR)
- 存储器缓冲寄存器(Memory buffer register,MBR)
- 直接与数据总线相连,存有将被写入存储器的数据字或从存储器读出的字,用户可见寄存器再与MBR交换数据
- ALU可对MBR和用户可见寄存器直接存取
- 程序状态字(Program status word,PSW)
- 一个或一组包含状态信息的寄存器,包含条件码加上其他状态信息
- 包含的字段或标志
- 符号(Sign):容纳算术运算结果的符号位
- 零(Zero):当结果是0时被置位
- 进位(Carry):若操作导致最高位有向上的进位(加法)或借位(减法)时被置位,用于多字算数运算
- 等于(Equal):若逻辑比较的结果相等,则置位
- 溢出(Overflow):用于表示算术溢出
- 中断允许/禁止:用于允许或禁止中断
- 监管(Supervisor):指出CPU是执行在监管模式中还是在用户模式中
- 一个指向含有附加状态信息的存储器块的指针寄存器
- 在使用向量式中断的机器中,可能提供有一个中断向量寄存器
- 若栈用于实现某些功能,需要有一个系统栈指针
- 对于虚拟存储器系统,会有一个页表指针寄存器
</aside>
<aside>
📖 设计出发点
- 对操作系统的支持
- 某些类型的控制信息是专门为操作系统使用的
- 若CPU设计者对将要使用的操作系统有基本的了解,则寄存器的组织可能在一定程度上为该操作系统定制
- 控制信息在寄存器和存储器之间的分配
- 一种普遍的做法是将存储器最前面(最低地址)的几百或几千个字用于控制目的
- 在成本和速度之间进行权衡
</aside>
2. 微操作
<aside>
📖 微操作 Micro-operation
- 执行程序时,计算机操作是由一系列指令周期组成,每个周期执行一条机器指令
- 每个指令周期又可以看作是由几个更小的子周期组成
- 每个子周期由一系列涉及CPU寄存器操作的更小步骤组成,这些步骤称为微操作
</aside>
<aside>
📖 微操作分组的原则
- 事件的流动顺序必须是恰当的
- 例:MAR←(PC) 必须先于MBR←内存,因为内存读操作要使用MAR中的地址
- 必须避免冲突
- 例:MBR←内存 和IR←MBR 这两个微操作不应出现在同一时间 单位里
- 满足上述条件下,所用的时间单位尽可能少
</aside>
<aside>
📖 使用场景
- 取指周期
- 间址周期
- 如果指令采用间接寻址,则在指令执行前有一个间址周期
- 完成间址周期后,IR的状态与不使用间接寻址方式的状态是相同的,已经为执行周期准备就绪
- 执行周期
- 中断周期
- 在完成执行周期时,要确定是否有允许的中断产生
- 如果有,则出现一个中断周期
</aside>
<aside>
📖 指令周期代码 Instruction Cycle Code, ICC
</aside>
<aside>
📖 CPU内部总线
- ALU和寄存器都连接到CPU内部总线上
- 为了数据在该内部总线和各寄存器之间传递,内部总线和寄存器之间有门和控制信号
- 控制线控制着数据和系统总线(外部)的交换以及ALU的操作
</aside>
3. 控制器
<aside>
📖 控制CPU的功能需求
- CPU的基本元素
- ALU,寄存器组,内部数据通路,控制器,外部数据通路
- CPU需要完成的微操作
- 在寄存器之间传送数据
- 将数据由寄存器传送到外部接口(如系统总线)
- 将数据由外部接口传送到寄存器
- 将寄存器作为输入和输出,完成算术和逻辑运算
- 控制器的两个基本任务
- 定序(sequencing):根据正被执行的程序,控制器使CPU以正确的顺序通过一系列微操作
- 执行(execution):控制器使每个微操作得以完成
</aside>
3.1 控制器的输入/输出