Когда я выполнил этот код с b
и c
переменными, программа выполнит, но не выдаст результат. Существует некоторая логическая ошибка, которая не выводит время на выходе.Ошибка: не удается найти реестр в классе 'AREG' при перезагрузке ASM
__inline__ uint64_t timestamp(void)
{
unsigned long a, b;
asm volatile ("cpuid; rdtscp" : "=a" (a), "=b" (b) : : "%rax", "%rdx");
return a | ((uint64_t) b << 32);
}
У вас есть clobbered RAX, поэтому он может использоваться для удовлетворения ограничения '' = a ''. –
В расширенных документах по сборке GCC вы узнаете, как читать таймер с высоким разрешением. Это буквально дает вам код. См. [6.45.2 Расширенные инструкции Asm - Assembler с операндами C Expression] (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) в руководстве. – jww