功能和结构
重点内容,需熟练掌握 CPU 的结构以及各个寄存器的作用,每年都会在大题中考察。
CPU 基本结构
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 可以同时从内存中预取下一条指令,并将其存储在指令队列中。
寄存器
寄存器类型
- 通用寄存器(General-Purpose Registers):
AX
寄存器:累加器(Accumulator),用于执行算术和逻辑运算。BX
寄存器:基址寄存器(Base Register),通常用于存储内存地址。CX
寄存器:计数寄存器(Counter Register),用于循环计数和移位操作。DX
寄存器:数据寄存器(Data Register),用于输入/输出操作和大整数运算。
- 段寄存器(Segment Registers):
CS(Code Segment)
寄存器:代码段寄存器,存储指向代码段的地址。DS(Data Segment)
寄存器:数据段寄存器,存储指向数据段的地址。ES(Extra Segment)
寄存器:附加数据段寄存器,通常用于数据访问。SS(Stack Segment)
寄存器:堆栈段寄存器,存储指向堆栈段的地址。
- 指针寄存器(Pointer Registers):
SI
寄存器:源变址寄存器,通常用于数据传送操作。DI
寄存器:目的变址寄存器,也通常用于数据传送操作。SP
寄存器:堆栈指针寄存器,用于堆栈操作。BP
寄存器:堆栈基址寄存器,通常用于堆栈操作。
- 附加寄存器(Extra Registers):
IP(Instruction Pointer)
寄存器:指令指针寄存器,存储当前执行指令的偏移地址。FLAGS
寄存器:标志寄存器,存储有关条件和状态的信息,例如进位、零标志、溢出等。
哪些寄存器是程序员可见的:
通用寄存器、PC 可见
MAR、MDR、IR 不可见
标志寄存器
什么时候会被设置?
标志寄存器主要有两个功能:
- 条件标志:保存指令执行结果的状态。在执行条件分支、算数和逻辑、比较或移位指令后,条件标志都会被设置。
- 控制标志:控制指令执行的行为
条件标志(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 时,字符串操作在内存中向低地址方向移动。这通常用于从低地址向高地址扫描字符串。