我正在尝试使用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();
答案 0 :(得分:3)
rdtsc
也会在edx
:eax
中返回结果,但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
指令后。