6.43.4 Управление именами, используемыми в коде ассемблера
Вы можете указать имя, которое будет использоваться в коде ассемблера для C-функции или переменной, написав ключевое слово asm (или __asm__) после декларатора следующим образом:
int foo asm ("myfoo") = 2;
Это указывает, что имя, которое должно использоваться для переменной foo в коде ассемблера, должно быть ‘myfoo’, а не обычное ‘_foo’.
В системах, где перед именем C-функции или переменной обычно ставится знак подчеркивания, эта функция позволяет определять имена для компоновщика, которые не начинаются с подчеркивания.
Использование этой функции с нестатической локальной переменной не имеет смысла, так как такие переменные не имеют имен в ассемблере. Если вы пытаетесь поместить переменную в определенный регистр, см. Явные переменные регистров. GCC в настоящее время принимает такой код с предупреждением, но в будущем, вероятно, будет выдавать ошибку вместо предупреждения.
Вы не можете использовать asm таким образом в определении функции; но вы можете получить тот же эффект, написав объявление для функции перед её определением и поместив asm туда, как показано ниже:
extern func () asm ("FUNC");
func (x, y)
int x, y;
/* … */
Вам необходимо убедиться, что выбранные вами имена ассемблера не конфликтуют с другими символами ассемблера. Кроме того, нельзя использовать имя регистра; это приведет к созданию совершенно неверного кода ассемблера. В настоящее время GCC не имеет возможности хранить статические переменные в регистрах. Возможно, это будет добавлено в будущем.
Далее: Явные переменные регистров, Предыдущее: Ограничения, Вверх: Использование языка ассемблера с C [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Asm-Labels.html