ОБСУЖДЕНИЕ

Asm вставка в с++.gnu компилятор

2 ответов 5,3 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Здравствуйте!
Достаточно уже долго бьюсь над проблемой, поэтому решил обратиться сюда.
Я пытаюсь применить ассемблерную вставку в с++ ... До этого опыта с этим не было.
Надо по заданию просто.
Применить то я применил... Но как - то криво.
Пишу просто для пробы:
...
void printab(int );
...
int x1 = 1;
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-Asm.html#Extended-Asm

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

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

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