第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)

第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)

ID:5894115

大?。?94.00 KB

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

時(shí)間:2017-11-15

第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)_第1頁(yè)
第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)_第2頁(yè)
第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)_第3頁(yè)
第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)_第4頁(yè)
第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)_第5頁(yè)
資源描述:

《第8章 arm匯編語(yǔ)言與嵌入式c混合編程(2)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、第8章ARM匯編語(yǔ)言與嵌入式C混合編程8.1嵌入式C編程規(guī)范8.2嵌入式C程序設(shè)計(jì)中的位運(yùn)算8.3嵌入式C程序設(shè)計(jì)中的幾點(diǎn)說(shuō)明8.4嵌入式C程序設(shè)計(jì)格式8.5過(guò)程調(diào)用標(biāo)準(zhǔn)ATPCS與AAPCS8.6ARM匯編語(yǔ)言與嵌入式C混合編程8.5過(guò)程調(diào)用標(biāo)準(zhǔn)ATPCS與AAPCS過(guò)程調(diào)用標(biāo)準(zhǔn)ATPCS(ARM-ThumbProduceCallStandard)規(guī)定了子程序間相互調(diào)用的基本規(guī)則,ATPCS規(guī)定子程序調(diào)用過(guò)程中寄存器的使用規(guī)則、數(shù)據(jù)棧的使用規(guī)則及參數(shù)的傳遞規(guī)則。2007年,ARM公司推出了新的過(guò)程調(diào)用標(biāo)準(zhǔn)AAPCS(ARMA

2、rchitectureProduceCallStandard),它只是改進(jìn)了原有的ATPCS的二進(jìn)制代碼的兼容性。8.5.1寄存器使用規(guī)則(1)子程序間通過(guò)寄存器R0~R3傳遞參數(shù),寄存器R0~R3可記作A1~A4。被調(diào)用的子程序在返回前無(wú)須恢復(fù)寄存器R0~R3的內(nèi)容。8.5.1寄存器使用規(guī)則(2)在子程序中,ARM狀態(tài)下使用寄存器R4~R11來(lái)保存局部變量,寄存器R4~R11可記作V1~V8;Thumb狀態(tài)下只能使用R4~R7來(lái)保存局部變量。8.5.1寄存器使用規(guī)則(3)寄存器R12用作子程序間調(diào)用時(shí)臨時(shí)保存棧指針,函數(shù)返回

3、時(shí)使用該寄存器進(jìn)行出棧,記作IP;在子程序間的鏈接代碼中常有這種使用規(guī)則。(中間結(jié)果寄存器)(4)通用寄存器R13用作數(shù)據(jù)棧指針,記作SP。8.5.1寄存器使用規(guī)則(5)通用寄存器R14用作鏈接寄存器,記作LR。(保存子程序返回地址)(6)通用寄存器R15用作程序計(jì)數(shù)器,記作PC。8.5.2數(shù)據(jù)棧使用規(guī)則過(guò)程調(diào)用標(biāo)準(zhǔn)規(guī)定數(shù)據(jù)棧為FD類型(滿遞減),并且對(duì)數(shù)據(jù)棧的操作時(shí)要求8字節(jié)對(duì)齊的。8.5.3參數(shù)傳遞規(guī)則1.參數(shù)個(gè)數(shù)可變的子程序參數(shù)傳遞規(guī)則對(duì)于參數(shù)個(gè)數(shù)可變的子程序,當(dāng)參數(shù)個(gè)數(shù)不超過(guò)4個(gè)時(shí),可以使用寄存器R0~R3來(lái)傳遞;當(dāng)參

4、數(shù)個(gè)數(shù)超過(guò)4個(gè)時(shí),還可以使用數(shù)據(jù)棧進(jìn)行參數(shù)傳遞。8.5.3參數(shù)傳遞規(guī)則2.參數(shù)個(gè)數(shù)固定的子程序參數(shù)傳遞規(guī)則如果系統(tǒng)不包含浮點(diǎn)運(yùn)算的硬件部件且沒(méi)有浮點(diǎn)參數(shù)時(shí),則依次將各參數(shù)傳送到寄存器R0~R3中,如果參數(shù)個(gè)數(shù)多于4個(gè),將剩余的字?jǐn)?shù)據(jù)通過(guò)數(shù)據(jù)棧來(lái)傳遞;如果包括浮點(diǎn)參數(shù)則要通過(guò)相應(yīng)的規(guī)則將浮點(diǎn)參數(shù)轉(zhuǎn)換為整數(shù)參數(shù),然后依次將各參數(shù)傳送到寄存器R0~R3中。如果參數(shù)多于4個(gè),將剩余字?jǐn)?shù)據(jù)傳送到數(shù)據(jù)棧中,入棧的順序與參數(shù)順序相反,即最后一個(gè)字?jǐn)?shù)據(jù)先入棧。8.5.3參數(shù)傳遞規(guī)則如果系統(tǒng)包含浮點(diǎn)運(yùn)算的硬件部件,將按照如下規(guī)則傳遞:各個(gè)浮點(diǎn)參

