Я хочу вычислить x * y % 998244353
по GCC asm, поэтому я написал код asm:
int Modmul(int x, int y)
{
int t;
__asm__ __volatile__ ("mull %%ebx\n\tdivl %%ecx\n\t" : "=d"(t) : "a"(x), "b"(y), "c"(998244353) : "eax", "edx", "memory");
return t;
}
Однако, он получил ошибку компиляции "операнд" asm "имеет невозможные ограничения", и если я удаляю: "eax", "edx", "memory"
, он может пройти компиляцию, но получил неправильный ответ, почему?
Кстати, я заменил ebx
на r0
и ecx
на r1
:
int Modmul(int x, int y)
{
int t;
__asm__ __volatile__ ("mull %0\n\tdivl %1\n\t" : "=d"(t) : "a"(x), "r"(y), "r"(998244353));
return t;
}
Может пройти компиляцию, но произошла ошибка во время выполнения, почему?