8

このコードに出くわしたので、それが何をしているのかを理解する必要があります。2バイトを宣言してから何もしていないようです...

uint64_t x;
__asm__ __volatile__ (".byte 0x0f, 0x31" : "=A" (x));

ありがとう!

4

4 に答える 4

12

これにより、2 バイト (0F 31) がコード ストリームに直接生成されます。これは RDTSC 命令であり、タイムスタンプ カウンターを EDX:EAX に読み込み、出力制約 "=A"(x) によって変数 'x' にコピーされます。

于 2009-08-13T17:26:44.277 に答える
4

0F 31 は、RDTSC (読み取りタイム スタンプ カウンター) 命令の x86 オペコードです。読み取った値を EDX および EAX レジスタに配置します。

_ _ asm__ ディレクティブは、2 バイトを宣言するだけでなく、インライン アセンブリを C コードに配置します。おそらく、プログラムには、これらのレジスタの値を直後に使用する方法があります。

http://en.wikipedia.org/wiki/Time_Stamp_Counter

于 2009-08-13T17:27:08.567 に答える
2

このサイトによると、0F 31 オペコードを挿入しています。

0F 31   P1+   f2   RDTSC EAX EDX IA32_T...        Read Time-Stamp Counter 

x次に、結果を変数に格納しています

于 2009-08-13T17:29:36.440 に答える