【導(dǎo)讀】Thumb的代碼密度和在窄存儲(chǔ)器上性能,使得它用在很多有大量C代碼的系統(tǒng)。在一個(gè)應(yīng)用中,速度關(guān)鍵的部分用ARM代碼實(shí)現(xiàn)是不錯(cuò)的。一些函數(shù)只能用ARM指令實(shí)現(xiàn),.異常處理時(shí)自動(dòng)進(jìn)入ARM狀態(tài),但系統(tǒng)要求主程序用Thumb代碼實(shí)現(xiàn)。獨(dú)立的Thumb程序也需要一個(gè)ARM的匯編程序頭來切換,并調(diào)用Thumb程序。交互的實(shí)現(xiàn)采用跳轉(zhuǎn)交換指令。這將通過拷貝Rn到PC來實(shí)現(xiàn)在4GB空間內(nèi)的一個(gè)絕對(duì)跳轉(zhuǎn).其中Rn的Bit-0表明切換到何種狀態(tài).返回實(shí)現(xiàn)通常只需從LR恢復(fù)PC:MOVpc,lr. 在使用C/C++寫程序時(shí),可以自由的編譯為ARM. BL不能完成狀態(tài)切換。需要其它方法來解決這個(gè)問題。從子程序返回,要使用BXLR以便返回先前的狀態(tài)。BL在Thumb狀態(tài)下可能設(shè)置了LR的lsb. 任何包含使用交互調(diào)用函數(shù)的C模塊的編譯必須使用-apcs/interwork. 連接器生成一小段代碼來改變狀態(tài)。使用armlink-infoveneers可以看到加入的“veneers”的大小,在入口處保護(hù)所有函數(shù)使用的寄存器。導(dǎo)出自己的符號(hào),.EXPORTThumbSub