Linux内核中嵌入汇编(at&t格式)
__asm__("asm statements" : outputs : inputs : registers-modified);
a : eax
b : ebx
c : ecx
d : edx
S : esi
D : edi
0 : 表示从输出开始第一个出现的寄存器
1 : 表示第二个出现的寄存器
2 : 依次类推
例子:
int ax = 2, bx = 3, cx = 4, dx = 5;
__asm__ ("" : "=b"(bx),"=a"(ax),"=c"(cx),"=d"(dx) : "0"(ax),"1"(dx),"3"(cx),"2"(bx));
printf("%d, %d, %d, %d/n", ax, bx, cx, dx);
输出:5, 2, 3, 4
解释如下:__asm__()中由冒号分割包括3部分,
其中第一部分为汇编语句,此处为空,表示什么也不做。
其中第二部分为输出语句,"=b"(bx)表示将ebx的值输出到名称为bx的int型变量中。