Skip to content

第三章 CPU子系统#

目录#


1. 概述#

1.1. CPU 的结构#

1.1.1. 运算器#

ALU(Arithmetic Logic Unit) 算术逻辑运算部件是运算部件的核心。

1.1.2. 寄存器组#

  1. 通用寄存器组,有编号,可编程访问。
  2. 暂存器,无编号,不可编程访问,在 CPU 工作时内部专用。
  3. 指令寄存器(IR,Instruction Register),用来存放当前正在执行的指令,它的输出包括操作码信息,地址信息等,是产生微命令的主要逻辑依据。
  4. 程序计数器(PC,Program Counter),也称为指令计数器或指令指针,用来指示指令在存储器中的存放位置。当程序顺序执行时,每次从主存取出一条指令,PC内容就增量计数,指向下一条指令的地址。
  5. 程序状态字寄存器(PSW,Program Status Words),用来记录现行程序的运行状态和指示程序的工作方式。PC、IR、PSW 等寄存器属于控制部件,用来存放控制信息。
  6. 地址寄存器(MAR,Memory Address Register),存放要被 CPU 访问的存储单元的地址。
  7. 数据缓冲寄存器(MDR,Memory Data Register),用来存放 CPU 与主存之间交换的数据。

MAR 和 MDR 是连接 CPU 与主存的桥梁,设置这两个寄存器使 CPU 与主存之间的传输通路变得比较单一,容易控制。这两个寄存器不能直接编程访问,对用户是透明的。

1.1.3. 控制器#

控制部件的功能只要是负责对指令进行译码,并且发出为完成每条指令所要执行的各操作的控制信号。

1.1.4. 时序系统#

产生时间信号。

1.1.5. CPU内部的数据通路#

  1. 单组内总线,分立寄存器结构
  2. 单组内总线,集成寄存器结构
  3. 多组内总线结构

1.2. CPU的工作原理#

1.2.1. 主要功能#

  1. 处理指令
  2. 执行操作
  3. 控制时间
  4. 处理数据

1.2.2. 工作阶段#

  1. 取指令
  2. 指令译码
  3. 指令执行
  4. 后续阶段

1.3. CPU的指令集类型#

1.3.1. CISC#

CISC (Complex Instruction Set Computer),复杂指令集计算机。

指令系统庞大,指令功能复杂,指令格式多变,寻址方式也很多。难以用优化编译计数生成高效的目标代码。

1.3.2. RISC#

RISC (Reduced Instruction Set Computer),精简指令集计算机。

指令更加精简,指令格式更统一,指令种类也更少甚至寻址方式更简单,而且采用了超标量和超流水线结构,大大增加了CPU的并行处理能力,处理速度提高了很多。

1.4. 模型机的组成#

2. 指令系统#

2.1. 指令格式#

2.1.1. 指令中的基本信息#

  1. 操作码
  2. 操作数或操作数的地址
  3. 存放运算结果的地址
  4. 后继指令地址,多以隐含方式给出

大部分指令的基本格式为操作码 加上地址码

2.1.2. 指令中的地址结构#

2.1.2.1. 三地址指令

指令格式

指令功能

2.1.2.2. 二地址指令

指令格式

指令功能

2.1.2.3. 一地址指令

指令格式

指令功能

2.1.2.4. 零地址指令

指令格式

有几种情况可能使用零地址。

  1. 不需要操作数的指令,如空操作指令(如Sleep)和停机指令

  2. 隐含操作数在累加器

指令功能

  1. 对堆栈栈顶单元中的数据进行操作。由被称为堆栈指针的寄存器 给出栈顶单元地址。

2.1.3. 操作码结构#

2.1.3.1. 固定长度操作码

操作码位数一定且位置固定,因此读取与识别指令都比较方便。

2.1.3.2. 可变长度操作码(扩展操作码)

当指令中的地址部分位数较多时,让操作码的位数少些;当指令的地址部分位数减少时,可让操作码的位数增多,以增加指令种类,这被称为扩展操作码。

约定某种组合为扩展码,如对于一个 位指令,当指令为三地址指令时,三个地址共占 位,操作码 位。当操作码为 时,可分别表示 条三地址指令,留下 作为扩展码标志,可扩展为二地址、一地址或零地址指令。

2.1.3.3. 单功能型或复合型操作码

单功能型:一个具体的操作码只表示一种操作含义

复合型:一个具体的操作码在参数不同的情况下可以表示不同的含义,如当地址 时表示对 进行操作的一地址指令,地址 不为 时表示二地址指令。

2.1.4. 指令字长#

固定字长:在早期计算机中被使用,后逐渐转化为可变字长指令。又因为指令精简在 中被重新使用。

