Что такое ключевое слово MSVC __asm ​​для GCC? - PullRequest
0 голосов
/ 22 февраля 2019

Я писал код в asm внутри C-программы и неправильно понял, что __asm ​​{...} - это то, что мне нужно для этого.Позже я узнал, что __asm ​​для компилятора MSVC, а не GCC.Что является эквивалентом в C для ключевого слова MSVC __asm?У меня есть метки и циклы в коде, который я написал, и я не знаю, каков их синтаксис в каком-либо ключевом слове __asm ​​для GCC.

Мой код выполняет (или пытается сделать) древний метод умножения.

int p = 0;
int b = 10;
int a  = 5;
/*
while(b!= 0){
    if(b%2 != 0) p+=a;
    a+=a;
    b/=2;
}
printf("%i\n",p);
*/



__asm{
    mov p, 0
    mov edx, p
    mov ebx, a
    mov ax,b
    jmp checkend

notEven:
    add edx, ebx
    mov edx, a  


checkend:
    cmp b, 0
    je endok


    test ax, 1
    jnz notEven

    add ebx, ebx
    mov a, ebx
    mov dx, 0
    mov ax, b
    mov bx, 2
    div bx
    mov b,ax
}
printf("%i\n",p);
return 0;
}

1 Ответ

0 голосов
/ 22 февраля 2019

Что является эквивалентом в C для функции __asm в C ++?

C не имеет стандартного положения для встроенной сборки, поэтому это зависит от вашей реализации.Стандарт документирует ключевое слово asm как общее расширение , но доступно ли оно и какова его семантика, зависит от вашей реализации на Си.

Поскольку вы пометили GCC, выхотел бы обратиться к документации GCC по встроенной сборке .GCC использует ключевое слово asm для этого.Самое простое использование выглядит следующим образом:

asm ( AssemblerInstructions ... );
...