新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM與Thumb狀態(tài)切換及其代碼分析

        ARM與Thumb狀態(tài)切換及其代碼分析

        作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
        Thumb指令在相比于ARM指令具有更高的代碼密度,但是在運(yùn)行效率上略低于ARM指令集,而且Thumb只是ARM指令集的一個(gè)子集。所有的ARM指令都是可以條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。所以很多應(yīng)用程序需要兩者的混合編程,因此存在ARM與Thumb狀態(tài)之間相互切換,而且相互之間的狀態(tài)切換的開(kāi)銷幾乎為零。
        ARM與Thumb之間的狀態(tài)切換通過(guò)專用的轉(zhuǎn)移交換指令BX來(lái)實(shí)現(xiàn)。BX指令以通用寄存器(R0~R15)為操作數(shù),通過(guò)拷貝Rn到PC實(shí)現(xiàn)絕對(duì)跳轉(zhuǎn)。BX利用Rn寄存器中目的地址值的最后一位判斷跳轉(zhuǎn)后的狀態(tài)。
        下面是一段直接進(jìn)行狀態(tài)切換的代碼:
        CODE32 ;程序從ARM狀態(tài)開(kāi)始
        ADR r0, ThumbProg+1 ;跳轉(zhuǎn)到ThumbProg
        BX r0 ;程序切換到Thumb狀態(tài)
        CODE16 ;Code16指示編譯器后面為Thumb指令
        ThumbProg
        MOV r2, #2
        MOV r3, #3
        ADD r2, r2, r3
        ADR r0, ARMProg
        BX r0 ;跳轉(zhuǎn)到ARMProg,程序切換到ARM狀態(tài)
        CODE32 ;code32指示編譯器后面為ARM指令
        ARMProg
        MOV r4, #4
        MOV r5, #5
        ADD r4, r4, r5


        關(guān)鍵詞: ARMThumb狀態(tài)切

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 大方县| 靖宇县| 武城县| 太仆寺旗| 浦东新区| 道真| 云南省| 郴州市| 新巴尔虎右旗| 普兰店市| 连平县| 灵台县| 行唐县| 七台河市| 凌源市| 舟山市| 嘉禾县| 汤原县| 昆山市| 沧源| 遵化市| 黔东| 黄冈市| 永丰县| 梨树县| 金堂县| 方城县| 安泽县| 台南市| 江永县| 两当县| 陆河县| 绥化市| 西畴县| 青铜峡市| 德州市| 南雄市| 梓潼县| 曲水县| 巴里| 天津市|