高级功能:高速缓存、流水线、寄存器重命名、浮点处理部件、多处理器(核)管理、多媒体扩展、乱序执行、分支目标预测、虚拟化
1.流水线
一条指令的完成需要经历取指、译码、执行等多个操作,每个操作需要用到不同的部件,例如有ABC指令序列,当B正在执行时,可以对C进行译码,能加快程序的执行速度。如下图,能节省4个时钟周期。一文读懂流水线
2.高速缓存
作用:加快访存速度
内存使用DRAM,寄存器和高速缓存使用SRAM,访问速度更快
高速缓存得以运用的原理来自局部性原理
3.乱序执行
乱序的前提:后面的指令先执行对前面指令的执行结果不造成影响
乱序效果:提高效率,用空间换时间
4.寄存器重名
为流水线和乱序执行的可行性提供条件,参考文章
5.分支预测
流水线的运行并没有考虑到循环、跳转和分支,当这三者出现时,需要清空(Flush)流水线。但是由于指令的局部性原理,当某个转移出现时,下次又执行它时,大概率执行顺序与前一次相同。利用分支目标缓存器记录当前转移指令的地址、分支目标的地址和预测结果,下次进行转移时,对比BTB(Branch Target Buffer)内的条目,如果找到相同分支,就把该分支放入流水线。如果失败,就清空流水线并刷新BTB中的记录。
6.寻址方式
基址+变址x比例因子(1、2、4、8)+8位或32位偏移量
所有通用寄存器都可以充当基址寄存器和变址寄存器,除ESP不能充当变址寄存器。
16位模式下使用32位寄存器的指令,编译结果有0x66作为指令前缀,类似16位取反的意思。
32位模式下使用16位寄存器编译结果也有0x66,默认使用32位。