x86 History
Intel 4004
1971年发布
4-bit处理器
首个利用MOS silicon gate technology (金属氧化物半导体硅栅技术)的处理器. 集成电路.
8008
1972年发布. 是Intel的首个8-bit处理器
寄存器: A, B, C, D, E, H, L, PC, AS*7 (7-level, 14-bit call stack), Flags
指令集: Intel 8080 Instruction Set. 指令可变长度(1-3字节长)
数据总线: 8bit
地址总线: 14bit,需要配合H和L寄存器间接访问14-bit内存空间
不完全支持interrupts
8080
1974年发布. Intel的第二代8-bit处理器
由8008的18-pin package升级为40-pin package
数据总线: 8bit
地址总线升级为16-bit,支持64kb内存寻址,可以直接访问(不需要通过H和L寄存器)
虽然每条8008指令均有8080对应的指令,但8080并不向前兼容8008的二进制代码
寄存器: A, B, C, D, E, H, L, SP, PC, Flags
- A, B, C, D, E, H, L均为8-bit寄存器,其中BC, DE, HL也可作为三个16-bit寄存器使用
- M寄存器是伪寄存器,值为HL所指向的内存的16-bit数据
- SP (Stack Pointer, 16-bit)取代了8008的internal stack
- PC (Program counter) 为16-bit
8085
1976年发布. Intel的最后一代8-bit处理器
与前代8080二进制文件完全兼容
数据总线: 8-bit, 地址总线: 16-bit
8086 (iAPX 86)
1978年发布. 16位处理器, 首次创立x86架构
指令集:x86-16
数据宽度: 16-bit. 地址宽度: 20-bit (1MB物理空间)
如果程序大于64kb(16位),需要调整segment registers。直到80386引入32位寄存器后,此困难得以解决
寄存器:AX, BX, CX, DX, SP, BP, SI, DI, IP, ES, CS, SS, DS, Flags.
- AX, BX, CX, DX可以使用高8位低8位(例如AH AL)访问
- SP (stack pointer), BP (base pointer), SI (source index), DI (destination index)
- IP (Instruction pointer)
- CS (code segment), DS (data segment), ES (extra segment), SS (stack segment). 这四个segment registers可帮助cpu访问1MB内存
浮点运算:8086/8088可以连接外置的Intel 8087协处理器进行硬件浮点运算. 使用80-bit浮点数
Intel 8087
1980年发布. 首个Intel设计的浮点运算协处理器(coprocessor)
可以搭配Intel 8086/8088使用
之后Intel又发布了80287 (1982年发布), 80387 (1987年发布, 支持IEEE754-1985标准), 80487等.
80186 (iAPX 186, 186)
1982年发布
支持clock generator, interrupt controller, timers, wait state generator, DMA channels等,降低集成电路的数量
80286 (iAPX 286, Intel 286)
1982年发布
数据宽度: 16-bit.
地址宽度升级为24bit(最大支持16MB物理内存寻址)
指令集: x86-16.
i386 (80386, Intel 386)
1985年发布。由AMD、IBM、Intel联合打造。
首个32位处理器
指令集: x86-16, IA-32
data width, address width都升级为32-bit
添加了memory management unit做page translation,让操作系统虚拟内存更加简单
添加三级流水线
可直接执行大多数8086/80286的指令
寄存器:EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, EIP, CS, DS, ES, FS, GS, SS, Flags
- 相比于8086除了扩展成32位以外,新增FS (F segment), GS (G segment)寄存器
- 使用segmented addressing system,最大支持64TB的虚拟内存
i486 (80486, Intel 486)
1989年发布
指令集:x86-16, IA-32 (包括x87)
指令集与i386很相似,此外新增CMPXCHG (compare-and-swap), XADD (fetch-and-add), BSWAP原子指令等指令
新增芯片内部的L1缓存。相比之下i386只有off-chip cache(相当于只有L2缓存)
芯片集成FPU(浮点运算单元)。相比于i387(i386的可选外置FPU处理器)显著更快
Pentium (奔腾, i586, P5 Pentium)
1993年发布
兼容i386指令集
首个superscalar x86处理器(能够同时执行两条指令). 有两条datapaths (pipelines), 各自有自己的ALU、address gen单元。需要编译器优化才能最好地利用instruction level parallelism.
后来的Pentium with MMX 支持MMX指令集
- MMX: 64位的SIMD指令。有8个寄存器,MM0到MM7,每个寄存器为64位,可以存64位整数、2个32位整数、4个16位整数、8个8位整数
- MM0到MM7这八个寄存器与x87的FPU寄存器重合,相当于80-bit的x87寄存器的低64位. 导致cpu无法同时处理浮点数据和SIMD数据
- 仅支持整数
Pentium II (二代奔腾)
1997年发布
支持MMX指令集
Pentium III
1999年发布
支持SSE指令集
- SSE (Streaming SIMD Extensions): 128位的SIMD指令。
- 有8个寄存器,仍然称为XMM0到XMM7。AMD提出的AMD64扩展又新增了8个寄存器XMM8到XMM15
- SSE仅支持4个32位单精度浮点数
- SSE2支持4个32位单精度浮点、2个64位双精度浮点、2个64位整数、4个32位整数、8个16位整数、16个8位整数
硬件支持读取Processor Serial Number (PSN), 可通过CPUID指令读取
支持硬件随机数生成器
Pentium 4
2000年发布
支持SSE2指令集,后续部分型号支持SSE3和64位指令集
- SSE2支持4个32位单精度浮点、2个64位双精度浮点、2个64位整数、4个32位整数、8个16位整数、16个8位整数
- SSE3支持加/减同一个XMM寄存器的数值,新增将浮点数转换为整数的指令
Pentium D
Pentium D是一个64位处理器品牌(系列),第一款处理器2005年发布,90nm制程
双核处理器
指令集: x86-64, MMX, SSE, SSE2, SSE3
x86-64 (x64, AMD64, Intel 64)
首次发布与1999年,首次出现在AMD Opteron系列处理器上
有64-bit mode和compatibility mode两种模式,兼容模式可以硬件无损运行原有的16位和32位程序
IA64
IA64不是AMD64/x86-64!
Intel发布的指令集,全称Intel Itanium architecture。Itanium架构显式要求编译器指定哪些指令可同时运行,以支持instruction-level parallelism. 注: superscalar同为instruction-level parallelism但仅仅需要处理器硬件管理哪些指令同时运行即可
首个Itanium处理器2001年发布
不向前兼容IA-32
从Windows Server 2008 R2起,windows不再支持IA-64架构;从2023年起,Linux内核不再支持IA-64架构
Intel Core 2 (Duo, Quad, Extreme)
处理器系列,包括单核、双核、四核,其中四核处理器分为两个die
支持SSSE3、SSE4.1(更多指令)
Intel Core i3/i5/i7
Intel于2008年出的处理器系列