rdtsc
は、プロセッサのタイムスタンプカウンタの現在の値をEDXとEAXの2つのレジスタにロードすることがわかります。 x86でそれを得るために、私は(Linuxを使用して仮定して)そのようにそれを実行する必要があります。なぜx86とx86_x64で 'rdtsc'を別々に使うべきですか?
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));
理由は何ですか?誰も私にそれを説明することはできますか?
これは、 'rdtsc'がプロセッサのタイムスタンプカウンタの現在の値をEDXとEAXの2つのレジスタにロードし、EAXからEDXへのレジスタにロードしないということです。 (EAX、EBX、ECX、EDX) – mazix
rdtscは常に64ビットの値を返します.32ビットマシンの場合、EDXとEAXに格納されます。 – mvv1277