【发布时间】:2019-01-15 12:12:45
【问题描述】:
我试图在我的 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 value is 16。
使用gcc test.c 编译时会产生错误:
Error: too many memory references for 'mov'
Error: too many memory references for 'shl'
请帮忙..
【问题讨论】:
-
请复制粘贴错误消息,而不是解释它们。
-
总是阅读第一条错误信息