音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

在c/c++代碼中嵌入?yún)R編指令

出處:jidu2002 發(fā)布于:2008-12-22 16:38:05

  在ARM C語言程序中使用關鍵詞 ̄asm來標識一段匯編指令程序,其格式如下。

  其中,asm后面的括號中必須是一個單獨的字符串,該字符串中不能包含注釋語句。

  在C/C++程序中使用內(nèi)嵌的匯編指令應注意以下事項。

  在匯編指令中,逗號(,)用作分隔符。因此如果指令中的C/C++表達式中包含有逗號(,),則該表達式應該被包含在括號中。例如:

  其中,(f(),Z)為C/C++表達式

  如果在指令中使用物理寄存器,則應該保證該寄存器不會被編譯器在計算表達式值時破壞。例如,在下面的代碼段中,編譯器通過程序調(diào)用來計算表達式x/y的值。在這個過程中編譯器破壞了寄存器R2、R3、IP、LR的值;更新了CPSR寄存器的NZCV條件標志位;并在寄存器R0中返回表達式的商,在寄存器RI中返回表達式的余數(shù)。這時程序中寄存器R0的數(shù)據(jù)就丟掉了。

  這種情況下可以用C變量來代替第1條指令中的物理寄存器RO,如下所示。

  這時編譯器將會為變量cvar分配合適的寄存器,從而避免沖突的發(fā)生。如果編譯器不能分配合適的寄存器,那么它將錯誤。例如,在下面的代碼段中,由于編譯器將會展開ADD指令,在展開時會用到P寄存器,從而破壞了第1條指令為IP寄存器賦的值,這時編譯器將錯誤。

  不要使用物理寄存器去引用一個C變量。比如,在下面的例子中,用戶可能認為進入子程序example1中后,參數(shù)x的值保存在寄存器RO中,因而在內(nèi)嵌的匯編指令中直接使用寄存器RO,返回結(jié)果。實際上,編譯器認為子程序中沒有作任何有意義的操作,于是將該段匯編代碼優(yōu)化掉了,從而返回的結(jié)果與輸八的參數(shù)值相同,并沒有做加1操作。

  對于內(nèi)嵌匯編器可能會用到的寄存器,編譯器自己會保存和恢復這些寄存器,用戶不用保存和恢復這些寄存器。除常量寄存器CPSR和寄存器SPSR外,其他寄存器必須先賦值后讀取,否則編譯器將會報錯。例如,在下面的例子中,第1條指令在沒有給寄存器R0賦值前讀取其值,這是錯誤的;而一條指令恢復寄存器R0的值,也是沒有必要的。

  



  
關鍵詞:在c/c++代碼中嵌入?yún)R編指令c++

版權(quán)與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關法律責任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!