匯編語(yǔ)言和C語(yǔ)言

匯編語(yǔ)言和C語(yǔ)言

ID:42019073

大?。?19.01 KB

頁(yè)數(shù):20頁(yè)

時(shí)間:2019-09-06

匯編語(yǔ)言和C語(yǔ)言_第1頁(yè)
匯編語(yǔ)言和C語(yǔ)言_第2頁(yè)
匯編語(yǔ)言和C語(yǔ)言_第3頁(yè)
匯編語(yǔ)言和C語(yǔ)言_第4頁(yè)
匯編語(yǔ)言和C語(yǔ)言_第5頁(yè)
資源描述:

《匯編語(yǔ)言和C語(yǔ)言》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、*4。8匯編語(yǔ)言和C語(yǔ)言的混合編程本節(jié)介紹不同的模塊,不同的語(yǔ)言相結(jié)合的編程方法。通常情況下以高級(jí)語(yǔ)言編寫主程序,用匯編語(yǔ)言編寫與硬件有關(guān)的子程序。不同的編譯程序高級(jí)語(yǔ)言對(duì)匯編的調(diào)用方法不同,在FranklinC51中,是將不同的模塊(包括不同語(yǔ)言的模塊)分別匯編或編譯,再通過連接生成一個(gè)可執(zhí)行文件。C語(yǔ)言程序調(diào)用匯編語(yǔ)言程序要注意以下幾點(diǎn):1.被調(diào)函數(shù)要在主函數(shù)中說(shuō)明,在匯編程序中,要使用偽指令使CODE選項(xiàng)有效并聲明為可再定位段類型,并且根據(jù)不同情況對(duì)函數(shù)名作轉(zhuǎn)換,見表4.6。說(shuō)明符號(hào)名解

2、釋voidfunc(void)FUNC無(wú)參數(shù)傳遞或不含寄存器參數(shù)的函數(shù)名不作改變轉(zhuǎn)入目標(biāo)文件中,名字只是簡(jiǎn)單的轉(zhuǎn)為大寫形式。voidfunc(char)_FUNC含寄存器參數(shù)的函數(shù)名加入“_”字符前綴以示區(qū)別,它表明這類函數(shù)包含寄存器內(nèi)的參數(shù)傳遞。voidfunc(void)reentrant_?FUNC對(duì)于重入函數(shù)加上“_?”字符前綴以示區(qū)別,它表明這類函數(shù)包含棧內(nèi)的參數(shù)傳遞。2.對(duì)為其他模塊使用的符號(hào)進(jìn)行PUBLIC聲明,對(duì)外來(lái)符號(hào)進(jìn)行EXTRN聲明。3.參數(shù)的傳遞。在混合語(yǔ)言編程中,關(guān)鍵是入

3、口參數(shù)和出口參數(shù)的傳遞,F(xiàn)ranklinC編譯器可使用寄存器傳遞參數(shù),也可以使用固定存貯器或使用堆棧,由于8XX51的堆棧深度有限,因此多用寄存器或存貯器傳遞。用寄存器傳遞最多只能傳遞三個(gè)參數(shù),選擇固定的寄存器,見表4.7。表4.7參數(shù)類型charintlong,float一般指針第一個(gè)參數(shù)第二個(gè)參數(shù)第三個(gè)參數(shù)R7R5R3R6,R7R4,R5R2,R3R4~R7R4~R7無(wú)R1,R2,R3R1,R2,R3R1,R2,R3例如func1(inta)“a”是第一個(gè)參數(shù),在R6,R7傳遞,func2(i

4、ntb,intc,int*d)“b”在R6,R7中傳遞,“c”在R4,R5中傳遞,“d”在R1,R2,R3中傳遞。如果傳遞參數(shù)寄存器不夠用,可以使用存貯器傳送,通過指針取得參數(shù)。匯編語(yǔ)言通過寄存器或存貯器傳遞參數(shù)給C語(yǔ)言程序,匯編語(yǔ)言通過寄存器傳遞給C語(yǔ)言的返回值見表4.8。返回值寄存器說(shuō)明bit(unsigned)char(unsigned)int(unsigned)longFloat指針CR7R6,R7R4~R7R4~R7R1,R2,R3進(jìn)位標(biāo)志高位在R6,低位在R7高位在R4,低位在R732

5、位IEEE格式,指數(shù)和符號(hào)位R7R3放存儲(chǔ)器類型,高位在R2,低位R1下面通過兩個(gè)實(shí)例說(shuō)明混合編程的方法及參數(shù)傳遞過程.例4_10用P1.0產(chǎn)生周期為4ms的方波,同時(shí)用P1.1產(chǎn)生周期為8ms的方波。說(shuō)明:設(shè)計(jì)三個(gè)模塊模塊一C語(yǔ)言編主程序,使P1.1產(chǎn)生周期為8ms的方波;模塊二用C語(yǔ)言編程,使P1.0產(chǎn)生周期為4ms的方波;模塊三用匯編語(yǔ)言編寫延時(shí)1ms程序。模塊一調(diào)用模塊二獲得8ms方波,模塊二調(diào)模塊三,向匯編程序傳遞字符型參數(shù)(x=2),延時(shí)2ms。各模塊程序如下:模塊一:P1.1產(chǎn)生周期為

6、8ms的方波#include#defineucharunsignedcharsbitP1-1=P1^1;voiddelay4ms(void);/*定義延時(shí)4ms函數(shù)(模塊二)*/main(){uchari;for(;;){P1-1=0;delay4ms();/*調(diào)模塊二延時(shí)4ms*/P1-1=1;delay4ms();/*調(diào)模塊二延時(shí)4ms*/}}模塊二(delay4ms):使P1.0產(chǎn)生周期為4ms的方波#include#defineuch

7、arunsignedcharsbitP1-0=P1^0;delaylms(ucharx);/*定義延時(shí)1ms函數(shù)(模塊三)*/voiddelay4ms(void){P1-0=0;delaylms(2);/*調(diào)匯編函數(shù)(模塊三)*/P1-0=1;delaylms(2);/*調(diào)匯編函數(shù)(模塊三)*}模塊三:PUBLIC-DELAY1MS;DELAY1MS為其他模塊調(diào)用DESEGMENTCODE;定義DE段為再定位程序段RSEGDE;選擇DE為當(dāng)前段-DELAY1MS:NOPDELA

8、:MOVR1,#0F8H;延時(shí)LOP1:NOPNOPDJNZR1,LOP1DJNZR7,DELA;R7為C程序傳遞過來(lái)的參數(shù)(x=2)EXIT:RETEND上例可見匯編語(yǔ)言程序從R7中獲取C程序傳遞參數(shù)(x=2)。例2.在匯編程序中比較兩數(shù)大小,將大數(shù)放到指定的存儲(chǔ)區(qū),由C程序的主調(diào)函數(shù)取出。C語(yǔ)言程序模塊一:#defineucharunsignedcharvoidmax(uchara,ucharb);/*定義匯編函數(shù)*/main()

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

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

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