Я пытаюсь использовать встроенный ассемблер __asm в моей программе на C с синтаксисом 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' и т. Д.
Edit:
Я обновил код как:
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'
Пожалуйста, помогите ..