Ошибка ассемблерной вставки "too many memory references for 'add'" - C (СИ)
Формулировка задачи:
Собственно сабж. Не могу понять, в чем дело
void k(void)
{
unsigned a = 1;
unsigned register result = 2;
asm("add result , a");
}Решение задачи: «Ошибка ассемблерной вставки "too many memory references for 'add'"»
textual
Листинг программы
int a=10, b;
asm ("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /* output */
:"r"(a) /* input */
:"%eax" /* clobbered register */
);
Объяснение кода листинга программы
- Объявляются две переменные: a и b типа int. Значение переменной a равно 10, а переменная b не инициализируется.
- Далее происходит ассемблерная вставка кода с использованием ключевого слова asm.
- Ассемблерная вставка содержит два инструкции: movl. Первая инструкция переносит значение переменной a из стека в регистр eax, вторая инструкция переносит значение регистра eax в переменную b.
- В списке параметров функции asm указывается:
— r
(b): переменная b является выходным параметром (output). —r(a): переменная a является входным параметром (input). —%eax: регистр eax будет изменен в результате выполнения ассемблерной вставки (clobbered register).