91精品一区二区三区久久久久久_欧美一级特黄大片色_欧美一区二区人人喊爽_精品一区二区三区av

位置:51電子網 » 技術資料 » EDA/PLD

在c/c++代碼中嵌入匯編指令

發布時間:2008/12/23 0:00:00 訪問次數:1728

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

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

  在c/c++程序中使用內嵌的匯編指令應注意以下事項。

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

  其中,(f(),z)為c/c++表達式

  如果在指令中使用物理寄存器,則應該保證該寄存器不會被編譯器在計算表達式值時破壞。例如,在下面的代碼段中,編譯器通過程序調用來計算表達式x/y的值。在這個過程中編譯器破壞了寄存器r2、r3、ip、lr的值;更新了cpsr寄存器的nzcv條件標志位;并在寄存器r0中返回表達式的商,在寄存器ri中返回表達式的余數。這時程序中寄存器r0的數據就丟掉了。

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

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

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

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

  歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)



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

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

  在c/c++程序中使用內嵌的匯編指令應注意以下事項。

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

  其中,(f(),z)為c/c++表達式

  如果在指令中使用物理寄存器,則應該保證該寄存器不會被編譯器在計算表達式值時破壞。例如,在下面的代碼段中,編譯器通過程序調用來計算表達式x/y的值。在這個過程中編譯器破壞了寄存器r2、r3、ip、lr的值;更新了cpsr寄存器的nzcv條件標志位;并在寄存器r0中返回表達式的商,在寄存器ri中返回表達式的余數。這時程序中寄存器r0的數據就丟掉了。

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

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

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

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

  歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)



相關IC型號

熱門點擊

 

推薦技術資料

聲道前級設計特點
    與通常的Hi-Fi前級不同,EP9307-CRZ這臺分... [詳細]
版權所有:51dzw.COM
深圳服務熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網安備44030402000607
深圳市碧威特網絡技術有限公司
付款方式


 復制成功!
宣威市| 蕉岭县| 临江市| 洛南县| 刚察县| 舞阳县| 陇川县| 榆中县| 新巴尔虎右旗| 阿拉善盟| 广宁县| 高青县| 富蕴县| 陇川县| 同江市| 滦南县| 郑州市| 镇沅| 乐清市| 新疆| 永济市| 天门市| 秦皇岛市| 凤阳县| 西充县| 贺州市| 闻喜县| 卢龙县| 疏勒县| 迁安市| 南丹县| 虞城县| 霍山县| 湾仔区| 桃江县| 太和县| 乐东| 日照市| 固阳县| 镇巴县| 深圳市|