gpt4 book ai didi

c++ - GCC Windows __asm RDTSC 破坏者

转载 作者:行者123 更新时间:2023-11-30 17:34:35 25 4
gpt4 key购买 nike

所以我正在尝试在 Windows 的 GCC 中编译一些 C 语言。长话短说,我无法让 Visual Studios 编译可在 XP 上运行的 EXE。所以我想尝试一下 GCC。

它正在努力处理的代码是:

__asm __volatile ("rdtsc": "=a" (lower), "=d"(upper));

我得到的错误是:

HITWxp.c:22:2: error: inconsistent operand constraints in an 'asm'
__asm __volatile ("rdtsc": "=A" (lower), "=D"(upper));
^

现在,当我将行更改为以下内容时,它会编译:

__volatile ("rdtsc": "=A" (lower));

我注意到它将第一个示例中的“=a”转换为第二个示例中的大写“=A”。所以我认为它不区分大小写。

最终结果需要是在 WinXP/7/8/8.1 x86/x64 上运行的 EXE。

有什么想法吗?

提前致谢!

最佳答案

在 MingW32 和 CygWin 上运行良好:

#include <stdio.h>
#include <stdint.h>

int main ( void )
{
uint32_t lower = 0, upper = 0;

asm volatile ("rdtsc": "=a" (lower), "=d" (upper));

uint64_t ull = ((uint64_t) upper << 32) + lower;
printf ("%08X %08X\n", upper, lower);
printf ("%llu\n", ull);
return 0;
}

和 Visual Studio 2010:

#include <stdio.h>

int main ( void )
{
unsigned _int64 ull = 0;

_asm
{
rdtsc
mov dword ptr ull, eax
mov dword ptr ull+4, edx
}

printf("%I64u\n",ull);
return 0;
}

这个应该可以在 Visual Studio、x86 和 x64 上运行:

#include <stdio.h>
#include <intrin.h>

int main ( void )
{
unsigned _int64 ull = 0;

ull = __rdtsc(); // "Intrinsics"

printf("%I64u\n",ull);
return 0;
}

关于c++ - GCC Windows __asm RDTSC 破坏者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23274635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com