GCC 内联汇编 格式及代码

来源:互联网 发布:linux nfs nobody 编辑:程序博客网 时间:2024/06/06 09:02

#include <stdio.h>

int main()
{
    int a = 100, b = 0;
    __asm__ __volatile__( "movl %3, %%eax;/n/r"
          "movl %%eax, %0;/n/r"                                             /* %0 用来表示 输出的a变量  对应声明:"=r"(a)*/
          "movl %2, %%eax;/n/r"                                             /* %2用来表示 输入的a变量  对应声明:"r"(a)*/
                          "movl %%eax, %0;/n/r"                         
                          :"=r"(a),"=r"(b)                                             /*  声明变量 a ,b 为输出,程序段结束后,该值将变更*/
                          :"r"(a),"r"(b)                                                  /*  声明变量 a ,b 为输入,用来在程序中输入,在此也可以不用再次声明这两个变量  在此仅属于示例说明用输入功能的*/
                          :"%eax");                                                      /*  声明eax将变被更*/
 
    
    printf("Result: %d, %d/n", a, b);
 
 return 0;
}
 

限定符 意义 "m"、"v"、"o" 内存单元 "r" 任何寄存器 "q" 寄存器eax、ebx、ecx、edx之一 "i"、"h" 直接操作数 "E"和"F" 浮点数 "g" 任意 "a"、"b"、"c"、"d" 分别表示寄存器eax、ebx、ecx和edx "S"和"D" 寄存器esi、edi "I" 常数(0至31)

输入约束和输出约束的不同点在于输出约束多一个约束修饰符'='

 

原创粉丝点击