Проблема с ассемблерными вставками. GNU компилятор

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Проблема с ассемблерными вставками. GNU компилятор

Все

TnedutS » 09 авг 2005, 18:40

Пардон.
Вопрос отменяется :)

Проблема с ассемблерными вставками. GNU компилятор

TnedutS » 09 авг 2005, 14:48

Привет всем.
Есть проблема.
Я вот тут пытаюсь ассемблерную вставку в с++ запихнуть...
А не получается. Точнее получается... Но как - то криво.

Пишу просто для пробы:
...
void printab(int );
...
int x1;
asm("pushl %0\n\tcall printab \n\tpop %%eax" : : "r" (x1));
...
Пишет мне
undefined reference to printab

Смотрел в инете. Нашел, например это:

asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
: /* no outputs */
: "g" (from), "g" (to)
: "r9", "r10");

Но ведь тут тоже _foo неопределена.
Это отсюда:
http://gcc.activeventure.org/Extended-A ... tended-Asm

Смотрел и др. сайты. Примеры одни и те же.

Попытался сделать это подобным образом
asm("pushl %0\n\tcall %1 \n\tpop %%eax" : : "r" (x1),"r"(printab));

Пишет предупреждение
indirect call without '*'
Но работает. Но что значит это предупреждение?
Как от него избавиться?
Я просто не понимаю, что имеется ввиду.
Что не есть гут.
Объясните пожалуйста, что это значит, и как от этого избавиться.
И (если они есть) другие способы вызова функций.

Вернуться к началу