Я пытаюсь понять, как работает расширенная встроенная сборка в G CC. Но когда я пытаюсь запустить простую тестовую программу, я получаю сообщение об ошибке: «неверный суффикс инструкции для mov»
Пример программы:
unsigned char destination;
unsigned char ret;
unsigned int somevalue;
asm ("movb %1, %%al\n\t"
"push %1\n\t"
"pop edx\n\t"
"not %%al\n\t"
"movb %%al, %0"
: "=r" (destination), "=r"(somevalue)
: "r" (ret));
destination
должен быть загружен в al
. После этого somevalue
помещается в стек. После этого он попадает в регистр edx
. Инструкция not
должна выполняться для al
, которая содержит значение destination
. После этого результат будет выдан ret
. Нет ограничений на использование регистров для выполнения этой программы (я полагаю, это означает, что все регистры являются клобберами?).