999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

匯編語言與C語言混合編程的接口技術

2013-04-29 09:08:16金微
無線互聯科技 2013年9期

金微

摘 要:隨著網絡與通信技術的發展,正在涌現出大量新的嵌入式系統,通常情況用C或者C++完成大部分的編程任務,僅有初始化部分用匯編語言完成。本文主要研究匯編語言和C語言混合編程,在當前程序開發領域提供了新的途徑。

關鍵詞:匯編程序;C語言;編排技術

1 引言

在平常編寫程序時,我們一般都希望選擇C、Pascal、Basic等這樣的高級語言來編寫,高級語言由于有編譯器的支持,它們的語法更接近于自然語言,表達能力強,使用靈活,具有強大的庫函數,更重要的是高級語言與機器無關,可移殖性較好,這樣使程序開發周期比較短,省時省力。為了提高程序運行速度,或直接訪問硬件,用匯編語言編程可以提高程序的運行效率。為了既能縮短程序開發周期,又能保證程序的執行效率,較好的解決辦法是程序的框架或主體部分用C語言編寫,要求執行效率高的部分用匯編語言編寫。這里就涉及到了混合編程的問題,這種混合編程的方法將C語言和匯編語言的優點結合起來,所以成為目前單片機開發最流行的編程方法?;旌暇幊痰年P鍵是解決好高級語言與匯編語言的接口問題,可采用兩種方法:一是使用嵌入式匯編,即在高級語言的語句中直接使用匯編語句,這種方法比較簡潔直觀,但功能較弱;另一種方法是獨立編程,分別產生各自的目標文件,然后經過連接,形成一個完整的程序。

2 匯編語言和C語言程序的變量相互調用

在一個工程中,一般都會由多個匯編文件和多個C/C++程序文件有機組成。在這些匯編文件和C/C++文件之間就存在變量相互訪問和函數相互調用的問題。內嵌匯編不用單獨編輯匯編語言文件,比較簡潔,但是有諸多限制,當匯編的代碼較多時一般放在單獨的匯編文件中。這時就需要在匯編和C之間進行一些數據的傳遞,最簡便的辦法就是使用全局變量。

2.1 匯編程序中訪問C程序變量

在C/C++程序中聲明的全局變量可以被匯編程序通過地址間接訪問。具體訪問方法/步驟如下:

①C/C++程序中聲明全局變量;②在匯編程序使用IMPORT/EXTERN偽指令聲明引用該全局變量;③使用LDR偽指令讀取該變量的內存地址;④根據該數據的類型使用相應的LDR或STR指令讀取或設置該變量的值。對于無符號變量,使用LDRB/STRB訪問char;使用LDRH/STRH訪問short;使用LDR/STR訪問integer。對于有符號數,使用LDRSB/LDRSH。

在匯編的源程序中調用C語言風格的字符串需要使用IMPORT偽操作。IMPORT相當于C語言中的extern關鍵字,告訴編譯器引用的符號不是在本文件中定義的,而是在其他的源文件中定義的。

偽操作的格式:

IMPORT symbol[,WEAK]

symbol是聲明的符號的名稱;[,WEAK]指示編譯器如果發現symbol在所有的源文件中都沒有找到,那么它也不會產生任何的錯誤信息。

2.2 C程序中訪問匯編程序變量

在匯編程序中聲明的數據可以被C/C++程序所訪問,具體訪問方法/步驟是:在匯編程序中用EX-PORT/GLOBAL偽指令聲明該符號為全局標號,可以被其他文件應用;C/C++程序中定義相應數據類型的指針變量;對該指針變量賦值為匯編程序中的全局標號,利用該指針訪問匯編程序中的數據。

3 匯編語言和C語言程序相互調用

3.1 在C程序中調用匯編函數

在C程序中調用匯編函數一般情況下,在C中要調用一個匯編編寫的函數,需要首先在C語言中聲明此函數的函數原型,同時C語言希望所有的外部標號均以下劃線/_0開頭,如果匯編模塊中定義的函數及變量準備供C調用,應以下劃線開頭。如若有函數F_Sub,要定義為供C調用的函數,在匯編程序中應定義為PUBLIC _F_Sub。因為C語言區別對待大小寫字母,所以在編寫準備與C模塊相連接的匯編模塊時,應該注意符號名的大小寫,以便保持一致。以下是在C中調用匯編程序的實例:

//C語言主函數main()

void F_Sub(void); //聲明要調用的函數的函數原型,此函數無參數傳遞

intmain(void){

while(1)

F_Sub(); //調用匯編函數

return 0;

}

//匯編子函數F_Sub()

.CODE

. PUBLIC _F_Sub

_F_Sub:

NOP

RETF

以上程序在IDE集成開發環境下編譯連接后即可運行。

3.2 在匯編程序中調用C函數

在匯編函數中要調用C語言的子函數,應該根據C函數原型所要求的參數類型,分別把參數壓入堆棧后,再調用C函數。調用結束后還須再進行彈棧,以恢復調用C函數前的堆棧指針。以下是匯編調用C函數的。

例如下面的程序,利用函數調用形式輸出字符串″Hello world e″

