在從事嵌入式c語言的開發過程中為了提高效率經常會用到c語言的內聯彙編。在對dsp程式做優化時,將部分c**變為彙編指令可以大大提高程式效率。c語言簡潔易讀,容易組織規模較大的**,而彙編效率高,gcc編譯器提供了一種擴充套件語法可以在c**中使用內聯彙編(inline assembly)。其用__asm__來表示彙編指令。
__asm__其完整的內聯格式為:asm(」彙編語句:(=r)輸出:輸入:暫存器集合」),其中r為限定符,=為輸出指示,『r』代表暫存器,『m』代表 記憶體變數,『f』為浮點暫存器,破壞描述符通知編譯器我們使用了哪些暫存器或記憶體,由逗號隔開的字串組成,如「%eax,%ebx」。然後一些內聯彙編指令並不需要要這種完整的格式,比如最常用的__asm__(「nop」),它指cpu的乙個機器週期內什麼也不執行,主要用於彙編中跳轉指令、乘法指令等指令後執行若干指令的延時。
下面舉例說明內聯彙編的使用:
#include
int main()
**中%1,%0指後面約束變數的順序(本例中%0指b,%1指a), 「r」(a)由編譯器為輸入變數a分配暫存器,注意若是a前的r變為m,則代表為a分配記憶體,**將a的值傳給b。
#include
int main()
C語言內聯彙編
開門見山,組合語言和c語言混合程式設計可分為兩大類 單獨的彙編 檔案與單獨的c語言分別編譯成目標檔案後,一起鏈結成可執性檔案 在c語言中嵌入彙編 直接編譯生成可執行程式 今天主要介紹第二種 內聯彙編稱為inline assembly,gcc支援在c 中直接嵌入彙編 所以稱為gcc inline as...
AT T學習筆記彙編之內聯c語言
asm assembly code ansi c將asm用於其它用途,用 asm 替換 在asm後面加上 volatile可以禁止編譯器優化 asm volatile pusha n tpopa asm volatile pushl 1 n t 擴充套件asm asm asm code output...
在C中使用內聯彙編
在visual c 使用內聯彙編用到的是 a 關鍵字,這個關鍵字有兩種使用方法 1.簡單 a 塊 a 2.在每條彙編指令之前加 a 關鍵字 a mov al,2 a mov dx,0xd007 a out al,dx 因為 a 關鍵字是語句分隔符,因此你可以把彙編指令放在同一行 a mov al,2...