处理器架构
字数: 0
指处理器的整体的物理设计,通常是基于特定的指令集架构,包括处理器内部的组成部分、控制逻辑、寄存器组织等。
指令集就像语言(汉语、英语)一样,定义一套语言并不难,难的是你要让别人去接受你定义的语言。如果重新使用一套指令集,与之配套的编译器、操作系统、各种应用软件也都要重新编写,这样的工作量和难度,是无法想象的。

8086 处理器

x86 架构的第一款处理器,也是后来广泛应用于个人计算机的基础。
其他一些常见的 x86 架构处理器:
  • 英特尔酷睿(Intel Xeon)
  • 英特尔奔腾(Intel Pentium)
其核心组件包括总线接口单元 (Bus Interface Unit, BIU) 和 执行单元 (Execution Unit, EU)。
notion image

算数逻辑单元

Arithmetic Logic Unit, ALU(属于 EU),本身不直接涉及指令,而是根据指令的操作码和操作数执行相应的算术和逻辑运算。
 
notion image
notion image
选择器真值表
选择器真值表
 
notion image
以简单的计算器 (Calculator) 为例:一个简单的 4 位 CPU 由一个由下面的多路复用器组成的 ALU 组成。
notion image
notion image
根据复用器内部结构, S0 和 S1 对应不同的运算方式,S2 代表寻址模式,0 代表直接(操作数由紧随操作码之后的地址指出),1 代表立即(操作数紧随操作码之后)。
notion image
  • Falling edge on clock causes next instruction to be taken from memory and presented to the ALU.
notion image
  • Rising edge on clock causes output of ALU to be stored by the latch (Accumulator).
将计算器拓展即可成为一个简单的微处理器
notion image

寄存器

用于暂存指令和数据,总共为 14 个,分为 6 类:

通用寄存器

  • ax (accumulator):累加寄存器,用于运算
  • bx (base):基址寄存器,用于地址索引
  • cx (count):计数寄存器,用于保存计算值
  • dx (data):数据寄存器,用于数据传递
 
16位
8高位
8低位
AX
AH
AL
BX
BH
BL
CX
CH
CL
DX
DH
DL

指令指针寄存器

IP (Instruction Pointer):存储当前正在执行的指令的地址,可以看作一个程序计数器
  • 当 CPU 执行完一条指令后,它会自动递增 IP,以便指向下一条指令的地址。

段寄存器

Segement Register
  • CS(Code):代码段寄存器
  • DS(Data):数据段寄存器
  • SS(Stack):堆栈段寄存器
  • ES(Extra):附加段寄存器

💡
CPU 将 CS:IP 指向的内容当作指令执行
设 CS 中的内容为 ,IP 为 ,CPU 从内存(二进制) 单元开始,执行指令。
  • 相当于二进制左移 4 位(末尾补四个0) 十六进制左移一位(末尾补一个0)
  • 读入的指令 B8 23 01 长度为 3 个字节, IP 值加 3。CS: IP 重新指向内存单元 2000:0003
    • CS: IP = 2000 : 0003 ➡️ 20000+0000 = 20003
notion image

例 1
 
原先内存情况
原先内存情况
 
 
内存后来情况
内存后来情况
 
  • mov 指令中的[]说明操作对象是一个内存单元,且这个内存单元的偏移地址是 0
  • 它的段地址默认放在 DS 中, 指令执行时,CPU 会自动从 DS 中取出
例 2
notion image
 
Suppose the CS contains 12EFh. What is the starting address in main memory of the instruction cmp dl, 'Q' ?
 
CS: IP = 12EFh: 002Eh  ➡️ 12EF0  + 002E = 12F1E

指针寄存器

  • bp:基址 (base) 指针寄存器,存储栈底地址
  • sp:堆栈 (stack) 指针寄存器,存储栈顶地址

可以将一段内存当作栈来使用,CPU 将 SS:SP 指向的内容得到栈顶的地址
  • push ax 指令执行时,将寄存器中的内容放入当前栈顶单元的上方,成为新的栈顶元素
    • 栈的存储区域为:从高地址向低地址存放,高地址在栈底,低地址趋向栈顶。
    • 可以视为一个倒放的杯子,从下往上堆东西
  • pop ax 指令执行时,从栈顶单元中取出数据,送入寄存器中
notion image
  • 栈空,SS:SP 指向栈空间最高地址单元的下一个单元。
  • 执行 push 后,SS:SP 指向栈中的第一个元素。
 

变址寄存器

si 和 di 是 8086CPU 中和 bx 功能相近的寄存器,但 si 和 di 不能够分成两个 8 位寄存器使用。
  • si (source index):源变址寄存器,存储内存操作中的源地址
  • di (destination index):目的变址寄存器,存储内存操作中的目的地址

标志寄存器

Flag Register: keeps track of the result of certain calculations
notion image
notion image
  • 其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。
  • flag 寄存器是按位起作用的,即它的每一位都有专门的含义,记录特定的信息,其中存储的信息通常被称为程序状态字 (PSW)。
  • U: Undefined
  • OF: Overflow flag
  • DF: String direction flag
  • IF: Interrupt enable flag
  • TF: Single step trap flag
  • SF: Sign flag MSB of result
  • ZF: Zero flag, set if result=0
  • AF: BCD Carry flag
  • PF: Parity flag
  • CF: Carry flag
 
mov ax,2 sub ax,1
 
执行后,结果不为0,则 zf=0
 
After every instruction is executed the CPU modifies a special flag register to record the effect of the instruction.
 

8087 处理器

最早的 x87 架构协处理器,与 Intel 8086 和 8088 处理器配套使用。
notion image

状态字寄存器

Status Word
用于指示浮点运算的状态和结果,各种标志位用于表示运算是否溢出、出现错误等情况
notion image

控制字寄存器

Control Word
用于控制浮点运算的行为,设置舍入模式、精度等
notion image

浮点寄存器栈

Register Stack
共有 ST(0) - ST(7) 八个寄存器,每个浮点寄存器可以存储一个浮点数值
通常以扩展精度(80位)的格式表示
  • ST(0) 是栈顶,而 ST(7) 是栈底元素。每当执行浮点数操作时,数据都会被推送到 ST(0) 上,并可以对 ST(0) 进行各种运算。其他的浮点数寄存器 (ST(1) - ST(7)) 则可以用于存储其他的操作数或中间结果。
 
2023 - 2026