C語言與匯編語言的混合編程概述課件.ppt

C語言與匯編語言的混合編程概述課件.ppt

ID:57044145

大小:520.50 KB

頁數(shù):23頁

時間:2020-07-28

C語言與匯編語言的混合編程概述課件.ppt_第1頁
C語言與匯編語言的混合編程概述課件.ppt_第2頁
C語言與匯編語言的混合編程概述課件.ppt_第3頁
C語言與匯編語言的混合編程概述課件.ppt_第4頁
C語言與匯編語言的混合編程概述課件.ppt_第5頁
資源描述:

《C語言與匯編語言的混合編程概述課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、C語言與匯編語言的混合編程概述南通開放大學1.C51與匯編語言混合編程概述在一個應(yīng)用程序中,根據(jù)每個任務(wù)的具體特點和要求,用不同的編程語言編寫源程序,最后通過編譯/連接器生成一個可執(zhí)行的完整程序,這種編程方式稱為混合編程。匯編語言特點:優(yōu)點:執(zhí)行速度快、效率高、實時性強、與硬件結(jié)合緊密。缺點:編程難度大、可讀性差,不便于移植、開發(fā)時間長。C語言特點:優(yōu)點:編程容易、可移植性強、支持多種數(shù)據(jù)類型,能直接對硬件進行操作,效率高。缺點:實時處理弱于匯編語言,無法準確定時?;旌暇幊烫攸c:效率高、速度快、易于編程、可讀性、可移植性好,使用范圍

2、廣。1.C51與匯編語言混合編程概述(續(xù))單片機程序的編譯過程無論是C語言還是匯編語言,源程序都要被轉(zhuǎn)換成目標代碼(機器語言),單片機才能識別。在單片機混合編程中,C模塊與匯編模塊的接口簡單,分別用C51和A51對源文件進行編譯,然后經(jīng)連接定位器L51產(chǎn)生可下載到程序存儲器的十六進制可執(zhí)行文件。2.C51和A51程序接口基礎(chǔ)C語言與匯編語言程序的連接,在技術(shù)上有兩個問題:一個是C語言程序與匯編語言程序如何相互調(diào)用;另一個是C語言程序和匯編語言程序如何實現(xiàn)相互之間的數(shù)據(jù)傳遞?;旌暇幊讨?,必須約定兩個規(guī)則,即命名規(guī)則和參數(shù)傳遞規(guī)則。C5

3、1函數(shù)名的轉(zhuǎn)換及其命名規(guī)則C51程序模塊編譯成目標文件后,其中的函數(shù)名要依據(jù)其定義的性質(zhì)轉(zhuǎn)換為相應(yīng)不同的函數(shù)名。因此,在C和匯編程序的相互調(diào)用中,要求匯編程序必須服從這種函數(shù)名的轉(zhuǎn)換規(guī)則,否則將無法調(diào)用到所需的函數(shù)甚至出現(xiàn)錯誤。C51中函數(shù)名的轉(zhuǎn)換規(guī)則如表1所示,其匯編符號名全部轉(zhuǎn)換為大寫。2.C51和A51程序接口基礎(chǔ)表1C51中函數(shù)名的轉(zhuǎn)換規(guī)則C51函數(shù)聲明匯編符號名說明voidfunc1(void)FUNC1無參數(shù)傳遞或不含寄存器的函數(shù),名稱不作改變直接轉(zhuǎn)入目標文件中。voidfunc2(char)_FUNC2通過寄存器傳遞參

4、數(shù),函數(shù)名加前綴“_”voidfunc3(void)reentrant_?FUNC3重入函數(shù),通過堆棧傳遞參數(shù),函數(shù)名加前綴“_?”2.C51和A51程序接口基礎(chǔ)一個C51源程序模塊被編譯后,其中的每個函數(shù)以“?PR?函數(shù)名?模塊名”為命名規(guī)則被分配到一個獨立的CODE段。例如,如果模塊“FUNC51”內(nèi)包含一個名為“func”的函數(shù),則其CODE段的名字是“?PR?FUNC?FUNC51”。如果一個函數(shù)包含有data或bit類型的局部變量,編譯器將按“?函數(shù)名?BYTE”或“?函數(shù)名?BIT”命名規(guī)則建立一個data或bit段,它

5、們代表所要傳遞參數(shù)的起始位置,其偏移量為0。這些段是公開的,因而它們的地址可以被其它模塊訪問。這些段被編譯器賦予“OVERLAYABLE”標志,可被L51連接/定位器作覆蓋分析。依據(jù)所使用的存儲器模式,這些段按表2所列規(guī)則命名,在相互調(diào)用時,匯編語言必須服從C51有關(guān)段名的命名規(guī)則。2.C51和A51程序接口基礎(chǔ)表2各種存儲模式下C51函數(shù)段名的命名規(guī)則數(shù)據(jù)段類型段名程序代碼CODE?PR?函數(shù)名?模塊名(所有存儲器模式)局部變量DATA?DT?函數(shù)名?模塊名(SMALL模式)PDATA?PD?函數(shù)名?模塊名(COMPACT模式)X

6、DATA?XD?函數(shù)名?模塊名(LARGE模式)局部bit變量BIT?BIT?函數(shù)名?模塊名(所有存儲器模式)3.C51函數(shù)的參數(shù)傳遞規(guī)則C51中調(diào)用匯編程序時參數(shù)傳遞有兩種方式,一種是通過寄存器傳遞,一種是通過固定存儲區(qū)傳遞。1.通過寄存器傳遞參數(shù)KeilC51規(guī)定,調(diào)用函數(shù)時,通過寄存器最多可傳遞3個參數(shù),余下的通過固定存儲區(qū)傳遞。如果在源程序中采用了編譯控制命令“#pragmaNOREGPARMS”,則所有參數(shù)傳遞都發(fā)生在固定的存儲區(qū)域,所使用的地址空間依賴于所選擇的存儲模式。用寄存器傳遞參數(shù)的函數(shù)在編譯時被C51編譯器在函數(shù)

7、名前加了一個“_”的前綴,用固定存儲區(qū)傳遞參數(shù)的函數(shù)轉(zhuǎn)換成的函數(shù)名沒有下劃線,如表1所示。不同的參數(shù)用到的寄存器不一樣,不同的數(shù)據(jù)類型用到的寄存器也不同。表3是利用寄存器傳遞參數(shù)的規(guī)則。3.C51函數(shù)的參數(shù)傳遞規(guī)則表3C51利用寄存器傳遞參數(shù)規(guī)則參數(shù)類型charintlong/float通用指針第1個參數(shù)R7R6、R7R4-R7R1-R3第2個參數(shù)R5R4、R5無R1-R3第3個參數(shù)R3R2、R3無R1-R3其中,int型和long型數(shù)據(jù)傳遞時,低地址寄存器中放數(shù)據(jù)的高位字節(jié),高地址寄存器中放數(shù)據(jù)的低位字節(jié);float型數(shù)據(jù)滿足IE

8、EE格式,R4中存放階碼和符號位,尾數(shù)按從高位到低位的順序依次存放在寄存器R5、R6和R7中;通用指針的存儲類型存放在R3中,高位在R2,低位在R1如果某一函數(shù)的形式參數(shù)有兩個或更多,當發(fā)生寄存器沖突時,后者改為通過固定存儲區(qū)傳遞。3

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

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

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