kir*_*gan 3 cpu x86 assembly x86-64 cpu-registers
最近我开始学习x86汇编语言和CPU架构.我注意到int寄存器的总数是8,但对于x86-64,它是16.
为什么?必须有一些解释.
x86架构从20世纪70年代早期的最早版本发展为8008.当时,内存字节和操作码空间非常宝贵; 只有3位被留出(当时)A,B,C,D,E,F,(和IIRC)H和L寄存器,全部为8位.(我记得那些机器编程的难度有多大,而且速度有多慢!在内存读写之前,你必须用内存地址加载H和L!)
从那时起,英特尔已经发展了指令集,通过80年代后期的8080,8086,80186,80286,80386,80486体系结构,将寄存器扩展到16位和32位,但保持相同的3位选择寄存器.
直到AMD设计了80486架构的64位版本,才增加了第4个寄存器位(因为现在存储器,因此操作码字节便宜)是一个指令前缀字节.该前缀字节实质上将"8"加到由相同的3个传统寄存器位选择的寄存器号中; 这意味着"寄存器号"遍布指令,这使得解码器变得丑陋,但晶体管现在也很便宜.
16个寄存器的借口是"寄存压力".理想的CPU将在其寄存器中执行所有必要的算术运算,总是具有足够的,因此它不必有时将寄存器溢出(存储并重新加载)寄存器到存储器以为另一个计算腾出空间.测量(和经验)表明,8个寄存器并不足以避免这种溢出,并且由于溢出触摸内存,它们会大大减慢处理器的速度.我认为32(被仔细测量)被认为是足够多的寄存器,但这需要2位,而16非常接近理想非常实用.并且,AMD有一段时间能够使用他们的64位产品和16个寄存器而不仅仅是8个,作为有效的高科技营销功能.
英特尔发现他们正在失去对AMD的64位处理器战争,试图生产他们自己的x86的64位扩展,但微软表示他们支持AMD指令集,并且不支持2个不同的x86 64位指令集.英特尔折叠,现在基本上与AMD提供的基本64位指令集相同.
您会发现这些CPU的极端现代版本具有16和32(我认为)寄存器的向量寄存器集; 操作码位现在便宜很多,并且指令获取速率令人难以置信.
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |