本文共 497 字,大约阅读时间需要 1 分钟。
今天工作中看到了一个IA32时钟周期的内容,在有不错的介绍,不过英文看上去总是不大给力,自己试着翻了一下:
RDTSC指令将当前的处理器时间戳加载到EDX:EAX两寄存器。时间戳的长度是64bit的,存储在MSR(特别模块寄存器)中。其中,高32bit的内容加载到EDX寄存器,低32bit的内容加载到EAX寄存器。时间戳计数器的内容随着处理器时钟周期的增长而增长,并且在处理器重启的时候被重启置0。
当在保护模式下或者virtual8086模式下的时候,在CR4寄存器中有一个时间戳的开关标记(TSD),这个标记对RDTSC指令的使用范围做了一定的限制。当TSD标记被没有被指定,RDTSC指令能够在任何特权级下运行,如果这个标记被指定的话,这个指令只能在ring0下运行。(实模式下,RDTSC指令不存在这个限制)。
另外在自己写的程序中试了一下,把代码也抄上来,和上边blog里的用法差不多。
unsigned int a,b; __asm { push eax push edx RDTSC mov a,eax mov b,ebx pop edx pop eax };
转载地址:http://klyni.baihongyu.com/