精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起分析下BL(B)/LDR指令

系統
如果想讓程序正常的運行,就得使用地址無關指令。比如在完成將程序復制到內存之前想要跳轉到一個函數里,就得使用BL。因為BL跳轉依靠的是相對地址,和運行地址無關,所以能完成跳轉。
  • 1. BL LDR指令簡介
  • 2. 分析絕對跳轉過程
  • 3. BL(B)和LDR跳轉范圍是如何規定的
  • 4. BL執行過程分析
  • 5. LDR執行過程分析
  • 6. 總結

1. BL LDR指令簡介

LDR和BL在啟動程序中,都是可以負責pc跳轉的指令。

BL是地址無關指令,即和當前的運行地址無關。鏈接器腳本中標明了一個運行地址,但是arm中的代碼實際是從地址0開始運行的。這個時候,實際的地址和運行地址是不符的。

如果想讓程序正常的運行,就得使用地址無關指令。比如在完成將程序復制到內存之前想要跳轉到一個函數里,就得使用BL。因為BL跳轉依靠的是相對地址,和運行地址無關,所以能完成跳轉。

LDR是地址有關指令。如果這個時候使用“ldr pc,=函數名”來跳轉,實際上是跳轉到這個函數在鏈接器腳本中標明的地址上了。所以使用地址相關指令之前,要把代碼復制到鏈接器腳本中指明的那個地址上,否則的話程序就跑飛了。復制完成之后再使用LDR跳轉到內存中,使程序繼續運行。

2. 分析絕對跳轉過程

我們以一個例子具體分析下絕對跳轉過程。

指令編號 指令功能
指令1 順序執行
指令2 順序執行
指令3 相對跳轉到指令5
指令4 順序執行
指令5 順序執行
指令6 絕對跳轉到指令8
指令7 順序執行
指令8 順序執行

假設程序被放在0x00000000位置開始執行,編譯鏈接后的結果為:

指令地址 指令編號 指令功能 下條指令地址
0x00000000 順序執行 順序執行 當前地址+4
0x00000004 順序執行 順序執行 當前地址+4
0x00000008 跳轉到指令5 跳轉到指令5 當前地址+8
0x0000000C 順序執行 順序執行 當前地址+4
0x00000010 順序執行 順序執行 當前地址+4
0x00000014 跳轉到指令8 跳轉到指令8 0xC000001C
0x00000018 順序執行 順序執行 當前地址+4
0x0000001C 順序執行 順序執行 當前地址+4

絕對跳轉分析

當這段程序被放在0xC000000空間(如右圖)時,開始執行指令1,然后采用相對尋址的方法就可以運行到指令6,在指令6執行時也可以使用絕對尋址的方法從0xC0000014正確跳轉到指令8所在的0xC00001C位置,這段代碼運行正常。

當這段代碼被放在0x00000000空間(如左圖)時,開始執行指令1,然后采用相對尋址的方法就可以運行到指令6,但在指令6執行時使用絕對尋址的方法從0x0000014跳轉到了0xC000001C,但0xC000001C空間沒有代碼,這樣程序就跑飛了。

因此,當編譯地址(加載地址)和運行地址相同時,絕對跳轉和相對跳轉都可以正確執行。比如,程序在NORFLASH存儲時。

但是,當編譯地址(加載地址)和運行地址不相同時,相對跳轉就會出現問題。比如,代碼存儲在NANDFLASH,由于NANDFLASH并不能運行代碼,所以需要重定位代碼到內部的SRAM。

3. BL(B)和LDR跳轉范圍是如何規定的

下圖為B(BL)指令的格式

BL指令編碼格式

BL指令的[23,0]位存放的是要跳轉的相對地址,由于指令所在地址必須是4字節對齊的,因此跳轉的地址最低位必然是0。

BL指令[23,0]位保存的是省略這最低2位的地址,如果補全了這2位,BL指令就可以表示26位的跳轉地址。在這26位中需要使用1位表示向前跳還是向后跳,那么剩下的25位就可以表示32 MBts的范圍了,225=32M因此,B(BL)指令的跳轉范圍為-32MBytes~+32MBytes。

下圖為LDR指令的格式。

LDR指令編碼格式

LDR指令編碼格式

