arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編

arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編

ID:15589067

大?。?4.50 KB

頁數(shù):5頁

時(shí)間:2018-08-04

arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編_第1頁
arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編_第2頁
arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編_第3頁
arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編_第4頁
arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編_第5頁
資源描述:

《arm匯編語言與嵌入式c語言混合編程————內(nèi)嵌匯編》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、ARM匯編語言與嵌入式C語言混合編程————內(nèi)嵌匯編在嵌入式程序設(shè)計(jì)中,有些場合(如對具體的硬件資源進(jìn)行訪問)必須用匯編語言來實(shí)現(xiàn),可以采用在嵌入式C語言程序中嵌入?yún)R編語言或嵌入式C語言調(diào)用匯編語言來實(shí)現(xiàn)。內(nèi)嵌匯編內(nèi)嵌的匯編指令與通常的ARM指令有所區(qū)別,是在嵌入式C程序中嵌入一段匯編代碼,這段匯編代碼在形式上表現(xiàn)為獨(dú)立定義的函數(shù)體,遵循過程調(diào)用標(biāo)準(zhǔn)。1.語法格式在嵌入式C程序中內(nèi)嵌匯編使用關(guān)鍵字“__asm”。在ARM開發(fā)工具編譯環(huán)境下與GNUARM編譯環(huán)境下的內(nèi)嵌匯編在格式上略有差別。(1)ARM開發(fā)工具編譯環(huán)境下內(nèi)嵌匯編語法格式在ARM開

2、發(fā)工具編譯環(huán)境下的內(nèi)嵌匯編語言程序段,可以直接引用C語言中的變量定義。具本的語法格式如下:__asm{指令;[指令]指令;[指令]//注釋…[指令]}示例:/*main.c*/void__main(void){intvar=0xAA;__asm//內(nèi)嵌匯編標(biāo)識{MOVR1,varCMPR1,#0xAA}while(1);}(2)GNUARM環(huán)境下內(nèi)嵌匯編語法格式在GNUARM編譯環(huán)境下內(nèi)嵌匯編語言程序段,不能直接引用C語言中的變量定義。如果有多條匯編指令需要嵌入,則可用“”將它們歸為一條語句。具本的語法格式如下:__asm(“指令;[指令;]

3、指令;[指令;]…[指令;]”);示例:/*main.c*/void__main(void){intvar=0xAA;__asm("MOVR5,#0xAA;/*注意:這里不要直接使用C代碼中提供的變量*/MOVR6,#0xBB;CMPR1,#0;");while(1);}ARM匯編語言調(diào)用嵌入式C語言(匯編程序調(diào)用C程序)2010-04-1514:50這里要特別注意參數(shù)的傳遞規(guī)則,程序設(shè)計(jì)時(shí)要嚴(yán)格遵守ATPCS。在GNUARM編譯環(huán)境下,匯編程序中要使用.extern偽操作聲明將要調(diào)用的C程序;在ARM—ADS開發(fā)工具編譯環(huán)境下,匯編

4、程序中要使用IMPORT偽操作聲明將要調(diào)用的C程序。示例解析(1)在GNUARM編譯環(huán)境下設(shè)計(jì)程序,用ARM匯編語言調(diào)用C語言實(shí)現(xiàn)20!的階乘操作,并將64位結(jié)果保存到寄存器R0、R1中,其中R1中存放高32位結(jié)果。首先建立匯編源文件start.s/*start.s*/.global_start.externFactorial@聲明Factorial是一個(gè)外部函數(shù).equNi,20@要計(jì)算的階乘數(shù).text_start:MOVR0,#Ni@將參數(shù)裝入R0BLFactorial@調(diào)用Factorial,并通過R0傳遞參數(shù)Stop:BStop.en

5、d然后建立C語言源文件factorial.c/*factorial.c*/longlongFactorial(charN){chari;longlongNx=1;for(i=1;i<=N;i++)Nx=Nx*i;returnNx;//通過R0,R1返回結(jié)果}(2)在ARM—ADS開發(fā)工具編譯環(huán)境下設(shè)計(jì)程序,用ARM匯編語言調(diào)用C語言實(shí)現(xiàn)20!的階乘操作,并將64位結(jié)果保存到寄存器R0、R1中,其中R1中存放高32位結(jié)果。首先建立匯編源文件start.s/*start.s*/IMPORTFactorial;聲明Factorial是一個(gè)外部函數(shù)Ni

6、EQU20;要計(jì)算的階乘數(shù)AREAFctrl,CODE,READONLY;聲明代碼FctrlENTRY;標(biāo)識程序入口startMOVR0,#Ni;將參數(shù)裝入R0BLFactorial;調(diào)用Factorial,并通過R0傳遞參數(shù)/*注:在此處觀察結(jié)果*/StopBStopEND;文件結(jié)束然后建立C語言源文件factorial.c/*factorial.c*/longlongFactorial(charN){chari;longlongNx=1;for(i=1;i<=N;i++)Nx=Nx*i;returnNx;//通過R0,R1返回結(jié)果}程序運(yùn)行

7、結(jié)果如下:R0=0x82B40000R1=0x21C3677C嵌入式C語言調(diào)用ARM匯編語言(C程序調(diào)用匯編程序)2010-04-1514:56C程序調(diào)用匯編程序也要特別注意參數(shù)的傳遞規(guī)則,程序設(shè)計(jì)時(shí)要嚴(yán)格遵守ATPCS。在GNUARM編譯環(huán)境下,在匯編程序中要使用.global偽操作聲明匯編程序?yàn)槿值暮瘮?shù),可被外部函數(shù)調(diào)用,同時(shí)在C程序中要用關(guān)鍵字extern聲明要調(diào)用的匯編語言程序。在ARM開發(fā)工具編譯環(huán)境下,匯編程序中要使用EXPORT偽操作聲明本程序可以被其他程序調(diào)用。同時(shí)也要在C程序中要用關(guān)鍵字extern聲明要調(diào)用的匯編語言程序。

8、示例解析(1)在GNUARM編譯環(huán)境下設(shè)計(jì)程序,用用C語言調(diào)用ARM匯編語言C語言實(shí)現(xiàn)20的階乘(20!)操作,并將64位結(jié)果保存到0xFFFFFFF

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

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

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