C语言 Assembly rdtsc x64 ubuntu



我试图使用rdtsc函数,但我得到了奇怪的数字。我试图从C代码中调用这个函数,并将勾号返回给函数。你能告诉我我做得对不对吗?

Asm代码:

.text
.globl czas
.type czas, @function
czas:
pushq %rbp
movq %rsp, %rbp
xor %rax,%rax;
cpuid
rdtsc
popq %rbp
ret

C代码:

unsigned long long Czas;
Czas=czas();

rdtscedx:eax中返回结果,即使在64位模式下也是如此,但C调用约定期望在rax中返回结果。你必须自己把结果打包。请注意,您通常不需要堆栈框架。类似于:

cpuid
rdtsc
shl $32, %rdx
or %rdx, %rax
ret

函数的类型是什么?它应该是UINT64。CCD_ 5返回EAX中的低32位和EDX寄存器中的高32位。所以你不会导致RAX而不是执行:

  shl   rdx, 32     //left shift for 32 bits
  or    rax, rdx    //Compose both registers in 64 bit RAX

执行CCD_ 6指令后。

相关内容

  • 没有找到相关文章

最新更新