第八次課 匯編語言和c的混合編程.ppt

第八次課 匯編語言和c的混合編程.ppt

ID:48744305

大?。?1.00 KB

頁數(shù):19頁

時(shí)間:2020-01-21

第八次課 匯編語言和c的混合編程.ppt_第1頁
第八次課 匯編語言和c的混合編程.ppt_第2頁
第八次課 匯編語言和c的混合編程.ppt_第3頁
第八次課 匯編語言和c的混合編程.ppt_第4頁
第八次課 匯編語言和c的混合編程.ppt_第5頁
資源描述:

《第八次課 匯編語言和c的混合編程.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、匯編與c的混合編程在嵌入式系統(tǒng)開發(fā)中,目前使用的主要編程語言是C和匯編,在稍大規(guī)模的嵌入式軟件中,例如含有OS,大部分的代碼都是用C編寫的,因?yàn)镃語言的結(jié)構(gòu)比較好,便于人的理解,而且有大量的支持庫。匯編語言,例如開機(jī)時(shí)硬件系統(tǒng)的初始化,包括CPU狀態(tài)的設(shè)定,中斷的使能,主頻的設(shè)定,以及RAM的控制參數(shù)及初始化,一些中斷處理方面也可能涉及匯編。C和匯編的混合編程在c中嵌入?yún)R編指令在匯編程序和c程序之間進(jìn)行變量的互訪在匯編程序,c程序之間的相互調(diào)用1.在C語言中內(nèi)嵌匯編在C中內(nèi)嵌的匯編指令包含大部分的ARM和Thumb指令,存在一些限制,主要有下面幾個(gè)方面:不能直接向PC寄存器賦值,

2、程序跳轉(zhuǎn)要使用B或者BL指令在使用物理寄存器時(shí),不要使用過于復(fù)雜的C表達(dá)式,避免物理寄存器沖突R12和R13可能被編譯器用來存放中間編譯結(jié)果,計(jì)算表達(dá)式值時(shí)可能將R0到R3、R12及R14用于子程序調(diào)用,因此要避免直接使用這些物理寄存器內(nèi)嵌匯編使用的標(biāo)記是__asm,用法如下:__asm{instruction[;instruction]…[instruction]}voidenable_IRQ(void){inttmp;__asm{MRStmp,CPSRBICtmp,tmp,#80MSRCPSR_c,tmp}}voiddisable_IRQ(void){inttmp;__asm

3、{MRStmp,CPSRORRtmp,tmp,#80MSRCPSR_c,tmp}}80=0x50=0b1010000#includevoidmy_strcpy(constchar*src,char*dest){charch;__asm{loop:ldrb???????ch,[src],#1strb???????ch,[dest],#1cmp????????ch,#0bne?????????loop}}intmain(){char*a="forgetitandmoveon!";charb[64];my_strcpy(a,b);printf("original:%s

4、",a);printf("copyed:???%s",b);return0;}內(nèi)存用戶數(shù)據(jù)區(qū)變量i變量j變量i_pointer362000200020023010在程序中定義一個(gè)變量,在編譯時(shí)就給這個(gè)變量分配一個(gè)內(nèi)存單元,同時(shí)根據(jù)變量的類型決定這個(gè)內(nèi)存單元的大小。如:整型2字節(jié),實(shí)型4字節(jié)。內(nèi)存中每一個(gè)字節(jié)都有一個(gè)編號,就是“地址”。對每一個(gè)變量,它在內(nèi)存中都有一個(gè)存儲(chǔ)位置,這個(gè)位置就是該變量的地址,對變量值的存取是通過地址進(jìn)行。在C語言中這個(gè)地址被形象化地稱為“指針”。指針:一個(gè)變量的地址。指針變量:存放地址的變量.定義一個(gè)指針變量指針變量在使用前必須定義,使其指向特定類型的變

5、量,指針變量存放地址,必須定義為“指針類型”。定義的一般形式:基類型*指針變量名;基類型:用來指定指針變量可以指向的變量的類型。將決定指針移動(dòng)和運(yùn)算時(shí)的移動(dòng)量。構(gòu)成:[存儲(chǔ)類型]數(shù)據(jù)類型*:表示該變量為指針類型注意:1、指針變量名是p1,p2,不是*p1,*p22、指針變量只能指向定義時(shí)所規(guī)定類型的變量3、指針變量定義后,變量值不確定,應(yīng)用前必須先賦值2.在匯編中使用C定義的全局變量匯編通過地址訪問c的全局變量訪問方法:使用INPORT/EXTERN偽操作引用該全局變量使用LDR偽指令讀取全局變量的地址使用LDR指令讀取全局變量使用STR指令存儲(chǔ)該全局變量范例:globvar的地

6、址載入R1,將該地址中包含的值載入R0,并與2相加,結(jié)果保存在globvar中.PRESERVE8AREAglobals,CODE,READONLYEXPORTasmsubroutineIMPORTglobvar;引入全局變量globvarasmsubroutineLDRR1,=globvarLDRR0,[R1]ADDR0,R0,#2STRR0,[R1]MOVpc,lrEND2.在匯編中使用C定義的全局變量#includeintgVar_1=12;externasmDouble(void);intmain(){printf("originalvalueofgVa

7、r_1is:%d",gVar_1);asmDouble();printf("modifiedvalueofgVar_1is:%d",gVar_1);return0;}AREAasmfile,CODE,READONLYEXPORTasmDoubleIMPORTgVar_1asmDoubleldrr0,=gVar_1ldrr1,[r0]movr2,#2mulr3,r1,r2strr3,[r0]movpc,lrEND2.在c中訪問匯編的程序數(shù)據(jù)訪問方法:在匯編中用EXPORT/GLOB

當(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)系客服處理。