Просто используйте asm()
вне функционального блока.Аргумент asm()
просто игнорируется компилятором и передается непосредственно ассемблеру.Для сложных функций лучше всего использовать отдельный исходный файл сборки, чтобы избежать неудобного синтаксиса.
Пример:
#include <stdio.h>
asm("_one: \n\
movl $1,%eax \n\
ret \n\
");
int one();
int main() {
printf("result: %d\n", one());
return 0;
}
PS: убедитесь, что вы понимаете соглашения о вызовах вашей платформы.Много раз вы не можете просто скопировать / пропустить код сборки.
PPS: Если вы заботитесь о производительности, используйте взамен extended asm .Расширенная asm, по сути, встраивает ассемблерный код в ваш C / C ++ код и работает намного быстрее, особенно для коротких ассемблерных функций.Для более крупных функций сборки предпочтителен отдельный исходный файл сборки, поэтому этот ответ действительно полезен для редкого случая, когда вам нужен указатель на функцию небольшой сборки.