原文鏈接:http://www.orlion.ga/776/
用C寫的程序效率可能不如匯編,而且有些平台相關的指令必須手寫,例如x86是端口I/O,而c語言就沒有這個概念,所以in/out指令必須用匯編來寫。
gcc提供了一種擴展寫法可以在C代碼中試用內聯匯編,最簡單的格式是__asm__("assembly code"); , 例如__asm__("nop");,nop這條指令讓CPU空轉一個周期,如果需要執行多條指令則用\n\t將各條指令隔開,例如:
__asm__("movl $1, %eax\n\t" "movl $4, %ebx\n\t" "int $0x80");
通常c代碼中的內聯匯編需要和c變量建立關聯,需要用到完整的內聯匯編樣式:
__asm__(assembler template : output operands /* optional */ : input operands /* optional */ : list of clobbered registers /* optional */ );
這種格式由四部分組成,第一部分是匯編指令,和上面的例子一樣,第二部分和第三部分是約束條件,第二部分指示匯編指令的運算結果要輸出到那些c操作數中,c操作數應該是左值表達式,第三部分指示匯編指令需要從那些c操作數獲取輸入,第四部分是在匯編指令中被修改過的寄存器列表,指示編譯器哪些寄存器的值在執行這條__asm__語句時會改變。後三個部分都是可選的,如果沒有就空著值寫個":"號,例如: