色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM匯編中B跳轉(zhuǎn)指令和LDR跳轉(zhuǎn)的區(qū)別

          ARM匯編中B跳轉(zhuǎn)指令和LDR跳轉(zhuǎn)的區(qū)別

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          • B跳轉(zhuǎn)指令是代碼位置無(wú)關(guān)的,經(jīng)過(guò)匯編后會(huì)替換為當(dāng)前PC值加(減)一個(gè)修正值,不管這條指令是在哪一個(gè)地址執(zhí)行,都能跳轉(zhuǎn)到指定的位置。
          • B只能在當(dāng)前PC的32M范圍內(nèi)跳轉(zhuǎn),LDR只能在當(dāng)前PC的4KB(0xfff范圍)跳轉(zhuǎn)。
          • LDR PC,=xxx指令將向PC直接裝載一個(gè)標(biāo)號(hào)xxx的值,但標(biāo)號(hào)經(jīng)過(guò)編譯后將被替換為一個(gè)與RO相對(duì)應(yīng)的值,這樣無(wú)論指令在何處執(zhí)行都能跳轉(zhuǎn)到一個(gè)指定的位置。
          • 以AT91SAM9260 的啟動(dòng)代碼片段為例,0x10000000為Flash基址,0x20000000為SDRAM基址:

          本文引用地址:http://cafeforensic.com/article/201611/318788.htm

          其中ENTRY為起點(diǎn),也就是說(shuō)這條代碼的偏移為0.設(shè)HandlerReset的偏移為offset。如果將這段程序按照RO=0x10000000編譯則:

          b HandlerReset <=> ADD PC , PC,#offset

          LDR PC,=HandlerReset <=> MOV PC , #(RO+offset)

          當(dāng)系統(tǒng)復(fù)位時(shí),b HandlerReset 將PC指向0地址處Flash鏡像代碼的位置;而LDR PC,=HandlerReset將PC指向Flash中的原始代碼位置,所以兩者都能正常執(zhí)行。

          但是,如果程序按照RO=0x20000000編譯,編譯后生成的代碼還是得燒寫到Flash中,即0x10000000地址,系統(tǒng)復(fù)位后從0地址執(zhí)行,b HandlerReset仍執(zhí)行Flash鏡像代碼,程序能正常執(zhí)行,而LDR PC,=HandlerReset將使PC指向0x20000000+offset,此地址位于SDRAM中,而此時(shí)代碼尚未復(fù)制,SDRAM中尚無(wú)代碼,程序不能運(yùn)行。



          評(píng)論


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

          關(guān)閉