Ошибка ассемблерной вставки "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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д