c語言與匯編語言混合編程的方法

c語言與匯編語言混合編程的方法

ID:33589165

大?。?36.16 KB

頁數:10頁

時間:2019-02-27

c語言與匯編語言混合編程的方法_第1頁
c語言與匯編語言混合編程的方法_第2頁
c語言與匯編語言混合編程的方法_第3頁
c語言與匯編語言混合編程的方法_第4頁
c語言與匯編語言混合編程的方法_第5頁
資源描述:

《c語言與匯編語言混合編程的方法》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。

1、維普資訊http://www.cqvip.com1993矩化工電子計算第2期C語言與匯編語言混合編程的方法f/1)(南京犬李葛于如麗頂吾學系)摘要本文通過實例闡述了當前較為漉行的兩種c語盲(MicrosoftC和Turboc)與匯編語盲混臺綰程的方法及其有關技術問題.√√關鍵詞迫堤豆內部匯編一、概述C語言是一種高效且有力的語言,而MicrosoftC和TurboC是當前最為流行的兩種C語言的編譯版本,盡管它們能夠產生極快而又極緊湊的目標代碼,然而它們還是不可能達到匯編語盲所生成的高質量的目標碼。在某些特殊應用場合中,還需借助于匯編語言實現一些特定的

2、操作,倒如有些對浮點數操作速度要求極高,還有的函數要求訪問計算機系統的硬件資源或操作系統的某些特定功能,象對某種硬設備進行準確定時等,此時用匯編語言實現就比用C語言較方便且目標質量更高。相反.在用匯編語言編程過程中,有些過程或某些算法的予程序用匯編語言完成較為周難,而用C語言書寫可用C的現有函數,則更為自然且更具商用價值。因此,在虛用開發(fā)中兩種語言的混合使用是經常發(fā)生的。一般而言,在高級語言中使用匯編語言主要有以下幾個原因‘:·提高程序中某些關鍵部分的執(zhí)行速度與效率一·完成高級語言中難以實現或沒有的功能一·縮短程序中某些模塊的目標代碼以減少存儲開銷

3、,·使用匯編語言的通用軟件包·利用別’人已開發(fā)的較為成熟的匯編子程序。注意,C語言與匯編語言混合編程是一項高級技術,為使混合編寫的程序能生成高質而有效的目標代碼.還必須搞清楚宿主計算機的內存儲器組織.操作系統和連接程序(uNK)等一些問題,例如,程序代碼段和數據段的劃分.全局變量的存取,以及連接程序如何將不同模塊中程序段與數據段·(或稱代碼與數據)進行組合,以達到提高程序的執(zhí)行速度和縮短程一.1一維普資訊http://www.cqvip.com序代碼長度等。所有這些問題都與特定的計算機系統有關。本文討論的宿主計算機是運行MDOS的IBMPC及其兼容

4、的系列計算機,而MicrosoftC和TurboC以及匯編程序(MASM)均是該系列上最為流行的編譯程序。二、調用約定所謂調用約定是指在混合語言編程中.使用各種語言編寫程序(包括函觳、過程、子程序甚至全局變量等)時所應共同遵循的一些準則.只有雙方都按照同一個約定來編程才能把它們有效地結合起來t達到相互調用或引用的目的,這些約定包括兩者之間相互傳送參數的方式與順序.寄存器使用以及返回值的方法等。在討論調用約定之前.先介紹一下IBMPC機(cPu為Imel80X86)的內存組織形式.將有助于混合編程的實現。1.內存組織形式與段結構以Imel80X86馓

5、處理器為CPU的IBMPC系列把內存分成若干個段.例如程序代碼段、數據段、堆棧段等,每個段最大可達64kB。段的劃分由CPU中的四個段寄存器(cs,DS,SS,E)來指出。每個段內的偏移量由其它寄存器指出,IP,sI,DI等。于是內存的物理地址由段址和段內偏移量兩部分構成。對于上述段結構的操作.在匯編語言和C語言中都提供了相應的手段.在匯編語言中通過SEGMENT.ENDS和ASSUME兩條偽指令來實現的。sEG—MENT—ENDS的語言格式為{段名SEGMENT(定位方式>(聯合方式>(類型名>;._匯編語句.’i段名NDS其中段名是為該段所起的

6、名字,.匯編程序將為該段分配存儲器的起始地址。程序設計者必須為每一個段(程序段或數據段)取一個名字.并且允許幾個不同的段起相同的名字。定位方式是指該段起始地址的定位對齊方式,連接程序按以下幾種定位方式把聯合后的段連接起來生成目標代碼。定位方式有BYTE(字節(jié))、WoRD(字.2字節(jié),.DWORD(雙字。4’字節(jié)).PARA(節(jié).16字節(jié)),PAGE(頁,256字節(jié)),缺省時為PARA定位方式。聯臺方式是對名字相同l韻段的處理方法,即把程序的不阿模塊中段名相同的段聯合成一個大段放在連續(xù)的內存區(qū)域中。并共用一個段寄存器,聯合時段與段之間仍按各自的定位方

7、式要求.聯臺方式有PUBLIC、STACK、COMMON、MEMORY、AT地址和PRIVATE(不指定方式)六種。各種聯合方式的細節(jié)請參閱匯編語言手冊。段的類型是指給同一種類型源碼(程序或數據)取的名字,連接程序把類型名相同的源碼段放在內存連續(xù)的區(qū)域內,但仍是不同的段。請注意.一般情況下.連接程序所期望的代碼段、敷據段和堆棧段的類型名分別為‘CODE’,‘DATA’和‘STACK’。另外。在匯編語盲中還提供一種段的組合辦法,即利用GROUP曲指令把模塊中不同名的段組合成一個組。并裝入同一個物理段(組的長度不超過6dkB)中。其優(yōu)點可得到較為緊湊且

8、執(zhí)行速度快的代碼。在C編譯程序生成的目標模塊中.也含有與匯編語言中相應的段和組的信息。C源程序中一2一’維普資訊http:

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯系客服處理。