5、數(shù)按順序處理為每個(gè)浮點(diǎn)參數(shù)分配寄存器。分配方法是:找到編號(hào)最小的滿足該浮點(diǎn)參數(shù)需要的一組連續(xù)的FP寄存器進(jìn)行參數(shù)傳遞。8.5.3參數(shù)傳遞規(guī)則子程序結(jié)果返回規(guī)則(1)結(jié)果為一個(gè)32位的整數(shù)時(shí),通過(guò)寄存器R0返回;結(jié)果為一個(gè)64位整數(shù)時(shí),通過(guò)寄存器R0,R1返回。(2)結(jié)果為一個(gè)浮點(diǎn)數(shù)時(shí),可以通過(guò)浮點(diǎn)運(yùn)算部件的寄存器F0、D0或者S0來(lái)返回;結(jié)果為復(fù)合型的浮點(diǎn)數(shù)(如復(fù)數(shù))時(shí),可以通過(guò)寄存器F0~Fn或者D0~Dn來(lái)返回。(3)對(duì)于位數(shù)更多的結(jié)果,需要通過(guò)內(nèi)存來(lái)傳遞。過(guò)程調(diào)用標(biāo)準(zhǔn)ATPCS/AAPCS是學(xué)習(xí)嵌入式程序調(diào)用的基礎(chǔ)內(nèi)容,

6、詳細(xì)說(shuō)明請(qǐng)參考教材《ARM嵌入式系統(tǒng)結(jié)構(gòu)與編程》第8章8.5節(jié)8.6ARM匯編語(yǔ)言與嵌入式C混合編程在嵌入式程序設(shè)計(jì)中,有些場(chǎng)合(如對(duì)具體的硬件資源進(jìn)行訪問(wèn))必須用匯編語(yǔ)言來(lái)實(shí)現(xiàn),可以采用在嵌入式C語(yǔ)言程序中嵌入?yún)R編語(yǔ)言或嵌入式C語(yǔ)言調(diào)用匯編語(yǔ)言來(lái)實(shí)現(xiàn)。1.內(nèi)嵌匯編2.ARM匯編語(yǔ)言與嵌入式C程序相互調(diào)用8.6.1內(nèi)嵌匯編(1)ARM開(kāi)發(fā)工具編譯環(huán)境下內(nèi)嵌匯編語(yǔ)法格式ARM開(kāi)發(fā)工具編譯環(huán)境下實(shí)例可以直接引用C語(yǔ)言中的變量定義8.6.1內(nèi)嵌匯編(2)GNUARM環(huán)境下內(nèi)嵌匯編語(yǔ)法格式GNUARM環(huán)境下實(shí)例不能直接引用C語(yǔ)言中的變

7、量定義,有雙引號(hào)8.6.1內(nèi)嵌匯編2.內(nèi)嵌匯編的局限性(1)操作數(shù)ARM開(kāi)發(fā)工具編譯環(huán)境下內(nèi)嵌匯編語(yǔ)言,指令操作數(shù)可以是寄存器、常量或C語(yǔ)言表達(dá)式??梢允莄har、short或int類型,而且是作為無(wú)符號(hào)數(shù)進(jìn)行操作。當(dāng)表達(dá)式過(guò)于復(fù)雜時(shí)需要使用較多的物理寄存器,有可能產(chǎn)生沖突。GNUARM編譯環(huán)境下內(nèi)嵌匯編語(yǔ)言ARM開(kāi)發(fā)工具稍有差別,不能直接引用C語(yǔ)言中的變量。8.6.1內(nèi)嵌匯編(2)物理寄存器不要直接向程序計(jì)數(shù)器PC賦值,程序的跳轉(zhuǎn)只能通過(guò)B或BL指令實(shí)現(xiàn)。一般將寄存器R0~R3、R12及R14用于子程序調(diào)用存放中間結(jié)果,因此

8、在內(nèi)嵌匯編指令中,一般不要將這些寄存器同時(shí)指定為指令中的物理寄存器。8.6.1內(nèi)嵌匯編在內(nèi)嵌的匯編指令中使用物理寄存器時(shí),如果有C語(yǔ)言變量使用了該物理寄存器,則編譯器將在合適的時(shí)候保存并恢復(fù)該變量的值。需要注意的是,當(dāng)寄存器SP、SL、FP以及SB用作特定的用途時(shí),編譯器不能

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(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)系客服處理。