我正在尝试使用 rdtsc 计算使用 sys_write 写入内容需要多少个周期。我能够测试 printf 和 scanf 函数。它们工作正常,现在我遇到了系统调用问题。
在我看来,问题出在 %eax 和 %edx 寄存器上,因为 rdtsc 将结果保存在这些寄存器中。
写.s
.data
SYS_EXIT = 1
SYS_WRITE = 4
STDOUT = 1
EXIT_SUCCES = 0
text: .ascii "Hello from assembler\n"
textLength: .long . - text
.section .text
.globl print
.type print, @function
print:
movl $SYS_WRITE, %eax
movl $STDOUT, %ebx
movl $text, %ecx
movl textLength, %edx
int $0x80
ret
rdtsc.s
.data
.text
.globl rdtsc
rdtsc:
push %ebx
xor %eax, %eax
cpuid
rdtsc
pop %ebx
ret
主程序
#include <stdio.h>
unsigned long long rdtsc();
extern void print();
unsigned long long startTime, stopTime, workingTime;
int main (void)
{
startTime = rdtsc();
print();
stopTime = rdtsc();
workingTime = stopTime - startTime;
printf("Cycles %llu\n", workingTime);
return 0;
}
当我运行程序时,我得到一个分段错误(核心转储)错误。