深入理解内联汇编与Linux内核编译过程
内联汇编概述
在阅读Linux内核源代码时,常常会遇到内联汇编语句,例如__asm__("andq %%rsp,%0; ":"=r" (ti) : "0" (CURRENT_MASK));。内联汇编就是将汇编代码集成到高级编程语言(这里主要是C语言)中。GCC支持两种形式的内联汇编语句:基本形式和扩展形式。
基本形式由__asm__关键字和有效的汇编指令字符串组成,例如:
__asm__("movq $3, %rax\t\n" "movq %rsi, %rdi");asm关键字也可替代__asm__,但__asm__具有更好的可移植性。
扩展形式则更为复杂,允许传递参数、执行跳转等操作,其语法如下:
__asm__ [volatile] [goto] (AssemblerTemplate [ : OutputOperands ] [ : InputOperands ] [ : Clobbers ] [ : GotoLabel