C语言内嵌汇编语法

GCC

 __asm__(
    汇编语句模版:
    输出部分:
    输入部分:
    破坏描述部分
);

即格式为asm("statements":output_regs:input_regs:clobbered_regs);

__asm__表示后面的代码为内嵌汇编,同时__asm__也可由asm来代替,asm__asm__的别名。

__asm__后面有时也会加上__volatile__表示编译器不要优化代码,后面的指令保留原样,同样volatile是它的别名,在这里值得注意的是无论__asm__还是”__volatile__“中的每个下划线都不是一个单独的下划线,而是两个短的下划线拼成的。再后面括号里面的便是汇编指令。

Visual C++

__asm 汇编指令 [ ; ]
__asm { 汇编指令 } [ ; ]

同样asm前面是两条下划线,后面的方括号内容表示分号可有可无。

  1. 组成一块地用

     __asm {
        mov al, 2
        mov dx, 0xD007
        out dx, al
     }
    
  2. 分条的使用

     __asm mov al, 2
     __asm mov dx, 0xD007
     __asm out dx, al
    

    也可以写在同一行

     __asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al
    

Turbo C

  1. 使用预处理程序的伪指令#asm#endasm,#asm用来开始一个汇编程序块,而#endasm指令用于该块的结束。

     mul(a,b)
     int a,b;
     {
        #asm
            mov ax,word ptr 8[bp]
            imul ax word ptr 10[bp]
        #endasm
     }
    
  2. 使用asm语句 格式:asm<汇编语句>

     mul(a,b)
     int a,b;
     {
         asm   mov ax,word ptr 8[bp]
         asm   imul ax word ptr 10[bp]
     }
    

Visual C++ 和 Turbo C语法转自http://bbs.51cto.com/thread-652061-1.html