可变字长:将操作码放在指令的第 字节,以此判定是双操作数指令、单操作数指令或是其它,从而决定读取后面的几字节指令代码。

2.2. 寻址方式#

2.2.1. 概述#

所谓寻址,就是指产生操作数的有效地址,因此将产生操作数有效地址的方式称为寻址方式。

指令可能存放的地方有以下几种可能:

  1. 操作数就包含在该指令之中,或紧跟着该指令。此时需要由指令直接给出操作数。
  2. 操作数在CPU的某个寄存器之中。此时指令中应给出寄存器号。
  3. 操作数在主存储器中,指令应以某种方式给出主存单元地址码。
  4. 操作数在堆栈区中。可以隐含约定由堆栈指针 提供地址。
  5. 操作数在某个 接口的寄存器之中。

寻址方式可归纳为:

  1. 立即寻址。在读取指令时就从指令之中获得了操作数。
  2. 直接寻址类。直接给出主存地址或寄存器号,以读取操作数。
  3. 间接寻址类。先从某寄存器中或主存中读取地址,再按这个地址访问主存以读取操作数。再使用同一条指令的前提下,使操作数地址可以变化,从而增加编程的灵活性,使一条指令甚至是一段指令可以被重复利用。
  4. 变址类。指令给出的是形式地址,经过某种计算(如相加、相减、高低位地址拼接等)才能获得有效地址。使程序能更有效地适应各种需要,如对数组、表格、链表等数据结构的访问,以及程序转移、存储管理、程序重定位等。

2.2.2. 常见的寻址方式#

2.2.2.1. 立即寻址
2.2.2.2. 直接寻址
2.2.2.3. 寄存器直接寻址
2.2.2.4. 主存间接寻址
2.2.2.5. 寄存器间接寻址

自增型寄存器间址

自减型寄存器间址

2.2.2.6. 变址寻址
2.2.2.7. 基址寻址
2.2.2.8. 基址加变址寻址
2.2.2.9. 相对寻址
2.2.2.10. 页面寻址
2.2.2.11. 堆栈寻址

2.3. 指令的功能和类型#

2.3.1. 传输类指令#

  1. 传输指令
  2. 访存指令
  3. I/O指令

eg. MOV

2.3.2. 访存指令#

  1. 加载指令(读存储器)
  2. 存储指令(写入存储器)
  3. 弹出(POP)
  4. 压栈(PUSH)

2.3.3. 输入/输出(I/O)指令#

设置专门的 指令如 IN

采用通用的数据传输指令如 MOV

2.3.4. 算术逻辑运算指令#

2.3.4.1. 算术运算指令
  1. 定点加 (ADD)
  2. 减 (SUB)
  3. 加1 (INC)
  4. 减1 (DEC)
  5. 求补 (NEG)
2.3.4.2. 逻辑运算指令
  1. 与 (AND)
  2. 或 (OR)
  3. 非 (COM)
  4. 异或 (EOR)
2.3.4.3. 移位指令
  1. 算术移位指令
  2. 逻辑移位指令
2.3.4.4. 串操作指令

为了实现对数组元素的操作,许多计算机设置了串操作指令,加上重复前缀 REP,就能对数组进行操作。如串传送指令 (REP MOVS) 可将整个数组从源存储区传送到目的存储区。

2.3.4.5. 专用的数据处理指令
  1. 转换指令
  2. 检索指令
  3. 编辑指令

2.3.5. 程序控制类指令#

2.3.5.1. 转移指令
  1. 无条件转移指令
  2. 条件转移指令
  3. 循环指令
2.3.5.2. 转子程序指令与返回指令
  1. 转子程序指令。指令中给出操作码以及转移地址,后者是子程序的入口地址。
  2. 返回指令。只有操作码,返回地址隐含获得。如将堆栈指针SP的内容作为返回地址。
2.3.5.3. 软中断(程序自中断)指令

可用于程序调试中,如利用软中断指令为程序设置断点。如 INT ,除操作码 INT 外,指令还给出一个中断号 ,根据它可以找到中断处理程序入口地址。

2.3.5.4. 控制处理机某些功能的指令
  1. 对CPU状态字某些标志位的清除、设置、修改
  2. 空操作指令 NOP
  3. 实现 CPU与外部事件的同步功能,如暂停 HLT、等待 WAIT、总线锁定LOCK等指令
2.3.5.5. 面向操作系统的一些指令
  1. 访问系统寄存器的指令,如访问系统控制寄存器、全局描述符表寄存器、任务寄存器等
  2. 检查保护属性的指令,如检查某个数据段可否被读出、可否被写入,调整段的特权级等
  3. 用于存储管理的指令

2.4. 模型机的指令系统#

Back to top