Extern void display(void)L

Main()

{

display()L

}

.model small

.data

string db ″Hello world e$″

.code

public _display

_display proc

mov ah,9

mov dx,offset string

int 21h

ret

_display endp

end

說明:①在C程序中使用關鍵字″extern″對函數作顯式說明;②對不同的存儲模式要選用不同的匯編語言格式。當C程序為微型、小型、緊湊型模式時,匯編用近過程;當C程序為中型、大型、巨型模式時,匯編用遠過程;③匯編程序取C的參數。遠過程返回地址占四個字節,BP壓入占二字節,所以第一個參數在BP+6所指向的單元,而近過程第一個參數在BP+4所指向的單元;④匯編程序中寄存器的保護。TurboC允許子過程使用SI 和DI存放局部變量,當寄存器變量多于兩個時,多余部分會自動轉到堆棧中存儲。因此,匯編過程的格式為:

PUSH BP

MOV BP,SP

PUSH DI

PUSH SI…

…………

…………

…………

POP SI

POP DI

POP BP

RET

⑤返回值。每種C語言的數據類型都有一個標準的返回位置,一般在AX (微型、小型、緊湊型模式)或DX:AX(中型、大型、巨型模式)中,如:char,unsigned char,short int等,返回值位置為AX,且返回數據必須放置在RET指令之前。匯編子程序要定義為遠過程,并用public偽指令把過程名定義為公共。

4 結束語

本文研究了匯編語言與C語言混合編程的編程問題,重點對編程時C語言與匯編語言和C語言變量與程序的相互調用問題進行了分析,并給出了實例。當采用兩種或兩種以上的編程語言組合編程,彼此相互調用,進行參數傳遞,是一種有效的程序設計方法。這種方法可以發揮各種語言的優勢和特點,充分利用現有的多種實用程序、庫程序等,使軟件的開發周期大大縮短,是當前程序接口技術的一個重要研究和應用領域。

[參考文獻]

[1]沈美明,溫冬嬋.IBM-PC匯編語言程序設計[M].北京:清華大學出版社, 2001.

[2]周學毛.匯編語言程序設計[M].北京:高等教育出版社,2002.

[3]張永,黃建宇,劉治生.C語言與匯編語言混合編程的研究與實現[J].計算機與數字工程,2006.

主站蜘蛛池模板: 中文字幕色站| 国产成人综合日韩精品无码首页| 亚洲天堂精品在线观看| 免费人成网站在线高清| 国产午夜一级毛片| 黄片在线永久| 无码免费的亚洲视频| 欧美一级黄片一区2区| 99久久精品无码专区免费| 日韩精品专区免费无码aⅴ| 永久免费AⅤ无码网站在线观看| 72种姿势欧美久久久久大黄蕉| www.99精品视频在线播放| 国产美女丝袜高潮| 欧美日韩午夜| 亚洲av色吊丝无码| 97视频在线精品国自产拍| 日韩高清在线观看不卡一区二区| 制服丝袜 91视频| 免费国产好深啊好涨好硬视频| 久久久国产精品免费视频| 国产精品福利在线观看无码卡| 在线亚洲精品福利网址导航| 婷婷综合在线观看丁香| 久久精品亚洲专区| 波多野结衣中文字幕久久| 欧美成人午夜影院| 91人妻日韩人妻无码专区精品| 美女被操91视频| 午夜激情婷婷| 一本久道久综合久久鬼色| 亚洲色婷婷一区二区| 欧美黑人欧美精品刺激| 一级毛片免费观看久| 欧美日韩免费在线视频| 亚洲日韩高清在线亚洲专区| 国产99久久亚洲综合精品西瓜tv| 亚洲A∨无码精品午夜在线观看| 日韩在线欧美在线| 精品综合久久久久久97| 精品午夜国产福利观看| 国产高潮流白浆视频| 免费看美女自慰的网站| 精品视频一区二区三区在线播| 精品人妻无码区在线视频| 99久久精品免费看国产电影| 亚洲日韩久久综合中文字幕| 台湾AV国片精品女同性| 欧美日韩亚洲国产主播第一区| 国产网友愉拍精品视频| 欧美一级爱操视频| 久久永久精品免费视频| 女人18毛片一级毛片在线 | 2021国产v亚洲v天堂无码| av性天堂网| 国产原创自拍不卡第一页| 久久久亚洲色| 国产福利在线免费| 国产精品永久不卡免费视频| 国产成年无码AⅤ片在线| 欧美午夜小视频| A级毛片无码久久精品免费| 亚洲欧洲自拍拍偷午夜色无码| av无码一区二区三区在线| 久久香蕉国产线看观看精品蕉| 麻豆精品在线| 欧美视频在线第一页| 日本高清免费不卡视频| 欧洲精品视频在线观看| 欧美日韩国产精品va| 国产亚洲视频在线观看| 欧美综合成人| 国产精品中文免费福利| 国产亚洲视频在线观看| 亚洲一区毛片| 日韩午夜片| 日韩精品少妇无码受不了| 色成人综合| 91在线视频福利| 午夜国产小视频| 欧美在线免费| 91在线播放国产|