下面都是扯淡,当玩笑看看就是了。

X86架构通用寄存器只有16个,其余为不可直接操作寄存器。在叙述寄存器单元之前,我们先将CPU内部分为三大块:

控制单元

程序计数器 PC(Program Counter)、指令寄存器 IR(Instruction Register)、指令译码器 ID(Instruction Decoder)和操作控制器 OC(Operation Controller)。

运算逻辑单元

算术运算与逻辑运算,进行加减乘除基础运算与位移运算。

储存单元

包含寄存器,片内缓存L1~L4,其中L1分为数据缓存与指令缓存,L4主要在Iris上以eDRAM的形式存在。

状态寄存器0

字长 通用寄存器 指针寄存器 索引寄存器 区段寄存器 标志寄存器
16 Bits AX BX CX DX BP SP IP SI DI CS DS SS ES FLAGS
32 Bits EAX EBX ECX EDX EBP ESP EIP ESI EDI CS DS SS ES FS GS EFLAGS
64 Bits RAX RBX RCX RDX R8~R15 RBP RSP RIP RSI RDI CS DS SS ES FS GS RFLAGS
  • AX BX CX DX 可分为高八位与低八位,例AH(High),BL(Low),寄存器之间的长度必须相同才可进行运算。
  • BP —— Base Pointer(基址指针),SP —— Stack Pointer (堆栈指针),标记Stack基准和移动的指针,BP指示函数开始地址,SP指向最新的元素地址。
  • 指针寄存器IP记录下一条指令的偏移地址。
  • 指针寄存器SI DI指向数组内部。
  • 区段寄存器CS DS SS ES 产生储存器的绝对地址。
  • 标记寄存器FLAGS标志零位,奇偶,符号,进位等。
  • EAX EBX ECX EDX 低16位与AX BX CX DX相兼容。
  • R8~R15为X64新增通用寄存器。

指令集专用寄存器

(我的CPU为i7-6700HQ : X86,X86-64,MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,VT-x, AVX, AVX2, FMA3, AES,TSX)

  • MM —— MMX(Matrix Math eXtensions,矩阵数学扩展)指令集使用,SIMD(单指令多数据(Single Instruction Multiple Data))多媒体指令集,意在提高多媒体处理能力。

  • XMM —— SSE(Streaming SIMD Extensions,单一指令多数据流扩展)指令集使用,MMX继任,主要用于提高数学运算性能。

  • YMM ZMM —— AVX (Advanced Vector Extensions,高级向量扩展指令集)指令集使用,作为AVX继任,将XMM寄存器扩展到YMM乃至512 Bits的ZMM。

  • VT-x指令集主要用于硬件虚拟化操作,AES指令集主要用于提高系统加解密速度,FMA为AVX指令集子集,用来提高特定运算场景运算速度。

系统专用寄存器:

  • CR —— Control Register(控制寄存器)

  • DR —— Debug Register(调试寄存器)

  • TR —— Test Register(测试寄存器)

改动此类寄存器需要Ring 0级别的权限,所以我称之为操作系统专用寄存器。

二十一世纪二十年代第一天,莫有啥好说的。