新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > arm匯編學(xué)習(xí)(六)跳轉(zhuǎn)到thumb狀態(tài)

        arm匯編學(xué)習(xí)(六)跳轉(zhuǎn)到thumb狀態(tài)

        作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
        通常函數(shù)返回使用 pop {r7,pc}或bx lr等方式(bx,b類似jmp為跳轉(zhuǎn)指令,但bx可以指定跳轉(zhuǎn)區(qū)域究竟為thumb還是arm指令。

        thumb指令指令的時(shí)候,直接填寫該地址卻總是產(chǎn)生SIGSYS信號(hào)(非法指令執(zhí)行)。
        原因就是該函數(shù)為thumb指令,因此跳轉(zhuǎn)時(shí)必須要把指令地址的最低位設(shè)置為1(bx 通過(guò)這一位來(lái)區(qū)分指令集),所以函數(shù)地址就加了一。

        本文引用地址:http://www.104case.com/article/201611/317578.htm


        thumb指令集與arm指令集切換

        movR0,#5     ;Argument to function is in R0addR1,PC,#1     ;Load address of SUB_BRANCH, Set for THUMB by adding 1BX     R1     ;R1 contains address of SUB_BRANCH+1;Assembler-specific instruction to switch to ThumbSUB_BRANCH:BLthumb_sub     ;Must be in a space of +/- 4 MBaddR1,#7     ;Point to SUB_RETURN with bit 0 clearBXR1;Assembler-specific instruction to switch to ARM SUB_RETURN:


        arm狀態(tài)下指令的地址末兩位都是0
        thumb狀態(tài)下指令地址的末尾是0
        thum1+1表明你即將跳入thumb狀態(tài),系統(tǒng)會(huì)自動(dòng)調(diào)整地址的



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 绥江县| 定南县| 山西省| 常宁市| 江孜县| 济宁市| 治县。| 兴国县| 新和县| 垫江县| 台北县| 海门市| 铜鼓县| 县级市| 嘉黎县| 新河县| 溧阳市| 茌平县| 东乡县| 聊城市| 景德镇市| 广水市| 遂川县| 桐庐县| 广宗县| 巴青县| 巴南区| 绥滨县| 东港市| 刚察县| 扶沟县| 河津市| 梅州市| 汽车| 甘孜县| 宣化县| 南京市| 荣昌县| 潼关县| 松桃| 凤城市|