Ошибка ассемблерной вставки "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 */
             );

Объяснение кода листинга программы

  1. Объявляются две переменные: a и b типа int. Значение переменной a равно 10, а переменная b не инициализируется.
  2. Далее происходит ассемблерная вставка кода с использованием ключевого слова asm.
  3. Ассемблерная вставка содержит два инструкции: movl. Первая инструкция переносит значение переменной a из стека в регистр eax, вторая инструкция переносит значение регистра eax в переменную b.
  4. В списке параметров функции asm указывается: — r(b): переменная b является выходным параметром (output). — r(a): переменная a является входным параметром (input). — %eax: регистр eax будет изменен в результате выполнения ассемблерной вставки (clobbered register).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы