功能和结构

重点内容,需熟练掌握 CPU 的结构以及各个寄存器的作用,每年都会在大题中考察。

CPU 基本结构

AX
BX
CX
DX
SP
BP
SI
DI
Internal Bus
Temporary Registers
ALU
Flags
CS
DS
SS
ES
IP
Instruction Queue
Segment
Registers
EU (Execution Unit)
BIU (Bus Interface Unit)
MAR
MDR
CU
IR
External
Bus

CPU 的内部结构由 BIU 和 EU 两部分构成,简单而言,BIU 负责读指令,EU 负责执行指令。两个组成部分的具体功能如下:

  • BIU(Bus Interface Unit,总线接口单元):
    • 主要功能
      • 从内存中取指令,并将其存储在指令队列中。
      • 计算存储器地址,并控制总线进行数据传输。
    • 组成:
      • 指令队列:用于存储从内存中预取的指令。
      • 特殊寄存器
        • 指令指针寄存器(IP):存储下一条要执行的指令地址。
        • 指令寄存器(IR),存储当前正在执行的指令
        • 内存地址寄存器(MAR),存储内存需要读取的地址
        • 内存数据寄存器(MDR),存储内存读取的数据单元
        • 段寄存器(Segment Registers)
  • EU(Execution Unit,执行单元):
    • 主要功能:
      • 从指令队列取出指令,进行译码。
      • 执行指令,包含算术运算、数据传输等。
    • 组成:
      • 算术逻辑单元(ALU),用于执行算术和逻辑运算,例如加法、减法、逻辑与、逻辑或等。
      • 通用寄存器: 包括 AX、BX、CX、DX、SI、DI、BP 和 SP 等寄存器,用于存储数据和地址。
      • 控制单元(CU, Control Unit),负责取指令和解码指令、生成控制信号、协调 CPU 中指令的执行过程。

提示

寄存器的英文全称:

  • IP: Instruction Pointer
  • IR: Instruction Register
  • MAR: Memory Address Register
  • MDR: Memory Data Register

BIU 和 EU 并行工作,以此提高 CPU 的效率。例如,当 EU 执行一条指令时,BIU 可以同时从内存中预取下一条指令,并将其存储在指令队列中。

寄存器

寄存器类型

  1. 通用寄存器(General-Purpose Registers):
    • AX 寄存器:累加器(Accumulator),用于执行算术和逻辑运算。
    • BX 寄存器:基址寄存器(Base Register),通常用于存储内存地址。
    • CX 寄存器:计数寄存器(Counter Register),用于循环计数和移位操作。
    • DX 寄存器:数据寄存器(Data Register),用于输入/输出操作和大整数运算。
  2. 段寄存器(Segment Registers):
    • CS(Code Segment) 寄存器:代码段寄存器,存储指向代码段的地址。
    • DS(Data Segment) 寄存器:数据段寄存器,存储指向数据段的地址。
    • ES(Extra Segment) 寄存器:附加数据段寄存器,通常用于数据访问。
    • SS(Stack Segment) 寄存器:堆栈段寄存器,存储指向堆栈段的地址。
  3. 指针寄存器(Pointer Registers):
    • SI 寄存器:源变址寄存器,通常用于数据传送操作。
    • DI 寄存器:目的变址寄存器,也通常用于数据传送操作。
    • SP 寄存器:堆栈指针寄存器,用于堆栈操作。
    • BP 寄存器:堆栈基址寄存器,通常用于堆栈操作。
  4. 附加寄存器(Extra Registers):
    • IP(Instruction Pointer) 寄存器:指令指针寄存器,存储当前执行指令的偏移地址。
    • FLAGS 寄存器:标志寄存器,存储有关条件和状态的信息,例如进位、零标志、溢出等。
Process-specific data
structures
(e.g. page tables, tasks and kernel stack)
Physical Memory
Kernel code and data
User stack
Memory-mapped region
for shared libraries
Run-time heap
Uninitialized data (.bss)
Initialized data (.data)
Code (.text)
Different for
each process
Identical for
each process
Kernel
virtual
memory
Process
virtual
memory
low
address
space
high
address
space

标志寄存器

OF
DF
IF
TF
SF
ZF
AF
PF
CF
16-bits Flag Register

什么时候会被设置?

标志寄存器主要有两个功能:

  • 条件标志:保存指令执行结果的状态。在执行条件分支、算数和逻辑、比较或移位指令后,条件标志都会被设置。
  • 控制标志:控制指令执行的行为

条件标志(conditional flags)

  • OF (Overflow flag):溢出标志。
    • 当有符号整数运算的结果太大而无法适应目标寄存器时,OF 标志会设置为 1,表示发生了溢出。
  • SF (Sign flag):符号标志。
    • 根据操作结果的符号位来设置,如果结果为负数,则 SF 被设置为 1,否则为 0。
  • ZF (Zero flag):零标志。
    • 当操作结果为零时,ZF 标志被设置为 1,否则为 0。
  • AF (Auxiliary carry flag):辅助进位标志。
    • 通常用于 BCD(二进制编码十进制)算术运算,指示低四位的进位。
  • PF (Parityh flag):奇偶校验标志。
    • 根据结果中二进制位 1 的个数是奇数还是偶数,设置 PF 标志。奇数个 1 则 PF 为 1,偶数个 1 则 PF 为 0。
  • CF (Carry flag):进位标志。
    • 当无符号整数运算的结果超出了目标寄存器的位数,CF 标志被设置为 1,表示发生了进位。

控制标志(control flags)

  • TF(Trap flag)
    • 控制单步执行。
    • 当 TF 被设置为 1 时,CPU 将进入单步执行模式。在单步执行模式下,每执行一条指令后,CPU 将引发一个单步中断,允许程序员逐条调试程序。
  • IF(Interrupt flag)
    • 控制中断处理
    • 当 IF 被设置为 1 时,CPU 允许中断请求。如果 IF 为 0,CPU 将禁止所有中断请求,无论是外部硬件中断还是软件中断。
  • DF(Direction flag)
    • 字符串操作的标志位。
    • 当 DF 被设置为 1 时,字符串操作(如 MOVS、LODS、STOS)在内存中向高地址方向移动。这通常用于从高地址向低地址扫描字符串。当 DF 被清除为 0 时,字符串操作在内存中向低地址方向移动。这通常用于从低地址向高地址扫描字符串。