新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 跳轉(zhuǎn)指令之:帶狀態(tài)切換的連接跳轉(zhuǎn)指令BLX(1)

        跳轉(zhuǎn)指令之:帶狀態(tài)切換的連接跳轉(zhuǎn)指令BLX(1)

        作者: 時(shí)間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

        8.3帶狀態(tài)切換的連接

        1.指令編碼格式

        帶連接和狀態(tài)切換的BLX(BranchwithLinkExchange)使用標(biāo)號(hào),用于使程序跳轉(zhuǎn)到Thumb狀態(tài)或從Thumb狀態(tài)返回。該指令為無條件執(zhí)行指令,并用分支寄存器的最低位來更新CPSR中的T位,將返回地址寫入到連接寄存器LR中。

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

        指令編碼格式如圖8.3所示。

        圖8.3BLX(1)指令編碼格式

        2.語法格式

        BLXtarget_add>

        其中,target_add>為指令的跳轉(zhuǎn)目標(biāo)地址。該地址根據(jù)以下規(guī)則計(jì)算。

        ①將指令中指定的24位偏移量進(jìn)行符號(hào)擴(kuò)展,形成32位立即數(shù)。

        ②將結(jié)果左移兩位。

        ③位H(bit[24])加到結(jié)果地址的第一位(bit[1])。

        ④將結(jié)果累加進(jìn)程序計(jì)數(shù)器PC中。

        計(jì)算偏移量的工作一般由匯編器來完成。這種形式的只能實(shí)現(xiàn)±32MB空間的跳轉(zhuǎn)。

        左移兩位形成字偏移量,然后將其累加進(jìn)程序計(jì)數(shù)器PC中。這時(shí),程序計(jì)數(shù)器的內(nèi)容為BX指令地址加8字節(jié)。位H(bit[24])也加到結(jié)果地址的第一位(bit[1]),使目標(biāo)地址成為半字地址,以執(zhí)行接下來的Thumb指令。計(jì)算偏移量的工作一般由匯編器來完成。這種形式的跳轉(zhuǎn)指令只能實(shí)現(xiàn)±32MB空間的跳轉(zhuǎn)。

        3.指令操作的偽代碼

        指令操作的偽代碼如下面程序段所示。

        第一種格式BLX指令。

        LR=addressoftheinstructionaftertheBLXinstruction

        TFlag=1

        PC=PC+PC=PC+(SignExtend(signed_immed_24)2)+(H1)

        4.指令的使用

        ·從Thumb狀態(tài)返回到狀態(tài),使用BX指令。

        BXr14

        ·可以在子程序的入口和出口增加棧操作指令。

        PUSH{registers>,r14}

        ……

        POP{registers>,PC}

        塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理


        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 德昌县| 虞城县| 鹿泉市| 高邮市| 东丰县| 毕节市| 鄂伦春自治旗| 陇西县| 东山县| 扶沟县| 曲沃县| 北宁市| 亳州市| 苏州市| 林口县| 抚顺县| 龙井市| 图们市| 翼城县| 天镇县| 沙雅县| 华池县| 双峰县| 图们市| 西宁市| 浠水县| 辽中县| 昭通市| 乾安县| 德昌县| 吴桥县| 内江市| 阿尔山市| 增城市| 靖江市| 招远市| 德钦县| 泾源县| 邹城市| 京山县| 昭通市|