gpt4 book ai didi

c++ - 编译 __asm 代码所需的标志

转载 作者:太空狗 更新时间:2023-10-29 20:28:50 24 4
gpt4 key购买 nike

使用内联汇编指令编译代码是否需要任何标志?

我正在尝试让 g++ 编译以下代码(从 SO 上的答案克隆而来):

#include <iostream>

using namespace std;

inline unsigned int get_cpu_feature_flags()
{
unsigned int features;

__asm
{ // <- Line 10
// Save registers
push eax
push ebx
push ecx
push edx

// Get the feature flags (eax=1) from edx
mov eax, 1
cpuid
mov features, edx

// Restore registers
pop edx
pop ecx
pop ebx
pop eax
}

return features;
}

int main() {
// Bit 26 for SSE2 support
static const bool cpu_supports_sse2 = (get_cpu_feature_flags() & 0x04000000)!=0;
cout << (cpu_supports_sse2? "Supports SSE" : "Does NOT support SSE");
}

但我收到以下错误:

$ g++ t2.cpp 
t2.cpp: In function ‘unsigned int get_cpu_feature_flags()’:
t2.cpp:10:5: error: expected ‘(’ before ‘{’ token
t2.cpp:12:9: error: ‘push’ was not declared in this scope
t2.cpp:12:17: error: expected ‘;’ before ‘eax’
$

最佳答案

正如其他人暗示但未明确指出的那样,对于 gcc(它使用基于字符串的 asm("...") 语言而不是真正的内联汇编代码)和 gas(它使用 AT&T 语法代替),这是不正确的语法英特尔语法)。

谷歌搜索“gcc inline assembly”找到了这个教程,看起来不错:

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

您可以在此处找到 gcc 文档的相关部分:

http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Extended-Asm.html

关于c++ - 编译 __asm 代码所需的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098593/

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