1

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

2 回答 2

3

rdtsc返回结果为edx:eax即使在 64 位模式下,但 C 调用约定期望结果为rax. 你必须自己打包结果。请注意,您通常不需要堆栈帧。就像是:

cpuid
rdtsc
shl $32, %rdx
or %rdx, %rax
ret
于 2013-05-31T14:29:01.730 回答
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指令后。

于 2013-05-31T14:28:30.120 回答