Я знаю, что rdtsc
загружает текущее значение счетчика времени обработки процессора в два регистра: EDX и EAX. Чтобы получить его на x86, мне нужно сделать это так (при использовании Linux):
unsigned long lo, hi;
asm( "rdtsc" : "=a" (lo), "=d" (hi));
return lo;
и для x86_x64:
unsigned long lo, hi;
asm( "rdtsc" : "=a" (lo), "=d" (hi) );
return( lo | (hi << 32) );
почему? Может ли кто-нибудь объяснить это мне?