GCC的MSVC __asm关键字是什么?

时间:2019-02-22 19:16:18

标签: c gcc assembly inline-assembly

我在C程序内的asm中编写代码,但我误解了__asm {...}是我能够做到这一点的必要条件。后来我发现__asm适用于MSVC编译器,而不适用于GCC。 MSVC的__asm关键字在C中的等效项是什么?我编写的代码中有标签和循环,不知道在__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 :(得分:3)

  

对于C ++的__asm函数,C语言等效于什么?

C没有用于内联汇编的标准条款,因此它取决于您的实现。该标准将asm关键字记录为通用扩展名,但是该关键字是否可用以及其语义可能取决于您的C实现。

由于您已标记GCC,因此您想咨询GCC's documentation on inline assembly。 GCC确实为此使用了asm关键字。最简单的用法是采用以下形式:

asm ( AssemblerInstructions ... );