汇编rdtsc x64 ubuntu

时间:2013-05-31 13:30:19

标签: c assembly rdtsc

我正在尝试使用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();

2 个答案:

答案 0 :(得分:3)

即使在64位模式下,

rdtsc也会在edxeax中返回结果,但C调用约定期望得到rax的结果。你必须自己打包结果。请注意,您通常不需要堆栈帧。 类似的东西:

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

答案 1 :(得分:0)

你的功能是什么类型的? 它应该是UINT64。 rdtsc在EAX中返回低32位,在EDX寄存器中返回高32位。 所以你不会导致RAX而不是执行:

  shl   rdx, 32     //left shift for 32 bits
  or    rax, rdx    //Compose both registers in 64 bit RAX
执行rdtsc指令后