皆さんの助けを借りて私は小さなインラインアセンブラプログラムをほとんどどこにも持っています。しかし、今はrdtscコマンドで非常に奇妙なことが起こっているようです。基本的に、私はそれを呼び出すときにセグメンテーション違反を得る。CのインラインアセンブリでRDTSCがセグメンテーション違反の原因になります。
int timings[64*N];
int main(void)
{
int i;
__asm__ __volatile__ (
"lea edx, [timings] \n\t"
"rdtsc \n\t"
".rept 32 \n\t"
"mov eax,[edx] \n\t"
"inc eax \n\t"
"mov dword ptr [edx], eax \n\t"
"add edx, 4 \n\t"
".endr \n\t"
:
: [timings] "m" (*timings)
);
for(i=0; i<32; i++)
printf("%d\n", timings[i]);
return 0;
}
rdtscを抜けて、プログラムがコンパイルされ、実行する必要があることが実行されます。しかし、rdtsc行を追加すると、セグメンテーション違反が発生します。私はデュアルコアマシン上でこのようなことを実行し、コンパイルに使用しています:gcc -masm = intel test.c
助けてください!
カントは私がどれほど愚かであるか信じています。タイムスタンプカウンタの上位部分がedxに格納されていることを完全に無視しました。ここで私を助けてくれて本当にありがとう、それはちょうど朝早くにある;) –