asm (
"mov a, %eax \n\t"
"mov b, %ebx \n\t"
"add %eax, %ebx \n\t"
"mov %ebx, c \n\t"
);
Так в gcc не работает. Должно быть например так:
asm (
"mov %[a], %%eax \n\t"
"mov %[b], %%ebx \n\t"
"add %%eax, %%ebx \n\t"
"mov %ebx, %[c] \n\t"
: [c] "=rm" (c)
: [a] "rm" (a), [b] "rm" (b)
: "eax", "ebx", "cc"
);
Что это всё значит можно почитать
тут.
Компилирую, а тут фигня происходит:
Ошибка говорит о том, что код попытался обратиться к глобальному символу
a
, но такого символа нет. Потому что переменная
a
размещена на стеке и символьного имени у неё и правда нет. Если бы она (вместе с
b
и
c
) была глобальной, всё равно была бы ошибка (по крайней мере при компиляции под 64 бита), но другая.