C内联汇编中的RDTSC导致分段错误!

3 c assembly segmentation-fault

感谢你们的帮助,我得到了我的小内联汇编程序几乎就在我想要的地方.然而,现在似乎发生了一些与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;
}
Run Code Online (Sandbox Code Playgroud)

离开rdtsc,然后程序编译,它做它应该做的事情.但添加rdtsc行会导致分段错误.我在双核机器上运行这些东西并用于编译:gcc -masm = intel test.c

帮助将不胜感激!

sha*_*oth 5

rdtsc覆盖eaxedx打勾计数器的部分.既然你装(lea)的地址timingsedx前面rdtsc弄乱了你的程序运作.您既可以移动rdtsc上的命令链,或使用比其他寄存器eaxedx你的程序运作.