MUL получает ошибку во время выполнения при использовании GCC ASM - PullRequest
1 голос
/ 24 сентября 2019

Я хочу вычислить 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;
}

Может пройти компиляцию, но произошла ошибка во время выполнения, почему?

...