




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第7章章 ARM程序和程序和Thumb程序程序 交互使用交互使用 Assemble Language of ARM2 交互需求 oThumb的代碼密度和在窄存儲(chǔ)器上性能 ,使得它用在很多有大 量C代碼的系統(tǒng)上比較理想. 然而在很多應(yīng)用中還是需要在 ARM/Thumb 兩種狀態(tài)之間切換: n在寬的存儲(chǔ)器上 ARM 代碼能提供很好的性能 o 在一個(gè)應(yīng)用中,速度關(guān)鍵的部分用ARM代碼實(shí)現(xiàn)是不錯(cuò)的 n一些函數(shù)只能用 ARM 指令實(shí)現(xiàn), e.g. o 存取 CPSR (使能/禁止中斷和狀態(tài)的改變) o 操作協(xié)處理器 n異常處理 o 異常處理時(shí)自動(dòng)進(jìn)入 ARM 狀態(tài),但系統(tǒng)要求主程序用 Thumb 代碼
2、實(shí)現(xiàn) n獨(dú)立的 Thumb 程序也需要一個(gè)ARM 的匯編程序頭來(lái)切換,并 調(diào)用Thumb 程序 Assemble Language of ARM3 o 可以實(shí)現(xiàn)程序狀態(tài)切換的指令 n BLX, BX n LDR, LDM, POP Assemble Language of ARM4 交互指令 o 交互的實(shí)現(xiàn)采用跳轉(zhuǎn)交換指令(BX) n在Thumb狀態(tài) BX Rn n在ARM狀態(tài) (支持Thumb的內(nèi)核) BX Rn 其中Rn可以是 (r0r15)中的任何一個(gè). o 這將通過(guò)拷貝 Rn 到 PC 來(lái)實(shí)現(xiàn)在 4GB 空間內(nèi) 的一個(gè)絕對(duì)跳轉(zhuǎn). o 其中Rn 的 Bit-0 表明切換到何種狀態(tài). As
3、semble Language of ARM5 狀態(tài)切換 Rn 31 01 0/1 ARM / Thumb 選擇位選擇位 0 - ARM state 1 - Thumb state 目的地址目的地址 BX 3101 PC Assemble Language of ARM6 o 與程序狀態(tài)切換相關(guān)的偽操作 n CODE16偽操作 n CODE32偽操作 Assemble Language of ARM7 分支交換示例 CODE32; Start off in ARM state ADR r0,Into_Thumb+1 ; Generate branch target address and se
4、t ; bit 0, hence arrive in Thumb state. BX r0; Branch exchange to Thumb state. : CODE16; Assemble subsequent code as Thumb. Into_Thumb : ADR r5, Back_to_ARM ; Generate branch target to word aligned ; address - hence bit 0 is clear. BX r5; Branch exchange back to ARM state. : CODE32; Assemble subsequ
5、ent code as ARM. Back_to_ARM : Assemble Language of ARM8 無(wú)交互子程序 o實(shí)現(xiàn)一個(gè)通常的子程序調(diào)用需要如下兩步: n保存返回地址到寄存器(LR) n跳轉(zhuǎn)到對(duì)應(yīng)的子程序地址 o調(diào)用實(shí)現(xiàn)通常只需要一個(gè)指令: BL func2 o返回實(shí)現(xiàn)通常只需從 LR 恢復(fù) PC: MOV pc,lr . . BL func2 . . : MOV pc,lr func1func2 void func1 (void) : func2(); : Assemble Language of ARM9 混合的ARM/Thumb子程序 o在使用 C / C+ 寫(xiě)程序時(shí),
6、可以自由的編譯為 ARM ( 使用 armcc/armcpp) 或 Thumb ( 使用tcc/tcpp). n需要一些編譯方法來(lái)解決在一種狀態(tài)下的函數(shù)調(diào)用另一種狀態(tài)下的 函數(shù)的問(wèn)題. o涉及到的問(wèn)題: n BL 不能完成狀態(tài)切換 o需要使用 BX 切換 n BX 不能自動(dòng)保存返回地址到 LR o需要其它方法來(lái)解決這個(gè)問(wèn)題, BLX指令的引入 (ARM7不支持) n 從子程序返回,要使用 BX LR 以便返回先前的狀態(tài) oBL 在 Thumb 狀態(tài)下可能設(shè)置了 LR 的 lsb (bit-0) o不能使用 MOV PC,LR 返回,因?yàn)椴荒軐?shí)現(xiàn)狀態(tài)切換 Assemble Language of
7、 ARM10 交互子程序 o任何包含使用交互調(diào)用函數(shù)的 C 模塊的編譯必須使用 -apcs /interwork 命令行選項(xiàng). n編譯器將使用 BX 實(shí)現(xiàn)函數(shù)返回來(lái)替代 MOV PC,LR. o連接器生成一小段代碼(veneers)來(lái)改變狀態(tài) n當(dāng)發(fā)現(xiàn)交互調(diào)用時(shí)自動(dòng)加入目標(biāo)文件 n使用 armlink -info veneers 可以看到加入的“ veneers” 的大小。 : BL : : BX : BX func1func2 連接程序生成連接程序生成 veneer (compiled for interworking) Assemble Language of ARM11 ARM 4T架構(gòu)
8、對(duì)交互編譯的影響 o leaf function使用 BX 返回. oNon_leaf function將被交互編譯: n在入口處( 調(diào)用 BL 之前)壓棧保護(hù)返回地址 n在入口處保護(hù)所有函數(shù)使用的寄存器 n使用 BX 實(shí)現(xiàn)返回操作 (替代彈出 PC). C 源代碼 armcc -apcs /interwork tcc -apcs /interwork void func(void) func func STMFD sp!,r4-r11,lr PUSH r4-r7,lr : : : sub(); BL sub BL sub : : : : LDMFD sp!,r4-r11,lr POP r4-
9、r7 BX lr POP r3 BX r3 Assemble Language of ARM12 匯編程序交互工作和Veneers o連接程序?qū)?huì)自動(dòng)加入ARM / Thumb交互 veneers到匯編源代碼. o主調(diào)程序需要: n使用 armasm -apcs /interwork 匯編匯編 n導(dǎo)出自己的符號(hào), e.g. EXPORT ThumbSub n使用 BX 實(shí)現(xiàn)返回 o主調(diào)程序使用 BL 指令調(diào)用子程序. oNote: AREA 將包含: AREA Thumb,CODE,READONLY,INTERWORK 如果如此, armasm 將警告: INTERWORK area dire
10、ctive is obsolete. Continuing as if -apcs /inter selected. Assemble Language of ARM13 ; armasm arm.s AREA ARM,CODE,READONLY IMPORT ThumbSub ENTRY CODE32 ARMProg MOVr0, #1 BLThumbSub;call Thumb subroutine MOVr0, #0 x18 LDRr1, =0 x20026 SWI 0 x123456;ARM semihosting SWI END ; armasm thumb.s -apcs /int
11、erwork AREA Thumb,CODE,READONLY EXPORT ThumbSub CODE16 ThumbSub MOVr1, #2 BXlr;return to caller END 匯編程序交互工作 (1) Assemble Language of ARM14 匯編程序交互工作 (2) o使用Debugger反匯編代碼: ARMProg 0 x00008080: 0 xe3a00001 : mov r0,#1 0 x00008084: 0 xeb000004 : bl 0 x809c ; ThumbSub+0 x4 0 x00008088: 0 xe3a00018 : mov
12、 r0,#0 x18 0 x0000808c: 0 xe59f1000 : ldr r1,0 x8094 ; =#0 x00020026 0 x00008090: 0 xef123456 : swi 0 x123456 0 x00008094: 0 x00020026 : Literal Pool Value ThumbSub 0 x00008098: 0 x2102 : mov r1,#2 0 x0000809a: 0 x4770 : bx lr o交互veeners在下一個(gè)字的邊界 0 x0000809c: 0 xe59fc000 : ldr r12,0 x80a4 ; =#ThumbSub+0 x1 0 x000080a0: 0 xe12fff1c : bx r12 0 x000080a4: 0 x00008099 : Literal Pool Value Assemble Language of ARM15 C / 匯編使用 Veneers交互工作 o運(yùn)行在一種狀態(tài)下的 C 代碼可能調(diào)用運(yùn)行在另一種狀態(tài)下的匯編程序,反之 亦然。 o這時(shí)的 veneers 由連接程序自動(dòng)生成。 o如果主調(diào)函數(shù)是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國(guó)醫(yī)用涂料行業(yè)市場(chǎng)占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 2025至2030中國(guó)制水機(jī)行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 夫妻共同財(cái)產(chǎn)分割與子女撫養(yǎng)權(quán)協(xié)議示范
- 農(nóng)業(yè)項(xiàng)目物資采購(gòu)合同簽訂流程及要求
- 高端財(cái)務(wù)總監(jiān)選拔及職業(yè)發(fā)展支持合同
- 代理記賬服務(wù)與客戶財(cái)務(wù)數(shù)據(jù)安全合同
- 車輛轉(zhuǎn)讓與改裝升級(jí)及售后服務(wù)協(xié)議書(shū)
- 無(wú)子女離婚協(xié)議:財(cái)產(chǎn)分割與子女未來(lái)職業(yè)規(guī)劃書(shū)
- 氨法脫硫培訓(xùn)
- 健康輕食外賣配送服務(wù)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力項(xiàng)目商業(yè)計(jì)劃書(shū)
- 燒結(jié)工藝培訓(xùn)課件
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 礦山行業(yè)生產(chǎn)制造執(zhí)行系統(tǒng)(MES)
- 微電網(wǎng)優(yōu)化調(diào)度
- 《新印象 CINEMA 4D電商設(shè)計(jì)基礎(chǔ)與實(shí)戰(zhàn) 全視頻微課版 》讀書(shū)筆記思維導(dǎo)圖
- 2023年北京市海淀區(qū)小升初英語(yǔ)考試題庫(kù)及答案解析
- 代謝性腦病的病例分析
- YY/T 1849-2022重組膠原蛋白
- GB/T 31227-2014原子力顯微鏡測(cè)量濺射薄膜表面粗糙度的方法
- GB/T 17669.1-1999建筑石膏一般試驗(yàn)條件
- 七年級(jí)生物下填圖題(識(shí)圖題)總復(fù)習(xí)
評(píng)論
0/150
提交評(píng)論