第16讲-控制器
处理器的结构
寄存器
-
寄存器分类
- 用户可见寄存器(user visible register)
- 允许编程人员通过机器语言或汇编语言访问,通过优化寄存器的使用而减少对主存的访问
- 控制和状态寄存器(control and status register)
- 由控制器来控制CPU 的操作,并由拥有特权的操作系统程序来控制程序的执行
- 大多数控制和状态寄存器在大多数机器上是用户不可见的
- 某些在控制或操作系统模式下执行的机器指令是用户可见的(如程序计数器,在x86上是用户可见的)
- 两者的区分并不严格
- 用户可见寄存器(user visible register)
-
用户可见寄存器
- 通用寄存器(general purpose register,简称GPR)
- 可被程序员指派各种用途
- 数据寄存器(data register)
- 仅可用于保持数据而不能用于操作数地址的计算
- 地址寄存器(address register)
- 可以是自身有某些通用性,或是专用于某种具体的寻址方式
- 例如:段指针、变址寄存器、栈指针
- 条件码寄存器(condition codes register)/ 标志(flag)寄存器
- CPU硬件设置这些条件位作为操作的结果
- 至少是部分用户可见的,但程序员不可修改
设计出发点 - 使用完全通用的寄存器还是规定各寄存器的用途
- 影响指令集的设计
- 寄存器数量
- 太少的寄存器会导致更多的存储器访问
- 太多的寄存器又不能进一步减少存储器访问
- 寄存器长度
- 应能保存大多数数据类型的值
- 某些机器允许两个相邻的寄存器作为一个寄存器来保持两倍长度的值
保存和恢复
- 子程序调用会导致自动保存所有用户可见的寄存器,并在返回时自动取回
- 这些保存和恢复是作为调用和返回指令执行功能的一部分,由CPU 完成
- 这允许各个子程序独立地使用用户可见寄存器
- 子程序调用之外保存用户可见寄存器的相关内容是程序员的责任,需要在程序中为此编写专门的指令
- 通用寄存器(general purpose register,简称GPR)
-
控制和状态寄存器
- 程序计数器(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 是执行在监管模式中还是在用户模式中
- 一个指向含有附加状态信息的存储器块的指针寄存器
- 在使用向量式中断的机器中,可能提供有一个中断向量寄存器
- 若栈用于实现某些功能,需要有一个系统栈指针
- 对于虚拟存储器系统,会有一个页表指针寄存器
- 设计出发点
- 对操作系统的支持
- 某些类型的控制信息是专门为操作系统使用的
- 若CPU 设计者对将要使用的操作系统有基本的了解,则寄存器的组织可能在一定程度上为该操作系统定制
- 控制信息在寄存器和存储器之间的分配
- 一种普遍的做法是将存储器最前面(最低地址)的几百或几千个字用于控制目的
- 在成本和速度之间进行权衡
- 对操作系统的支持
- 程序计数器(Program counter,PC)
-
X86体系结构:8086 的寄存器
- 数据寄存器
- 均为16 位寄存器
- 均可分为2 个8 位寄存器使用
- AX:存放乘除等指令的操作数
- BX:存放存储单元的偏移地址
- CX:存放计数值
- DX:乘法运算产生的部分积、除法运算的部分被除数
- 地址寄存器
- 均为16 位寄存器
- SP和BP:用于堆栈操作
- SI和DI:用于串操作
- 均可以作为数据寄存器使用
- 段寄存器
- 与其他寄存器联合生成物理地址
- CS:代码段寄存器
- DS:数据段寄存器
- SS:堆栈段寄存器
- ES:附加段寄存器
-
标志寄存器
-
指令寄存器
- 保存一个内存地址,指向当前需要取出的指令
- 当CPU 从内存中取出一个指令后,IP 会自增,指向下一个地址
- 程序员不能直接对IP 进行存取操作
- 转移指令、过程调用指令等会改变IP 中的内容
- IP寄存器有16 位,但8086 的寻址范围是220
- 数据寄存器
-
X86体系结构:IA-32 的寄存器
- X86体系结构:X86-64 的寄存器
微操作(micro operation)
执行程序时,计算机操作是由一系列指令周期组成,每个周期执行一条机器指令。
每个指令周期又可以看作是由几个更小的子周期组成,包括:取指、间址、执行、中断。
每个子周期由一系列涉及CPU 寄存器操作的更小步骤组成,这些步骤称为微操作。

本文详细介绍了计算机处理器中的控制器、不同类型的寄存器(如通用寄存器、段寄存器、标志寄存器等)、以及微操作和微程序控制器在指令执行过程中的关键角色,以X86体系结构为例,探讨了它们如何影响程序性能和设计灵活性。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



