我试着用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();
最佳答案
rdtsc
即使在64位模式下也返回edx
:eax
中的结果,但C调用约定期望在rax
中返回结果。你必须自己打包结果。请注意,通常不需要堆栈帧。
类似于:
cpuid
rdtsc
shl $32, %rdx
or %rdx, %rax
ret