6.43 Управление именами, используемыми в коде ассемблера
Вы можете указать имя, используемое в коде ассемблера для функции или переменной 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 не имеет возможности сохранять статические переменные в регистрах. Возможно, это будет добавлено.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Asm-Labels.html