我正在尝试使用 rdtsc 函数,但我有奇怪的数字。我正在尝试从 C 代码调用此函数并将刻度传回函数。你能告诉我我做得对吗?
汇编代码:
.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
返回结果为edx
:eax
即使在 64 位模式下,但 C 调用约定期望结果为rax
. 你必须自己打包结果。请注意,您通常不需要堆栈帧。就像是:
cpuid
rdtsc
shl $32, %rdx
or %rdx, %rax
ret
你的函数是什么类型的?它应该是 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
指令后。