这是一内个汇联编格的式。
拆解
asm
1.说明是一个内联汇编
asm-qualifiers
2.有三个值 volatile inline goto
volatile 是可选的,编译器有可能对汇编代码进行优化,使用 volatile 关键字之后,告诉编译器不要优化手写的内联汇编代码。
语法规则
asm [volatile] ("汇编指令")
Assembler Template
3.是一个字符串,是放汇编指令的,
- 超过一条指令,必须用\n\t分隔符进行分割;
- 多条汇编指令,可以写在一行,也可以写在多行;
- 所有指令,必须用双引号包裹起来;
#include <stdio.h>
int a = 1;
int b = 2;
int c;
int main()
{
asm volatile ("movl a, %eax\n\t"
"addl b, %eax\n\t"
"movl %eax, c");
printf("c = %d \n", c);
return 0;
}
C语言中会自动把两个连续的字符串字面量拼接成一个,所以"nop\n\tnop\n\t" "nop"
这两个字符串会自动拼接成一个字符串。
除了汇编指令还有,下面带冒号4,5,6
OutputOperands
小例子
结果
解释
它的反汇编代码
下面用寄存器版本试试
结果一样
汇编
例子2
把b的变量给到a