#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) |