RDTSC

Instrukce RDTSC je instrukce pro procesory x86 .

Popis

RDTSC instrukce je mnemotechnická pro r ea d t ime s TAMP c ounter . Instrukce vrací v registrovém páru EDX: EAX počet tiků, které uběhly od posledního resetu procesoru ( Reset ).

Instrukce jednoduše načte speciální 64bitový registr s názvem čítač časových značek a umístí výsledek do registrů EDX a EAX. Horní část čítače času (32 nejvýznamnějších bitů) je umístěna v registru EDX, zatímco spodní část (32 nejméně významných bitů) je umístěna v registru EAX.

Pokyn byl přidán k procesoru Pentium .

Operační kód Návod Popis
0F 31 RDTSC Přečte počítadlo času a umístí výsledek do registrů EDX a EAX

Ovlivněné příznaky

Touto instrukcí není ovlivněn žádný příznak v registru EFLAGS .

Vygenerovány výjimky

Výjimky generované instrukcí pro různé režimy provádění procesoru jsou:

Příklady použití

Jazyky C nebo C ++

GNU C / C ++ (IA32 / x86_64)

#ifdef __i386 extern __inline__ uint64_t rdtsc(void) { uint64_t x; __asm__ volatile ("rdtsc" : "=A" (x)); return x; } #elif defined __amd64 extern __inline__ uint64_t rdtsc(void) { uint64_t a, d; __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d)); return (d<<32) | a; } #endif

Microsoft Visual C ++ (pouze IA32)

__declspec(naked) unsigned __int64 __cdecl rdtsc(void) { __asm { rdtsc ret  ; valeur de retour dans EDX:EAX } }

Jazyky Pascal a Delphi

function RDTSC: comp; var TimeStamp: record case byte of 1: (Whole: comp); 2: (Lo, Hi: Longint); end; begin asm db $0F; db $31; mov [TimeStamp.Lo], eax mov [TimeStamp.Hi], edx end; Result := TimeStamp.Whole; end;

Poznámky

  1. Podle IA-32 Intel Architecture Software Developer's Manual volume 3 se počítadlo časových známek zvýší přibližně 9,5 * 10 ^ 16krát za rok pro procesor běžící na 3GHz.

Související články