格式

asm volatile(“asm code”:output:input:changed);

  • asm 内嵌汇编关键字
  • volatile 告诉编译器不要优化内嵌汇编
  • output:ASM –> C

asm volatile(
“asm code”
:”constraint”(variable)
);

– r:使用任何可用的通用寄存器
– m:使用变量的内存地址
– +:可读可写
– =:只写
– &:该输出操作数不能使用输入部分使用过的寄存器。只能+&或=&方式使用

  • input: C –> ASM

asm volatile(
“asm code”
:
:”constraint”(variable/immediate)
);

– r:使用任何可用的通用寄存器(变量和立即数都可使用)
– m:使用变量的内存地址(不能用立即数)
– i:使用立即数(不能使用变量)

  • changed:告诉编译器你修改过的寄存器,编译器会自动把保存这些寄存器值的指令加在内嵌汇编之前,再把恢复寄存器值的指令加在内嵌汇编之后。