Wiem, że rdtsc
ładuje bieżącą wartość licznika znaczników czasu procesora do dwóch rejestrów: EDX i EAX. Aby dostać się na x86 muszę zrobić to w ten sposób (przy założeniu korzystania z systemu Linux):Dlaczego powinienem używać "rdtsc" inaczej na x86 i x86_x64?
unsigned long lo, hi;
asm("rdtsc" : "=a" (lo), "=d" (hi));
return lo;
i x86_x64:
unsigned long lo, hi;
asm("rdtsc" : "=a" (lo), "=d" (hi));
return(lo | (hi << 32));
dlaczego tak jest? Czy ktoś może mi to wytłumaczyć?
Więc mam absolutną rację, że 'rdtsc' ładuje aktualną wartość licznika znaczników czasu procesora do dwóch rejestrów: EDX i EAX, a nie do rejestrów z EAX do EDX? (EAX, EBX, ECX, EDX) – mazix
rdtsc zawsze zwraca wartość 64-bitową, więc dla maszyny 32-bitowej przechowuje ją w EDX i EAX i tak, masz rację. – mvv1277