Ответ 1
Просто используйте 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. Extended asm существенно встраивает код сборки в ваш код C/С++ и работает намного быстрее, особенно для коротких функций сборки. Для более крупных функций сборки предпочтительным является отдельный исходный файл сборки, поэтому этот ответ действительно является взломом для редкого случая, когда вам нужен указатель на функцию небольшой сборки.