汇编学习笔记(23) - 拾遗

CPU高速缓存

从80486在CPU内部新增了高速缓存,他是内存的缓存

CR0 中页新增了两位用于控制高速缓存的工作方式 CD 和 NW,他们控制逻辑如下

 

同时新增两个指令

INVD

  清空高速缓存

WBINVD

  先回写缓存然后清空缓存

 

  具体没去深究怎么回是,其中使无效的意思就是能不能用 上面两条指令。

其他新增指令

BSWAP  OPRD    

  对OPRD进行大小端切换,OPRD可以使8位,16位,32位

 

XADD  OPRD1, OPRD2 

  先交换OPRD1和OPRD2的值,再相加的结果存到OPRD1, 相当于 OPRD1 = OPRD1+OPRD2; OPRD2 = OPRD1

 

CMPXCHG  OPRD1, OPRD2 ;   

if(OPRD1 == AX/AL/EAX){
  OPRD1 =OPRD2;
  ZF = 1
}
else{
  AX/AL/EAX = OPRD1;
  ZF = 0;
}

 

 

CMPXCHG8B 

  CMPXCHG 的8字节比较版本

 

INVLPG OPRD

  清理虚拟地址OPRD转换到物理地址的转译缓存

  比如 虚拟地址VALUE1 = > 物理地址VALUE2, 这个转译规则由于经常用,所以被CPU记录在缓存中,这样就不必每次查表,那么INVLPG VALUE1,就可以使这条规则中缓存中清除。

 

CPUID

  获取CPU的一些信息

 

RDTSC

  读始终周期计数

  每个始终周期CPU都会累加一个64位的计数,用此命令可以读取这个计数。

 

RDMSR / WDMSR

  读写DMSR

posted @ 2020-02-23 16:30  蹦蹦骑士  阅读(428)  评论(0编辑  收藏  举报