圖中的LDR的跳轉范圍計算方式和B指令的類似,其中Rn和Address_mode共同構成第二個操作數的內存地址。由Address_mode的9種格式可以知道,Address_mode表示的就是偏移地址的范圍大小,為212=4K。(不理解的可以對比下ldr pc, [pc, #804]和Address_mode的九種格式,很明顯可以看出Address_mode就是當前地址的偏移范圍)

4. BL執行過程分析

下圖為B(BL)指令的格式。

BL指令編碼格式

28~31位(cond)是條件碼,就是表明這條語句里是否有大于、等于、非零等的條件判斷,這4位共有16種狀態,分別為:

條件碼

我們以Uboot啟動過程中的這句跳轉代碼分析下BL指令具體的執行過程。

  1. #ifndef CONFIG_SKIP_LOWLEVEL_INIT 
  2.  bl cpu_init_crit 
  3. #endif 

上述代碼對應的反匯編代碼如下:

  1. 33f000ac: eb000017  bl 33f00110 <cpu_init_crit> 
  1. 33f00110 <cpu_init_crit>: 
  2. 33f00110: e3a00000  mov r0, #0 ; 0x0 
  3. 33f00114: ee070f17  mcr 15, 0, r0, cr7, cr7, {0} 

當指令執行到33f000ac時,對應的機器碼為eb000017(1110_1011_0000_0000_0000_0000_0001_0111?),其中[31,28]高四位為條件碼,1110表示無條件執行。[25,27]位保留區域,24位表示是否帶有返回值,1表示帶有返回值,也就是BL指令。[23,0]為指令的操作數,0000_0000_0000_0000_0001_0111。

BL指令的跳轉地址是按照如下方式計算:

1、將指令中24位帶符號的補碼立即數擴展為32位(擴展其符號位)原數變成  0000_0000_0000_0000_0000_0000_0001_0111。

2、將此數左移兩位0000_0000_0000_0000_0000_0010_1000_0000 變成 0000_0000_0000_0000_0000_0000_0101_1100 =  0x0000005c

3、將得到的值加到PC寄存器中得到目標地址,由于ARM為3級流水線,此時的 pc = 33f000ac+8 = 33F000B4,pc = 33F000B4 + 0x0000005c = 33F00110?與圖中的cpu_init_crit的地址相等。

4  在算的過程中我們使用的始終是PC的值,假設程序在 0 地址處執行,那么計算方法一樣,pc 的值變了,計算出來的結果也隨之改變。所以 BL 的跳轉時是與位置無關的。

5. LDR執行過程分析

下圖為LDR指令的格式。圖片

LDR指令編碼格式

我們以下圖中的代碼作為例子分析下。

  1. ldr pc,=call_board_init_f 

對應的反匯編代碼如下:

  1. 33f000d0: e59ff324  ldr pc, [pc, #804] ; 33f003fc <fiq+0x5c> 
  1. 33f003fc: 33f000d4  .word 0x33f000d4 
  2. ........ 
  3. 33f000d4 <call_board_init_f>: 
  4. 33f000d4: e3a00000  mov r0, #0 ; 0x0 

 ldr pc, [pc, #804]這條指令為偽指令,編譯的時候會將call_board_init_f的鏈接地址存入一個固定的地址(鏈接時確定的),對于本條指令,這個地址就是33f000d4 。

上面的反匯編出來的 ldr pc,=call_board_init_f就變成了ldr pc, [pc, #804],由于ARM使用了流水線的原因,所以在執行 ldr pc,[ pc, #4 ]的時候 pc 不在這句代碼這里了,而是跑到了 pc+8的地方,這句代碼相當于 pc= *(pc+804+8)=33f000d0+32C=33f003fc ,所以會跳轉到33f003fc 地址取33f000d4 ,而 33f000d4 是存在代碼段中的一個常量,并不是計算出來的,不會隨程序的位置而改變,所以無論代碼和pc怎么變 *(pc+804) 的值時不會變的。

6. 總結

這樣,絕對跳轉中的固定地址就很好理解了,要跳轉地址的值在鏈接時就已經確定了,存在了一塊內存中。

相對跳轉時,反匯編bl 33f00110中的33f00110是根據pc計算出來的,當pc改變時,結果也會改變。所以,稱為相對跳轉,與當前位置無關。

本文參考

《ARM體系結構與編程》

https://www.cnblogs.com/dchipnau/p/5256039.html

本文轉載自微信公眾號「嵌入式與Linux那些事」,可以通過以下二維碼關注。轉載本文請聯系嵌入式與Linux那些事公眾號。

 

責任編輯:武曉燕 來源: 嵌入式與Linux那些事
相關推薦

2022-01-17 06:59:40

Grep指令linux

2023-09-26 00:53:37

B端搭建低代碼

2021-05-31 07:17:42

數據分析算法

2022-07-10 23:15:46

Go語言內存

2023-11-03 12:54:00

KAFKA探索中間件

2023-01-30 23:04:10

B-Treegolang優化

2022-03-08 17:52:58

TCP格式IP

2021-07-28 07:53:20

Github ActiDotnet 應用

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2022-03-31 18:59:43

數據庫InnoDBMySQL

2022-05-24 08:21:16

數據安全API

2023-06-30 08:18:51

敏捷開發模式

2023-08-10 08:28:46

網絡編程通信

2022-10-18 07:33:57

Maven構建工具

2023-08-04 08:20:56

DockerfileDocker工具

2021-08-27 07:06:09

DubboDocker技術

2021-01-12 05:08:49

DHCP協議模型

2023-09-10 21:42:31

點贊
收藏

51CTO技術棧公眾號

欧美一区二区大片| 国v精品久久久网| 亚洲无限av看| 国产高清av片| 午夜小视频福利在线观看| 国产成人鲁色资源国产91色综| 欧美激情2020午夜免费观看| 30一40一50老女人毛片| 香蕉久久一区| 欧美日韩免费一区| 最近看过的日韩成人| 免费av网站观看| 奇米精品一区二区三区四区| 欧美日韩福利在线观看| 在哪里可以看毛片| 亚洲国产精品免费视频| 色综合婷婷久久| 喜爱夜蒲2在线| 国产h在线观看| 国产91精品精华液一区二区三区 | 欧美日韩久久久久| 中文字幕在线观看一区二区三区| 黄色三级网站在线观看| 国产精品伦一区二区| 日本人妻一区二区三区| 国产成人黄色网址| 黑人精品一区二区三区| 免费久久99精品国产| 欧美精品激情在线观看| 国产欧美小视频| 黄色欧美网站| 欧美一区二区三区不卡| 国内自拍视频一区| 理论不卡电影大全神| 亚洲精品视频观看| 性欧美.com| 丰满大乳奶做爰ⅹxx视频| 国产不卡精品视男人的天堂| 性久久久久久久久| 日韩欧美国产激情| 岛国视频一区免费观看| jizz国产在线| 一区二区久久| 欧美成人精品一区| 国产极品美女在线| 日韩欧美一区二区三区在线视频| 久久亚洲电影| 亚洲免费影视第一页| 久久久在线免费观看| 国产乱码精品一区二区三区日韩精品 | 中文字幕中文字幕99| 久久精品蜜桃| 91麻豆国产福利在线观看| 国产高清精品一区二区三区| 国产成人精品毛片| 国产精品1区2区3区| 成人欧美一区二区三区在线 | 宅男在线国产精品| 九九热精品国产| 91成人短视频在线观看| 69p69国产精品| 日本特黄a级片| 成人午夜毛片| 欧美理论片在线| 在线观看av免费观看| 国产一区二区三区精品在线观看| 欧美精品 日韩| 国产一级片中文字幕| 日韩精品视频中文字幕| 日韩欧美一区二区免费| 在线中文字日产幕| 欧美日日夜夜| 尤物tv国产一区| 三级影片在线观看| 欧美成人久久| 久久久之久亚州精品露出| 日韩成年人视频| 香蕉国产精品偷在线观看不卡| 欧美在线一级va免费观看| 成人h动漫精品一区二区下载| 日韩高清不卡一区二区| 日韩av第一页| 国产精品高潮呻吟AV无码| 国产一区二区女| 国产一级二级三级精品| 精品乱码一区二区三四区视频| 国产欧美日韩亚州综合| 二级片在线观看| 99re6在线精品视频免费播放| 午夜精彩视频在线观看不卡| 久久精品网站视频| 成人国产精品久久| 亚洲第一黄色网| 成人免费网站黄| 四季av一区二区凹凸精品| 欧美二区在线播放| 久久国产黄色片| 精久久久久久久久久久| 风间由美久久久| 高清性色生活片在线观看| 亚洲免费av观看| 精品视频一区二区在线| 精品国产一区二| 日韩精品久久久久久久玫瑰园| wwwww黄色| 亚洲深爱激情| 亚洲最大的成人网| 免费播放片a高清在线观看| 亚洲色图另类专区| 国产成人av影视| 亚洲综合色婷婷在线观看| 亚洲精品之草原avav久久| 日韩精品123区| 日韩精品久久理论片| 51国偷自产一区二区三区| 高h视频在线| 婷婷丁香激情综合| 日韩av加勒比| 日本女优一区| 欧美亚洲第一页| 亚洲国产一二三区| 中文字幕一区二区视频| 欧美国产日韩在线播放| 国产精品tv| 久久99热精品这里久久精品| 中文字幕+乱码+中文| 不卡的电视剧免费网站有什么| 一区不卡字幕| 成人免费网站www网站高清| 亚洲第一区在线| 农村黄色一级片| 国产综合成人久久大片91| 日本一区不卡| 欧美极度另类| 亚洲免费伊人电影在线观看av| 日本少妇bbwbbw精品| 国产成人在线视频免费播放| 日韩高清国产精品| 97成人资源| 亚洲精品乱码久久久久久按摩观| 欧美日韩在线视频免费| 欧美精品aa| 精品国产午夜肉伦伦影院| 四虎国产精品永久在线国在线| 91精品韩国| 国产成人免费在线观看不卡| 亚洲精品成人a8198a| 日本美女一区| 亚洲人成免费电影| 欧美一区二区三区在线免费观看| 黄色av小说在线观看| 一区二区三区中文免费| 色综合视频在线观看| 免费不卡av在线| 亚洲日本va午夜在线电影| 欧美成人免费全部| 性生活黄色大片| 亚洲在线免费播放| yjizz视频| a91a精品视频在线观看| 久久国产一区二区| 波多视频一区| 尤物九九久久国产精品的分类| 亚洲婷婷久久综合| 国产精品国产三级国产aⅴ原创| 在线免费视频a| 欧美一区二区性| 国产清纯白嫩初高生在线观看91 | 日韩精品视频一二三| 国产一区二区三区天码| 国产精品视频网| 免费观看成人高潮| 日韩三级av在线播放| 国产一级视频在线| 欧美韩日高清| 日韩免费成人网| 久久久全国免费视频| 国产精品欧美一区二区三区不卡| 国产精品久久久久久久久久妞妞| 亚洲一区二区三| 丁香花在线高清完整版视频| 日韩国产欧美区| 国产一级片免费视频| 国产精品盗摄一区二区三区| 中文字幕avav| 亚洲欧美日韩一区在线观看| 午夜精品美女久久久久av福利| 五月天色综合| 午夜精品一区二区三区av| xxxxx日韩| 日韩欧美123| 亚洲影院在线播放| 最近中文字幕一区二区三区| 国产日韩视频一区| 日本最新不卡在线| 精品人妻大屁股白浆无码| 在线看成人短视频| 99高清视频有精品视频| 涩涩av在线| 久久久精品一区二区三区| 色婷婷av一区二区三区之e本道| 在线看国产日韩| 久久亚洲AV无码| 欧美韩国一区二区| 欧美夫妇交换xxx| 毛片不卡一区二区| 欧美亚洲精品一区二区| 色婷婷一区二区三区| 激情视频在线观看一区二区三区| 久久福利在线| 欧美亚洲激情在线| 午夜dj在线观看高清视频完整版 | 亚洲成av人片| 少妇高潮惨叫久久久久| 99久久国产综合色|国产精品| 一区二区在线免费看| 乱人伦精品视频在线观看| 欧美另类videosbestsex日本| 久久99国内| 国产乱码精品一区二区三区日韩精品 | 人人妻人人澡人人爽精品日本| 欧美怡红院视频| 亚洲天堂一区在线观看| 一区二区三区精品久久久| 992在线观看| 国产亚洲精品福利| 中文乱码人妻一区二区三区视频| 国产精品一区二区在线播放| 精品999在线| 久久婷婷一区| 女性女同性aⅴ免费观女性恋| 欧美不卡一区| 免费在线精品视频| 残酷重口调教一区二区| 免费在线成人av电影| 欧美精品中文字幕亚洲专区| 动漫3d精品一区二区三区| 久久亚洲精精品中文字幕| 国产在线观看精品| 成人激情视屏| 国产精品久久久久999| 在线女人免费视频| 91精品国产成人www| 77thz桃花论族在线观看| 欧美日韩爱爱视频| 在线播放 亚洲| 中文字幕日韩亚洲| 国产美女久久久| 欧美一级网址| 成人免费直播live| 精品视频91| 2022国产精品| 国产精一区二区| 亚洲最大激情中文字幕| 国产精品视频一区二区三区| 成人久久久久久| 国产精品久久免费视频| 亚洲r级在线观看| 中文字幕日韩在线| 黄色99视频| 国产在线观看91一区二区三区| 欧美日韩在线观看一区二区三区 | 亚洲国产成人爱av在线播放| 高潮一区二区三区乱码| 国产偷亚洲偷欧美偷精品| 黄色在线播放| 日韩在线观看免费网站| 黄色动漫在线观看| 欧美高清电影在线看| 成人ssswww在线播放| 欧美最猛黑人xxxx黑人猛叫黄| 激情开心成人网| 国产视频999| 无人区乱码一区二区三区| 精品麻豆av| 青青草91久久久久久久久| 三年中文高清在线观看第6集| 欧美视频二区| 欧美性大战久久久久xxx | 欧洲美女7788成人免费视频| 成人视屏在线观看| 91午夜在线播放| 欧美福利在线播放网址导航| 日本视频一区二区在线观看| 欧美韩国日本在线观看| 成人性生活视频免费看| 日韩偷拍自拍| 久久嫩草精品久久久久| 日韩一区二区a片免费观看| 中文字幕日本不卡| 国产性猛交普通话对白| 色狠狠色狠狠综合| 美女被啪啪一区二区| 欧美在线一卡| 自拍视频国产精品| 美女91在线| 国产精品久久久久久超碰| 久久在线观看| 91在线免费看网站| 国产女主播喷水高潮网红在线| 国产资源在线一区| 日本一卡二卡在线| 国产精品国产三级国产aⅴ原创 | 精品福利久久久| 免费看黄色a级片| 久久久一二三| 韩国三级在线看| 成人黄色图片网站| 欧美日韩一区精品| 亚洲乱码在线观看| 在线看片第一页欧美| 岛国毛片av在线| 国产精品久久久久av| 激情视频极品美女日韩| 伊人天天久久大香线蕉av色| 国产欧美亚洲一区| 久久久久久久久久久影视| 国产蜜臀av在线一区二区三区| 精品无码久久久久久久久| 欧美日韩免费不卡视频一区二区三区 | 亚洲男女在线观看| 亚洲欧美一区二区在线观看| 一级成人黄色片| 亚洲精品一区二区三区福利| 老司机精品视频在线观看6| 国产成人短视频| 欧美wwwwww| 国产精品高潮呻吟久久av无限| 六十路息与子猛烈交尾| gogo亚洲高清大胆美女人体| 一区二区三区欧美日| 欧美日韩综合精品| 在线高清av| 成人免费91在线看| 亚洲五月综合| 亚洲激情在线看| 中文av字幕一区| 国产第一页在线观看| 亚洲精品综合精品自拍| segui88久久综合| www.成人av| 欧美精品一区二区三区久久久竹菊| 2025韩国大尺度电影| 里番在线播放| 亚洲xxxx视频| 国产精品红桃| 亚洲影院色无极综合| 麻豆视频在线观看| 色综合一个色综合亚洲| 熟妇人妻中文av无码| 97视频在线观看视频免费视频| 第四色中文综合网| 97在线国产视频| 成人国产精品免费网站| 日韩字幕在线观看| 亚洲国产精品一区二区三区| 久久男人av资源站| 欧美大香线蕉线伊人久久国产精品| 国产精品毛片一区二区三区| 极品白嫩丰满美女无套| 欧美日韩一区二区免费在线观看 | 男女性色大片免费观看一区二区 | 欧美日韩一区二区综合| 色七七在线观看| 国产精品视频你懂的| 在线免费观看视频网站| 色偷偷亚洲男人天堂| 噜噜噜噜噜在线视频| 国产精品一区二区你懂的| 久久久久久无码精品人妻一区二区| 亚洲欧美偷拍另类a∨色屁股| va视频在线观看| 国内成人精品视频| 亚洲婷婷影院| 日韩av片专区| 亚洲在线一区二区三区| 日韩av资源| 国产精品欧美日韩久久| 欧美国产激情| 亚洲一级av无码毛片精品| 在线亚洲免费视频| h片在线免费观看| 精品一区二区三区国产| 日本视频一区二区| 青娱乐国产在线视频| 日韩精品在线观| 免费日韩成人| 国产精品videossex国产高清| 亚洲永久精品唐人导航网址| 日韩精品视频三区| 蜜臀av国内免费精品久久久夜夜| 久久精品99久久| 蜜芽一区二区三区| 久久久精品国产sm调教网站| 亚洲美女久久久| 成人免费观看49www在线观看| 日本欧美黄色片| 国产精品美女久久福利网站| 理论片中文字幕| 国产美女主播一区|