GNU內(nèi)聯(lián)匯編
內(nèi)聯(lián)匯編即在C中直接使用匯編語句進(jìn)行編程,使程序可以在C程序中實現(xiàn)C語言不能完成的一些工作,例如,在下面幾種情況中必須使用內(nèi)聯(lián)匯編或嵌入型匯編
- 程序中使用飽和算術(shù)運(yùn)算(Saturating Arithmetic)
- 程序需要對協(xié)處理器進(jìn)行操作
- 在C程序中完成對程序狀態(tài)寄存器的操作
__asm__ __volatile__("asm code":output:input:changed registers);
Note:
- 使用__asm__和__volatile__表示編譯器將不檢查后面的內(nèi)容,而是直接交給匯編器。
- 如果希望變壓器你優(yōu)化,__volatile__可以不加
- 沒有asm code也不能省略""
- 沒有前面的和中間的部分,不可以相應(yīng)的省略:
- 沒有changed 部分,必須相應(yīng)的省略:
- 最后的;不能省略,對于C語言來說這是一條語句
- 匯編代碼必須放在一個字符串內(nèi),且字符串中間不能直接按回車換行,可以寫成多個字符串,注意中間不能有任何符號,這樣就會將兩個字符串合并為一個
- 指令之間必須要換行,還可以使用\t使指令在匯編中保持整齊
asm code
"mov r0, r0\n\t" "mov r1,r1\n\t" "mov r2,r2"
output(asm->C)
:"constraint" (variable)
"constraint"用于定義variable的存放位置:
r表示使用任何可用的寄存器
m表示使用變量的內(nèi)存地址
+可讀可寫
=只寫
&表示該輸出操作數(shù)不能使用輸入部分使用過的寄存器,只能用"+&"或"=&"的方式使用
input(C->asm)
:"constraint" (variable/immediate)
"constraint"用于定義variable的存放位置:
r表示使用任何可用的寄存器(立即數(shù)和變量都可以)
m表示使用變量的內(nèi)存地址
i表示使用立即數(shù)
例子
int a=100,b=200; int result;
__asm__ __volatile_
延伸閱讀
- ssh框架
2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖
2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe
2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】
2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞
2017-07-26
- 從棧不平衡問題 理解 calling convention
2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明
2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解
2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析
2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二)
2017-07-26
學(xué)習(xí)是年輕人改變自己的最好方式