gpt4 book ai didi

c++ - -masm=intel 标志不适用于使用 Intel 语法在 gcc 编译器中运行汇编语言

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:06 25 4
gpt4 key购买 nike

我正在尝试在我的 C 程序中使用内联汇编程序 __asm,使用 Intel 语法而不是 AT&T 语法。我正在使用 gcc -S -masm=intel test.c 进行编译但它给出了错误。下面是我的 test.c 文件。

#include <stdio.h>
//using namespace std;
int AsmCode(int num,int power) {
__asm {
mov eax, num;
mov ecx, power;
shl eax, cl;
};
}
int main()
{
printf("eax value is %d\n",AsmCode(2,3));

//getchar();
return 0;



}

预期结果是 eax 值为 16,但出现了未知类型名称“mov”、未知类型名称“shl”等错误。

编辑:我已将代码更新为:

int AsmCode(int num,int power) {
__asm__ (
"movl eax, num;"
"mov ecx, power;"
"shl eax, cl;"
);
}
int main()
{
printf("eax value is %d\n",AsmCode(2,3));
return 0;
}

并使用 gcc -S -masm=intel test.c 编译此代码。这导致 NO OUTPUT,而它应该产生输出,因为 eax 值为 16

当用 gcc test.c 编译时,它产生了错误:

Error: too many memory references for 'mov'
Error: too many memory references for 'shl'

请帮忙..

最佳答案

最重要的错误是第一个:

main.cpp:4:11: error: expected '(' before '{' token
__asm {
^
(

您对 GCC 使用了错误的语法。您已经使用了 Microsoft Visual Studio 语法。因此,您的 GCC 并不知道您正试图向其提供汇编指令。

__asm { ... } 应该是 __asm__ ( "...")

像这样:

int AsmCode(int num,int power) {
__asm__ (
"mov eax, num;"
"mov ecx, power;"
"shl eax, cl;"
);
}

阅读更多 here .

请注意,您应该单独询问您的 ASM 的其他问题。

关于c++ - -masm=intel 标志不适用于使用 Intel 语法在 gcc 编译器中运行汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198611/

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