版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第7章ARM程序和Thumb程序交互使用1交互需求Thumb的代碼密度和在窄存儲器上性能,使得它用在很多有大量C代碼的系統(tǒng)上比較理想.然而在很多應(yīng)用中還是需要在ARM/Thumb兩種狀態(tài)之間切換:在寬的存儲器上ARM代碼能提供很好的性能在一個應(yīng)用中,速度關(guān)鍵的局部用ARM代碼實現(xiàn)是不錯的一些函數(shù)只能用ARM指令實現(xiàn),e.g.存取CPSR(使能/禁止中斷和狀態(tài)的改變)操作協(xié)處理器異常處理異常處理時自動進入ARM狀態(tài),但系統(tǒng)要求主程序用Thumb代碼實現(xiàn)獨立的Thumb程序也需要一個ARM的匯編程序頭來切換,并調(diào)用Thumb程序2可以實現(xiàn)程序狀態(tài)切換的指令BLX,BXLDR,LDM,POP3交互指令交互的實現(xiàn)采用跳轉(zhuǎn)交換指令(BX)在Thumb狀態(tài) BXRn在ARM狀態(tài)(支持Thumb的內(nèi)核) BX<條件>Rn 其中Rn可以是(r0~r15)中的任何一個.這將通過拷貝Rn到PC來實現(xiàn)在4GB空間內(nèi)的一個絕對跳轉(zhuǎn).其中Rn的Bit-0說明切換到何種狀態(tài).4狀態(tài)切換Rn31010/1ARM/Thumb選擇位0-ARMstate1-Thumbstate目的地址BX3101PC5與程序狀態(tài)切換相關(guān)的偽操作CODE16偽操作CODE32偽操作6分支交換例如CODE32 ;StartoffinARMstate
ADRr0,Into_Thumb+1 ;Generatebranchtargetaddressandset ;bit0,hencearriveinThumbstate.BXr0 ;BranchexchangetoThumbstate.:CODE16 ;AssemblesubsequentcodeasThumb.Into_Thumb:ADRr5,Back_to_ARM ;Generatebranchtargettowordaligned ;address-hencebit0isclear.BXr5 ;BranchexchangebacktoARMstate.:CODE32 ;AssemblesubsequentcodeasARM.Back_to_ARM:7無交互子程序?qū)崿F(xiàn)一個通常的子程序調(diào)用需要如下兩步:保存返回地址到存放器(LR)跳轉(zhuǎn)到對應(yīng)的子程序地址調(diào)用實現(xiàn)通常只需要一個指令:BLfunc2返回實現(xiàn)通常只需從LR恢復(fù)PC:MOVpc,lr..BLfunc2..:MOVpc,lrfunc1func2voidfunc1(void){ : func2(); :}8混合的ARM/Thumb子程序在使用C/C++寫程序時,可以自由的編譯為ARM(使用armcc/armcpp)或Thumb(使用tcc/tcpp).需要一些編譯方法來解決在一種狀態(tài)下的函數(shù)調(diào)用另一種狀態(tài)下的函數(shù)的問題.涉及到的問題:
BL不能完成狀態(tài)切換需要使用BX切換
BX
不能自動保存返回地址到LR需要其它方法來解決這個問題,BLX指令的引入(ARM7不支持)從子程序返回,要使用BXLR以便返回先前的狀態(tài)BL在Thumb狀態(tài)下可能設(shè)置了LR的lsb(bit-0)不能使用MOVPC,LR返回,因為不能實現(xiàn)狀態(tài)切換9交互子程序任何包含使用交互調(diào)用函數(shù)的C模塊的編譯必須使用-apcs/interwork命令行選項.編譯器將使用BX實現(xiàn)函數(shù)返回來替代MOVPC,LR.連接器生成一小段代碼(‘veneers’)來改變狀態(tài)當發(fā)現(xiàn)交互調(diào)用時自動參加目標文件使用armlink-infoveneers可以看到參加的“veneers〞的大小。:BL::BX:BXfunc1func2連接程序生成veneer(compiledforinterworking)10ARM4T架構(gòu)對交互編譯的影響leaffunction使用BX返回.Non_leaffunction將被交互編譯:在入口處(調(diào)用BL之前)壓棧保護返回地址在入口處保護所有函數(shù)使用的存放器使用BX實現(xiàn)返回操作(替代彈出PC).C源代碼 armcc-apcs/interworktcc-apcs/interworkvoidfunc(void)funcfunc{STMFDsp!,{r4-r11,lr}PUSH{r4-r7,lr}:::sub();BLsubBLsub::::LDMFDsp!,{r4-r11,lr}POP{r4-r7}}BXlrPOP{r3}BXr311匯編程序交互工作和Veneers連接程序?qū)詣訁⒓覣RM/Thumb交互veneers到匯編源代碼.主調(diào)程序需要:使用armasm-apcs/interwork匯編導(dǎo)出自己的符號,e.g.EXPORTThumbSub使用BX實現(xiàn)返回主調(diào)程序使用BL指令調(diào)用子程序.Note:AREA將包含:
AREAThumb,CODE,READONLY,INTERWORK
如果如此,armasm將警告:
INTERWORKareadirectiveisobsolete.
Continuingasif-apcs/interselected.12;armasmarm.s
AREA ARM,CODE,READONLY
IMPORTThumbSub
ENTRY
CODE32
ARMProg
MOV r0,#1
BL ThumbSub ;callThumbsubroutine
MOV r0,#0x18 LDR r1,=0x20026 SWI 0x123456 ;ARMsemihostingSWI END
;armasmthumb.s-apcs/interwork AREA Thumb,CODE,READONLY EXPORTThumbSub CODE16ThumbSub MOV r1,#2 BX lr ;returntocaller END匯編程序交互工作(1)13匯編程序交互工作(2)使用Debugger反匯編代碼:ARMProg0x00008080:0xe3a00001:movr0,#10x00008084:0xeb000004:bl0x809c;ThumbSub+0x40x00008088:0xe3a00018:movr0,#0x180x0000808c:0xe59f1000:ldrr1,0x8094;=#0x000200260x00008090:0xef123456:swi0x1234560x00008094:0x00020026:LiteralPoolValueThumbSub0x00008098:0x2102:movr1,#20x0000809a:0x4770:bxlr交互veeners在下一個字的邊界0x0000809c:0xe59fc000:ldrr12,0x80a4;=#ThumbSub+0x10x000080a0:0xe12fff1c:bxr120x000080a4:0x00008099:LiteralPoolValue14C/匯編使用Veneers交互工作運行在一種狀態(tài)下的C代碼可能調(diào)用運行在另一種狀態(tài)下的匯編程序,反之亦然。這時的veneers由連接程序自動生成。如果主調(diào)函數(shù)是C函數(shù),編譯時使用-apcs/interwork如果主調(diào)函數(shù)是匯編函數(shù),匯編時使用-apcs/interwork且返回使用BXLR任何使用這些的匯編程序必須符合ATPCS標準,〔e.g.函數(shù)參數(shù)傳遞使用r0-r3&r12不受保護的〕15非交互的Thumb代碼允許Thumb-Thumb調(diào)用交互的Thumb代碼非交互的ARM代碼允許ARM-ARM調(diào)用交互的ARM代碼允許非交互的調(diào)用交互的不可調(diào)用允許ARM/Thumb調(diào)用交互調(diào)用最好使用交互選項build所有的程序16連接交互工作的目標代碼為了順利連接:必須使用統(tǒng)一的APCS標準“built〞所有的C/C++/Asm文件.要使用相應(yīng)的交互工作庫連接程序發(fā)現(xiàn)任何的不協(xié)調(diào)就會給出一個錯誤:
InvalidcallfromTHUMBcodeinthumbmain.o(.text)
toARMsymbolarm_function.修正編譯器/匯編器的配置(e.g.加上-apcs/interwork),然后重新連編。連接時使用‘-infoveneers’來得到增加的veneers的概況,e.g.:
AddingATveneer(12bytes)forcallto'_printf’
fromThumb_to_ARM.o(.text)
AddingTAveneer(12bytes)forcallto'arm_function’
fromthumbmain.o(.text)小心非法的間接調(diào)用(e.g.函數(shù)指針,動態(tài)跳轉(zhuǎn)表)–連接器對這種情況在連接時是不會給出警告的。17使用CodeWarrior交互工作使用Thumb/ARM交互工作工程模板
向ARMDebugRel目標參加ARMC,C++&Asm模塊編譯C模塊使用‘a(chǎn)rmcc-apcs/interwork’編譯C++模塊使用‘a(chǎn)rmcpp-apcs/interwork’編譯ASM模塊使用‘a(chǎn)rmasm-32-apcs/interwork’向ThumbDebugRel目標參加ThumbC,C++&Asm模塊編譯C模塊使用‘tcc-apcs/interwork’編譯C++模塊使用‘tcpp-apcs/interwork’編譯ASM模塊使用‘a(chǎn)rmasm-16-apcs/interwork’ARMDebugRel將會被編譯連接(局部連接)成ThumbDebugRel的一個子目標18Architecture5TInterworkingARM5T架構(gòu)增加了對交互工作的支持消除了對veneers的需求兼容ARM4T架構(gòu)的代碼改進內(nèi)容包括新的BLX指令修正了加載PC的動作19ARM調(diào)用Thumb子程序通常切換到Thumb狀態(tài)32MB分支范圍返回地址保存在LR中使用BXLR從子程序返回無條件指令Thumb調(diào)用ARM子程序轉(zhuǎn)化為兩個16-bit指令偏移范圍同Thumb的BL指令i.e.+/-4MB范圍返回地址保存在LR(同時設(shè)置LSB)BLX<offset>:BLXoffset::BXlrARMThumbCPSRTbit=120BLXRm和標準的BX指令相同,除了保存返回地址到LR中ARM版本下可條件執(zhí)行Thumb版本下單一的16-bit指令LR的LSB將被設(shè)置使用BXLR從子程序返回ARM/Thumb選擇位0-ARMstate1-ThumbstateRm目的地址310131010/10BLXRmPC21LDM{cond}<addressingmode>Rn,{…,PC}增加了對交互的支持表v4Tbehaviourwithextrasupportforinterworking如果PC是一個加載存放器那么加載值的bit[0]將被寫入CPSR的T-bit(這將可能導(dǎo)致一狀態(tài)切換)用作恢復(fù)存放器同時從子程序返回用來替換LDMFDsp!,{...,LR}+BXLRThumbPOP{…,PC}有同樣的功能LDRPC,[Rn,...]同樣依據(jù)加載值的0-bit來設(shè)置CPSR的T-bit可以用作跳轉(zhuǎn)表沒有相當?shù)腡humb
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)中介客戶信息保密協(xié)議范本2篇
- 二零二五年三方二手車交易風險防范及保險合同2篇
- 二零二五年度企業(yè)合同管理培訓(xùn)與人才發(fā)展意見建議書3篇
- 護理本科專業(yè)課課程思政教學評價指標體系的構(gòu)建
- 服裝知識培訓(xùn)課件
- 2025版綠色家居裝飾工程勞務(wù)合作合同2篇
- Unit 4《Lesson 3 My tidy bag》(說課稿)-2024-2025學年粵人版(2024)英語三年級上冊
- 工業(yè)機器人智能生產(chǎn)線升級改造擴建項目可行性研究報告寫作模板-備案審批
- 二零二五年度房地產(chǎn)項目股權(quán)劃轉(zhuǎn)及融資合作協(xié)議3篇
- 湖南省長沙市2025年新高考適應(yīng)性考試生物學模擬試題(含答案)
- 智能制造企業(yè)數(shù)字化轉(zhuǎn)型建設(shè)方案
- (隱蔽)工程現(xiàn)場收方計量記錄表
- 病理生理學課件脂代謝紊亂
- 教師幽默朗誦節(jié)目《我愛上班》
- 《細胞工程學》考試復(fù)習題庫(帶答案)
- 中學課堂教學評價量表
- 食堂食材配送以及售后服務(wù)方案
- 稱量與天平培訓(xùn)試題及答案
- 塊單項活動教學材料教案丹霞地貌
- 青年人應(yīng)該如何樹立正確的人生觀
- 開封辦公樓頂發(fā)光字制作預(yù)算單
評論
0/150
提交評論