Spec-Zone.ru › GCC 4

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API