при компиляции встроенной сборки в c с использованием g cc с флагом -g компилятор выдает «отсутствует ограничение выходного операнда» - PullRequest
1 голос
/ 01 мая 2020

вызов функций из основных глобальных объявлений int A = 0, B = 0, C = 0;

void load()
{
        system("clear");
        printf("Enter 2 values: ");
        scanf("%d %d",&B,&C);
        __asm__ __volatile__("movl %1,%%ebx;"
            "movl  %2,%%ecx;"
                :: "b" (B) , "c" (C)
        );
        printf("Loaded Successfully. (press any key to continue.)");
        scanf("%d",&temp);
}
void Add()
{
    system("clear");
    __asm__("movl %ebx,%eax;"
        "addl %ecx,%eax;"
        :"=a" (Acc)
    );
    printf("Answer: %d (press any key to continue)",Acc);
    scanf("%d",&temp);
}
void Sub()
{
    system("clear");
    __asm__("movl %ebx,%eax;"
        "subl %ecx,%eax;"
        :"=a" (Acc)
    );
    printf("Answer: %d (press any key to continue)",Acc);
    scanf("%d",&temp);
}
void Mul()
{
    system("clear");
    __asm__("movl %ebx,%eax;"
        "imull %ecx,%eax;"
        :"=a" (Acc)
        );
    printf("Answer: %d (press any key to continue)",Acc);
    scanf("%d",&temp);
}
void Div()
{
    int rem;
    system("clear");
    __asm__("movl %0x0,%edx;"
        "movl %ebx,%eax;"
        "idivl %ecx"
        :"=a" (Acc) , "=r" (rem)
    );
    __asm__("movl %1, %eax"
        :: "a" (Acc)
    );
    printf("Quotient: %d Remainder= %d (press any key to continue)",Acc,rem);
    scanf("%d",&temp);
}

вот код, использующий встроенную сборку в c и при компиляции с помощью g cc - g выдает ошибку:

test3.c: In function ‘main’:
test3.c:22:13: error: output operand constraint lacks ‘=’
             __asm__("movl %1,%ebx;" "movl  %2,%ecx;" : "r" (B): "r" (C));
             ^~~~~~~
test3.c:22:13: error: output operand constraint lacks ‘=’
test3.c:22:13: error: invalid lvalue in asm output 0

ссылки из:

https://www.codeproject.com/articles/15971/using-inline-assembly-in-c-c

Исходные коды с сайта компилируются отлично, но при компиляции Приведенный выше код выдаёт ошибки
Также пробовал asm volatile , но опять g cc выбрасывает:

error: bad register name `%%eax' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...