資料介紹
本文將討論如何將匯編語言程序代碼整合到C語言中,以最大化性能以及程序設計人員生產力,內容涵蓋了編譯器慣例(convention)、內嵌(inlining)、內嵌函數(intrinsic)、緩存器連結(register binding)和除錯策略。?
????? 隨著DSP處理器性能的提升以及編譯器最佳化技術的進步,曾經紅極一時、僅用匯編語言編寫DSP應用程序的作法已逐漸被淘汰。今天,幾乎每個DSP應用程序都使用C語言程序代碼和匯編程序碼混合的方式。對于一些性能需求極高的關鍵功能,DSP工程師會繼續使用高度最佳化的匯編程序碼;而一些次要的功能現在也使用C語言編寫,使程序代碼更容易維護和移植。對于C語言和匯編程序碼的結合,每位DSP工程師都需要掌握特殊的工具和方法。
?????? 眾所皆知,匯編語言編碼具有更高的性能優勢,而用C語言編碼則較容易且速度也更快。為了解其中原因,以下我們進一步比較匯編語言編碼與C語言編碼的優缺點:
匯編語言編碼的優點:?
????? ?匯編語言編碼可以充分利用處理器的獨特指令以及各種專門的硬件資源。而C語言程序代碼是通用型程序代碼,必須支持各種硬件平臺,因此很難支持特殊平臺程序代碼。?
????? ?匯編程序設計人員通常對應用程序非常熟悉,可以作出編譯器無法作出的假設。?
????? ?匯編程序設計人員可以發揮人類的創造性;而再先進的編譯器也只是一個自動化的程序。
匯編語言編碼的缺點:
????? ?匯編程序設計人員必須解決耗時的機器級問題,如緩存器分配和指令排程。若使用C語言程序代碼,這些問題可以由編譯器解決。?
????? ?使用匯編語言編碼的程序設計人員必須了解DSP架構及其指令集的專業知識;而C語言編碼只需要掌握相當普及的C語言知識。?
????? ?若使用匯編語言,將應用程序從一個平臺移植到另一個平臺非常困難也相當耗時;而C語言應用程序的移植相對而言非常容易。
????? 圖1顯示了如何利用專用硬件機制來獲得高度最佳化的匯編程序碼。左邊的C語言編碼利用模塊算法設計出一個循環緩沖區P1;右邊高度最佳化的匯編程序碼中,等效的緩沖區是利用CEVA-TeakLite-III DSP核心的模塊運算機制(Modulo Mechanism)設計產生的。只要緩沖區指標(本例中的r0)有更新,模塊運算機制便會自動執行模塊運算。這種運算與指針更新在同一個周期發生,因此匯編程序碼比C語言程序代碼更加高效,可為模塊運算產生獨立的指令。?
?
圖1:右邊的CEVA-TeakLite-III匯編程序碼可以建置成左邊的C語言程序代碼。?
為DSP應用選擇C/匯編程序碼?
????? 混合使用的問題就在于該如何劃分C語言程序代碼和匯編程序碼的界限,而答案取決于剖析器提供的性能分析結果。然而在使用剖析器之前,DSP工程師需要為應用程序定義清晰的對象,一些典型的對象包括循環數、程序代碼大小和數據大小。一旦這些對象確定后,所有應用程序都應該先以C語言編寫和制作,隨后使用剖析器來分析性能。?
????? 在一些極端情況下,如控制應用,用C語言層級的編碼就足夠了;但大多數情況下,原始C語言層級應用程序版本不會遵從一個或多個對象,這也意味著需要使用一些匯編程序碼來完成。在求助于匯編語言編碼之前,C語言編碼可提供許多方法來提高性能,但這些方法不屬于本文討論的范疇。假設所有C語言級的方法全用完了,并且準備使用匯編語言編碼,這時強烈建議將原始C語言程序代碼保存起來。這樣不僅方便除錯,而且一旦條件許可(比如轉移到更強大的平臺)還可以回復原始的C語言。
????? 程序代碼中的匯編語言部份應盡可能維持在最少,這樣便能分析從剖析器得到的性能結果,并定義應用程序中的關鍵函數。關鍵函數會占用大部份執行時間,必須用匯編語言重寫才能滿足性能對象。當兩到三個最關鍵的函數重寫后,需要重新進行性能測量,若應用程序仍然不能滿足對象需求,那么必須使用匯編語言定義并重寫額外的關鍵函數,這個過程需要不斷地重復直到滿足性能對象需求為止。
匯編語言設計師的編譯器考慮?
????? 在編寫會與C語言程序代碼結合的匯編程序碼時,匯編程序設計人員必須了解編譯器的慣例和假設。其中有個重要的編譯器慣例是函數呼叫慣例,也稱為函數參數傳遞慣例。這個慣例描述了編譯器如何在一個函數呼叫另一個函數時傳遞參數。為了使匯編語言函數能被C語言函數成功呼叫;反之亦然;匯編語言函數必須截取參數,然后將參數發送到由函數呼叫慣例定義的硬件資源上,通常為緩存器或堆棧內存。
????? 匯編程序設計人員還必須了解編譯器的緩存器使用慣例。這些慣例將硬件緩存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)緩存器。編譯器假設被呼叫者保存緩存器在函數呼叫過程中保持不變的值,若匯編程序設計人員希望使用這種緩存器,他們必須先將緩存器的值備份,然后在返回到C語言程序代碼之前恢復這些緩存器的內容;相反的,被呼叫者使用緩存器被認為在函式呼叫過程中不會保持一定的值。這意味著匯編程序設計人員使用這些緩存器之前無需進行備份,不過他們必須記住,當匯編語言函數呼叫C語言函數時,被呼叫者可以對這些緩存器進行覆寫。?
??
????? 隨著DSP處理器性能的提升以及編譯器最佳化技術的進步,曾經紅極一時、僅用匯編語言編寫DSP應用程序的作法已逐漸被淘汰。今天,幾乎每個DSP應用程序都使用C語言程序代碼和匯編程序碼混合的方式。對于一些性能需求極高的關鍵功能,DSP工程師會繼續使用高度最佳化的匯編程序碼;而一些次要的功能現在也使用C語言編寫,使程序代碼更容易維護和移植。對于C語言和匯編程序碼的結合,每位DSP工程師都需要掌握特殊的工具和方法。
?????? 眾所皆知,匯編語言編碼具有更高的性能優勢,而用C語言編碼則較容易且速度也更快。為了解其中原因,以下我們進一步比較匯編語言編碼與C語言編碼的優缺點:
匯編語言編碼的優點:?
????? ?匯編語言編碼可以充分利用處理器的獨特指令以及各種專門的硬件資源。而C語言程序代碼是通用型程序代碼,必須支持各種硬件平臺,因此很難支持特殊平臺程序代碼。?
????? ?匯編程序設計人員通常對應用程序非常熟悉,可以作出編譯器無法作出的假設。?
????? ?匯編程序設計人員可以發揮人類的創造性;而再先進的編譯器也只是一個自動化的程序。
匯編語言編碼的缺點:
????? ?匯編程序設計人員必須解決耗時的機器級問題,如緩存器分配和指令排程。若使用C語言程序代碼,這些問題可以由編譯器解決。?
????? ?使用匯編語言編碼的程序設計人員必須了解DSP架構及其指令集的專業知識;而C語言編碼只需要掌握相當普及的C語言知識。?
????? ?若使用匯編語言,將應用程序從一個平臺移植到另一個平臺非常困難也相當耗時;而C語言應用程序的移植相對而言非常容易。
????? 圖1顯示了如何利用專用硬件機制來獲得高度最佳化的匯編程序碼。左邊的C語言編碼利用模塊算法設計出一個循環緩沖區P1;右邊高度最佳化的匯編程序碼中,等效的緩沖區是利用CEVA-TeakLite-III DSP核心的模塊運算機制(Modulo Mechanism)設計產生的。只要緩沖區指標(本例中的r0)有更新,模塊運算機制便會自動執行模塊運算。這種運算與指針更新在同一個周期發生,因此匯編程序碼比C語言程序代碼更加高效,可為模塊運算產生獨立的指令。?
?
圖1:右邊的CEVA-TeakLite-III匯編程序碼可以建置成左邊的C語言程序代碼。?
為DSP應用選擇C/匯編程序碼?
????? 混合使用的問題就在于該如何劃分C語言程序代碼和匯編程序碼的界限,而答案取決于剖析器提供的性能分析結果。然而在使用剖析器之前,DSP工程師需要為應用程序定義清晰的對象,一些典型的對象包括循環數、程序代碼大小和數據大小。一旦這些對象確定后,所有應用程序都應該先以C語言編寫和制作,隨后使用剖析器來分析性能。?
????? 在一些極端情況下,如控制應用,用C語言層級的編碼就足夠了;但大多數情況下,原始C語言層級應用程序版本不會遵從一個或多個對象,這也意味著需要使用一些匯編程序碼來完成。在求助于匯編語言編碼之前,C語言編碼可提供許多方法來提高性能,但這些方法不屬于本文討論的范疇。假設所有C語言級的方法全用完了,并且準備使用匯編語言編碼,這時強烈建議將原始C語言程序代碼保存起來。這樣不僅方便除錯,而且一旦條件許可(比如轉移到更強大的平臺)還可以回復原始的C語言。
????? 程序代碼中的匯編語言部份應盡可能維持在最少,這樣便能分析從剖析器得到的性能結果,并定義應用程序中的關鍵函數。關鍵函數會占用大部份執行時間,必須用匯編語言重寫才能滿足性能對象。當兩到三個最關鍵的函數重寫后,需要重新進行性能測量,若應用程序仍然不能滿足對象需求,那么必須使用匯編語言定義并重寫額外的關鍵函數,這個過程需要不斷地重復直到滿足性能對象需求為止。
匯編語言設計師的編譯器考慮?
????? 在編寫會與C語言程序代碼結合的匯編程序碼時,匯編程序設計人員必須了解編譯器的慣例和假設。其中有個重要的編譯器慣例是函數呼叫慣例,也稱為函數參數傳遞慣例。這個慣例描述了編譯器如何在一個函數呼叫另一個函數時傳遞參數。為了使匯編語言函數能被C語言函數成功呼叫;反之亦然;匯編語言函數必須截取參數,然后將參數發送到由函數呼叫慣例定義的硬件資源上,通常為緩存器或堆棧內存。
????? 匯編程序設計人員還必須了解編譯器的緩存器使用慣例。這些慣例將硬件緩存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)緩存器。編譯器假設被呼叫者保存緩存器在函數呼叫過程中保持不變的值,若匯編程序設計人員希望使用這種緩存器,他們必須先將緩存器的值備份,然后在返回到C語言程序代碼之前恢復這些緩存器的內容;相反的,被呼叫者使用緩存器被認為在函式呼叫過程中不會保持一定的值。這意味著匯編程序設計人員使用這些緩存器之前無需進行備份,不過他們必須記住,當匯編語言函數呼叫C語言函數時,被呼叫者可以對這些緩存器進行覆寫。?
??
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 單片機C語言和匯編語言混合編程實例詳解 224次下載
- 如何使用DSP匯編語言實現高精度的三角函數 7次下載
- TMS320C6000匯編語言攻擊V7.6用戶指南 9次下載
- TMS320C28X處理器匯編語言工具用戶指南 30次下載
- 匯編語言程序設計自學教程 40次下載
- C語言和匯編語言混合編程方法和C語言中斷處理方法 36次下載
- 匯編語言學習課件_匯編語言程序組織 0次下載
- 匯編語言例 33次下載
- Assemble匯編語言設計技術 0次下載
- Linux中的匯編語言 55次下載
- 匯編語言自學教程
- DSP匯編語言編程基礎
- MSP430單片機C語言和匯編語言混合編程
- 實驗二DSP匯編語言編程基礎
- 匯編語言程序設計下載 0次下載
- 匯編語言結構與8086概述 2521次閱讀
- 匯編語言的變量與編碼是什么 1453次閱讀
- 計算機的機器語言和匯編語言與高級語言的詳細資料介紹 5610次閱讀
- C和匯編代碼結合 是實現DSP軟件設計的最好方式 2723次閱讀
- 單片機 | 基礎匯編語言編程實例 9876次閱讀
- 匯編和C語言相結合的51單片機編程技巧 5662次閱讀
- 單片機匯編語言常見錯誤知識點分析 6449次閱讀
- 單片機閃爍燈匯編語言源代碼大全(四款閃爍燈的匯編語言源代碼) 2.5w次閱讀
- 單片機流水燈匯編語言源代碼大全(六款流水燈匯編語言源代碼) 5.4w次閱讀
- 高級語言和匯編語言_機器語言的區別 3w次閱讀
- 學習開發環境和編程語言:匯編語言和C語言的比較 8893次閱讀
- C語言與匯編語言相互結合的嵌套匯編語言 3419次閱讀
- 跑馬燈實驗用匯編語言和C51語言做出的不同效果 3714次閱讀
- 單片機編程之匯編語言基礎-常用指令和程序模式 1.5w次閱讀
- 匯編語言的結構化設計及其在俄羅斯方塊中的應用 2934次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1489次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 91次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關電源原理及各功能電路詳解
- 0.38 MB | 9次下載 | 免費
- 6基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
- 7基于單片機和 SG3525的程控開關電源設計
- 0.23 MB | 3次下載 | 免費
- 8基于單片機的紅外風扇遙控
- 0.23 MB | 3次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30319次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537791次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多