新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM的BX指令

        ARM的BX指令

        作者: 時間:2016-11-10 來源:網絡 收藏
        bx的語法格式
        BX{} <Rm>
        <cond>為指令執行的條件碼。當<cond>忽略時指令為無條件執行。
        <Rm>該寄存器中為跳轉的目標地址。當寄存器的bit[0]為0時,目標地址處的指令為ARM指令;
        寄存器的bit[0]為1時,目標地址處的指令為Thumb指令。

        看一段簡單程序的片段,不用考慮省略號的內容,看框架就可以了!

        EXPORT LEDTEST
        AREA testasm,CODE,READONLY
        CODE32
        LEDTEST
        。。。。。。。。。。
        。。。。。。。。。
        。。。。。。。。
        。。。。。。。。。
        。。。。。。。。。。。
        ledon
        ...............
        ...............
        。。。。。。。。。。。。
        。。。。。。。。。。。
        adr r4,delay1+1
        bx r4

        ledoff
        ..............
        ...............
        .............
        .............
        .............
        ..............

        AREA testasm,CODE,READONLY
        CODE16
        delay1
        ............
        ...........
        .............
        ldr r1,=ledoff
        bx r1
        ........
        .............
        .............
        END

        關于delay1+1:
        ARM指令是字對齊(指令的地址后兩位為[1:0]=0b00),Thumb是半字對齊(指令的地址后兩位為[1:0]=0bx0,x為0或1)。指令的地址的最后一位必為0。
        因此bx(不管往ARM還是往Thumb跳轉)的跳轉指令必須保證指令地址的最后一位為0,上例中bx指令能自
        動地將目標地址值置為r4的值和0xFFFFFFFE的與后的結果,就會使指令地址的最后一位必為0了。
        那么delay+1的這個1不就被0與掉了么,就沒有什么作用了?其實,在執行bx指令時,它是首先判
        斷指令地址的后一位為0或1(這樣就知道要跳轉的地方是ARM還是Thumb指令。0跳轉arm,1跳轉thumb。),然后再PC=r4 AND 0xFFFFFFFE。這樣,當我們需要要跳轉到Thumb指令處執行時,必須將指令地址的最后以為置1。

        而bx再跳轉到ARM指令時就無需考慮這些了,就不用像上面的+1處理了。

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


        關鍵詞: ARMBX指

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 达日县| 大方县| 景德镇市| 古田县| 洞口县| 茌平县| 尼勒克县| 横山县| 西贡区| 武义县| 阜平县| 寿宁县| 夹江县| 延川县| 广西| 麟游县| 哈密市| 昔阳县| 和林格尔县| 黔西县| 海口市| 阳东县| 瑞金市| 横峰县| 应用必备| 江源县| 浪卡子县| 汕头市| 鹤岗市| 富宁县| 卢氏县| 敦化市| 贵阳市| 宝坻区| 浦县| 达孜县| 高邮市| 潼南县| 伊宁市| 响水县| 七台河市|