1. 程式人生 > >基於組合語言與c/c++語言混合程式設計的程式設計研究(一)

基於組合語言與c/c++語言混合程式設計的程式設計研究(一)

組合語言的特點在於佔用的空間小,執行的速度快,是面向機器的一種語言,在某些場合具有無可替代的作用。其不足之處在於較為高階的語言程式編寫存在一定難度,在處理資料時這一點體現的更加明顯。C++是一種高階語言,功能豐富,表達靈活,開發高效,在應用性方面要勝過組合語言。但是在考慮到執行速度,佔用空間的前提下,C++語言則不具有優勢。

 一、兩種語言進行混合程式設計的時候主要有以下幾個方面的約定。

 C++與組合語言進行程式設計的時候,首先要採用一致的呼叫協議,C++有三種呼叫協議。其次是入口及返回引數的確定,在C++中所有的呼叫都是32位的偏移地址。最後是要宣告公用函式名與變數名。 C語言在調用匯編語言時識別符號前要新增下劃線,相互呼叫的時候,組合語言中識別符號要依照C++語言的習慣。 宣告約定,對於需要呼叫的外部函式,變數都進行相應的說明,識別符號是為了在其他模組可見。對於BP,DS,CS,SS,SP,在使用並改變其值時候,需要進行保護。兩種程式的語言在儲存模式方面要相同。儲存模式相同就會產生相容的呼叫及返回型別。 最後一點是傳遞引數的確定,壓入最棧與實引數表引數的順序是相反的。

 二、混合程式設計的方法

兩種語言進行混合程式設計的方式主要有兩種,一種是在C++源程式中直接插入組合語言程式碼,此種方式也被稱之為潛入式彙編。另一種則是在程式中呼叫外部語言。 對於潛入式彙編而言,在C++源程式中需要的地方插入彙編指令,並在嵌入的彙編指令加上相應的關鍵字。C++中內嵌組合語言,在VisualC++6.0操作的時候,嵌入彙編指令,需要使用關鍵字。其中在asm中的組彙編指令可以有標號,C++中的語句以及彙編指令也可以跳轉,跳轉位置是該組彙編指令中的標號或者是指令組之外的標號。那麼,除此之外,asm所帶的彙編指令呼叫的只能是無過載的全域性C++函式,並且對函式的型別有一定的要求。以C++實現相同次數的減法為例,通過對兩個程式的運算比較,採用嵌入式彙編的速度要比單純的採用C++語句快,從時間上計算,前者與後者相比,能夠節約百分之三十的時間。對於實用性較高的工業領域,以及存在大量計算的開發軟體中,採用兩種語言進行混合程式設計的方法可以大大提升程式執行時的速度。