c - GCC 的 MSVC __asm 关键字是什么?

标签 c gcc assembly inline-assembly

我在 C 程序中用 asm 编写代码,我误读了 __asm{...} 是我需要的才能做到这一点。后来我发现 __asm 适用于 MSVC 编译器,而不是 GCC。 MSVC 的 __asm 关键字在 C 中的等价物是什么?我在我编写的代码中有标签和循环,但不知道在 GCC 的 __asm 关键字中它们的语法是什么。

我的代码正在执行(或尝试执行)古老的乘法。

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;
}

最佳答案

What is the equivalent in C for C++'s __asm function?

C 对于内联汇编没有标准规定,所以这取决于你的实现。该标准将 asm 关键字记录为通用扩展,但它是否可用及其语义可能取决于您的 C 实现。

既然你已经标记了 GCC,你会想咨询 GCC's documentation on inline assembly . GCC 为此使用了 asm 关键字。最基本的用法采用这种形式:

asm ( AssemblerInstructions ... );

关于c - GCC 的 MSVC __asm 关键字是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833716/

相关文章:

c - 制作高度图的替代方法

检查是否可以通过连接较小的字符串来制作字符串

ios - OpenSSL 从控制台命令到函数

c - 使符号链接(symbolic link)到可执行文件

c++ - g++ 编译对外部 hpp 文件的 undefined reference

c - 用于图像处理的非常快的 memcpy?

c - gcc 删除内联汇编代码

海湾合作委员会/g++ : error when compiling large file

gcc - REGSITER_TM_CLONES 中的 Shift 操作的目的是什么?

c - 访问整数最低有效位的最快方法?