I'm trying to figure out how to read this assembly code in C++.
This is the code:
unsigned __int64 high_perf_time;
unsigned __int64 *dest = &high_perf_time;
__asm
{
_emit 0xf // these two bytes form the 'rdtsc' asm instruction,
_emit 0x31 // available on Pentium I and later.
mov esi, dest
mov [esi ], eax // lower 32 bits of tsc
mov [esi+4], edx // upper 32 bits of tsc
}
__int64 time_s = (__int64)(high_perf_time / frequency); // unsigned->sign conversion should be safe here
__int64 time_fract = (__int64)(high_perf_time % frequency); // unsigned->sign conversion should be safe here
I know 0xf 0x31 is rdtsc eax, edx, but what is mov esi,dest? How can I write that in C++?
The C++ code is
Documentation here: https://learn.microsoft.com/en-us/cpp/intrinsics/rdtsc
But you probably want
QueryPerformanceCounter()andQueryPerformanceFrequency()instead, else you will have a race condition if your thread is scheduled on a different processor core between successive__rdtsc()calls.