精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

后入内射欧美99二区视频| 国产性猛交xx乱| 免费看男女www网站入口在线| 成人黄色网址在线观看| 日韩美女av在线免费观看| 免费视频91蜜桃| 99久久这里有精品| 亚洲成av人片观看| 日本成人黄色免费看| 国产毛片毛片毛片毛片| 99精品热视频只有精品10| 伊人伊人伊人久久| 欧美xxxx日本和非洲| 在线成人视屏| 亚洲一区二区3| 日韩电影免费观看高清完整| 国产三级在线观看视频| 久久免费高清| 欧美日韩国产成人在线| 男人舔女人下部高潮全视频| 日韩欧洲国产| 欧美性一二三区| av免费看网址| 黄色免费在线观看| 国产亚洲午夜高清国产拍精品| 亚洲va久久久噜噜噜| 日本免费在线观看视频| 欧美粗暴jizz性欧美20| 永久免费精品影视网站| 插我舔内射18免费视频| 高清一区二区| 欧美在线一二三| 久色视频在线播放| av片在线观看免费| 国产精品欧美极品| 欧美日韩亚洲一区二区三区四区| 亚洲国产精品欧美久久| 久久机这里只有精品| 欧美在线观看一区二区三区| 在线小视频你懂的| 日韩一区二区三区色| 欧美日韩视频专区在线播放| 97av视频在线观看| 成人免费网站观看| 亚洲午夜免费电影| 国产91视频一区| 日本精品一区二区三区在线播放| 久久久久久免费毛片精品| 国产日韩欧美二区| 日韩一区二区三区在线观看视频| 国产成人一区二区精品非洲| 91午夜在线播放| 18国产免费视频| 日韩国产一区二| 国产精品1区2区在线观看 | 伊人精品一区| 日韩成人在线视频网站| 欧美一级片黄色| 国产人妖ts一区二区| 精品少妇一区二区三区在线播放 | 久久一区二区三区视频| 亚洲福利国产| 日韩视频在线一区| 婷婷丁香综合网| 午夜精品一区二区三区国产| 久久久av电影| 亚洲天堂黄色片| 欧美伊人久久| 国自在线精品视频| 午夜精品三级久久久有码| 亚洲综合国产激情另类一区| 日本精品久久久| 久久久久久无码午夜精品直播| 丝袜美腿成人在线| 成人疯狂猛交xxx| 国产人妻精品一区二区三| 国产高清久久久| 好吊色欧美一区二区三区| 国产美女视频一区二区三区| 中文欧美字幕免费| 久久久无码中文字幕久...| 超级碰碰不卡在线视频| 欧美日韩中文字幕在线| 欧美精品一区二区三区蜜桃| 可以在线看的av网站| 涩涩涩在线视频| 欧美亚洲自拍偷拍| 色偷偷中文字幕| 免费萌白酱国产一区二区三区| 亚洲欧美成人精品| 日本黄色免费片| 激情丁香综合| 国产精品美女无圣光视频| 99久久免费国产精精品| 99精品视频一区二区| 日韩欧美一区二区三区四区| 性欧美videoshd高清| 欧美日韩在线看| 久久人人爽av| 日韩动漫一区| 久久不射热爱视频精品| 国产精品第5页| 国产九九视频一区二区三区| 欧美二区在线| 欧洲性视频在线播放| 欧洲精品中文字幕| 午夜男人的天堂| 91九色精品| 国产精品爱啪在线线免费观看| 国产成人免费看一级大黄| 久久日韩精品一区二区五区| 日本a级片在线播放| yy6080久久伦理一区二区| 亚洲精品在线电影| 日韩av毛片在线观看| 日韩一区二区免费看| 国产精品高潮在线| 熟妇人妻av无码一区二区三区| 国产精品入口麻豆原神| 日韩中字在线观看| 99精品女人在线观看免费视频| 日韩第一页在线| 亚洲香蕉av在线一区二区三区| 日韩成人av一区二区| 青青草国产成人a∨下载安卓| 久久天天躁狠狠躁夜夜躁2014| 国产www在线| 国产高清不卡二三区| 日韩久久精品一区二区三区| 国产99re66在线视频| 欧美人伦禁忌dvd放荡欲情| 日韩av无码一区二区三区不卡 | 污污的视频在线免费观看| 亚洲一区日韩| 成人欧美一区二区三区视频 | 欧美国产日韩一区二区三区| 中文字幕人妻精品一区| 久久精品一区蜜桃臀影院| www.日本在线视频| 国模大尺度视频一区二区| 国产一区二区av| 91porny在线| 成人美女视频在线观看| 欧美又粗又长又爽做受| 91精品亚洲一区在线观看| 一本大道亚洲视频| 91香蕉在线视频| 成人免费观看视频| 日本精品久久久久久久久久| 无人区乱码一区二区三区| 久久久精品999| 一本大道伊人av久久综合| 日本一二三四高清不卡| 日韩 欧美 高清| 日韩电影不卡一区| 欧美黑人xxx| 超碰免费在线97| 亚洲欧美色综合| 午夜视频在线网站| 色爱综合网欧美| 国产精品久久久一区| 国内在线免费高清视频| 欧美日韩一区二区在线视频| 免费看日本黄色片| 日本午夜精品视频在线观看| 日本在线观看不卡| 欧美色片在线观看| 亚洲男人的天堂在线| 午夜久久久久久久久久影院| 国产色综合一区| 天美星空大象mv在线观看视频| 亚洲精品国模| 国产精品99一区| 高清在线观看av| 56国语精品自产拍在线观看| 污污的视频在线免费观看| 国产精品一区在线观看你懂的| www.69av| 欧美日韩另类图片| 久久久久亚洲精品| 狠狠狠综合7777久夜色撩人| 欧洲视频一区二区| 永久久久久久久| 国产·精品毛片| 男人日女人视频网站| 女同一区二区三区| 国产精品直播网红| h片在线播放| 亚洲精品aⅴ中文字幕乱码| 亚洲AV无码成人精品区东京热| 国产欧美一二三区| 中文字幕55页| 草美女在线观看| 懂色av一区二区三区免费看| 老司机激情视频| 日韩av影院| 国产美女高潮久久白浆| 2024最新电影免费在线观看| 67194成人在线观看| 国产成人精品a视频一区| 久久一留热品黄| 图片区乱熟图片区亚洲| 亚洲少妇一区| 亚洲自拍的二区三区| 欧美一级三级| 国产精品久久久久秋霞鲁丝| 在线中文字幕视频观看| 日韩精品电影网| 国产又粗又猛又黄又爽| 一区二区三区欧美久久| 成人小视频免费看| 粉嫩aⅴ一区二区三区四区五区| 免费在线观看毛片网站| 亚洲久久久久| 欧美高清性xxxxhdvideosex| 精品国产亚洲日本| 欧美在线一级视频| 久草资源在线观看| 亚洲男人天堂2023| 99久久久无码国产精品免费| 岛国av一区二区| 久久精品美女视频| 中文字幕亚洲一区二区va在线| 50一60岁老妇女毛片| 国内精品视频666| 无码无遮挡又大又爽又黄的视频| 欧美在线免费一级片| 欧美一区国产一区| 2021年精品国产福利在线| 国产精品视频午夜| 丁香花电影在线观看完整版| 久久精品亚洲一区| 国产大学生校花援交在线播放| 精品国产电影一区二区 | 欧美日精品一区视频| 日本中文字幕第一页| 亚洲一区在线观看免费观看电影高清 | 成人香蕉视频| 久久欧美在线电影| 制服丝袜中文字幕在线| 日韩视频精品在线| 菠萝蜜视频国产在线播放| 亚洲天堂男人天堂女人天堂| 日本久久一级片| 精品人伦一区二区色婷婷| 亚洲天堂avav| 欧美美女黄视频| 中文字幕久久久久| 91福利在线播放| 日本中文字幕在线| 精品成人乱色一区二区| 国产成人精品片| 亚洲成a人片在线不卡一二三区| 欧美黄色aaa| 国产精品不卡视频| 国产美女高潮视频| 亚洲精品国产无套在线观| 中文字幕无码日韩专区免费 | 久久草.com| 欧美绝顶高潮抽搐喷水合集| 国产日韩精品久久| 亚洲一区二区免费在线观看| 国产精品免费观看高清| 第四色中文综合网| 极品尤物一区二区三区| 色综合久久中文| 国产成人免费观看| 国产精品极品国产中出| 国产日韩精品一区观看| 免费成人蒂法| 美女主播视频一区| 国际精品欧美精品| 五月天久久狠狠| 色婷婷色综合| 激情五月婷婷六月| 一二三区精品| 黄色动漫网站入口| 日韩高清在线不卡| 浮妇高潮喷白浆视频| 日韩 欧美一区二区三区| 亚欧美在线观看| 国产精品一区在线观看乱码| 欧美成人精品一区二区综合免费| 91免费观看视频在线| 人妻视频一区二区| 国产精品久久久久7777按摩| 黑鬼狂亚洲人videos| 亚洲高清免费视频| 波多野结衣爱爱| 91精品国产欧美一区二区18 | 国产一区二区三区精品欧美日韩一区二区三区 | 乐播av一区二区三区| 国产精品国产三级国产专播品爱网 | 亚洲国产一区二区在线播放| 91玉足脚交白嫩脚丫| 国产精品视频看| 欧美交换国产一区内射| 欧美日韩精品在线| 在线观看中文字幕码| 精品国产免费一区二区三区香蕉| 欧美一区二区少妇| 久久精品成人一区二区三区| 国产探花视频在线观看| 日本高清久久天堂| www.成人网| 日本中文不卡| 欧美先锋影音| 美女一区二区三区视频| 99这里只有久久精品视频| 精品一区二区6| 亚洲成人av免费| 一级做a爱片久久毛片| 日韩精品在线播放| av在线免费播放| 国产精品99久久99久久久二8| 中文字幕区一区二区三| 日本午夜精品电影| 国产亚洲午夜| 天天操精品视频| 国产午夜精品福利| 精品小视频在线观看| 欧美一区三区四区| 国产高清视频在线| 91国产美女在线观看| 精品一区91| 夜夜爽99久久国产综合精品女不卡| 激情亚洲网站| 最新免费av网址| 久久久www成人免费无遮挡大片| 日韩三级在线观看视频| 91九色02白丝porn| 黄色片一区二区| 成人444kkkk在线观看| 欧美色片在线观看| 蜜桃av噜噜一区二区三| 欧美影院一区| 性生交大片免费看l| 国产精品你懂的在线欣赏| 日韩久久中文字幕| 日韩欧美一级二级三级久久久| 免费在线视频欧美| 国产精品一香蕉国产线看观看| 精品一区欧美| 2018中文字幕第一页| 白白色 亚洲乱淫| 久久伊人成人网| 日韩片之四级片| 福利成人在线观看| 国产精品美女主播| 精品产国自在拍| 老熟妇仑乱视频一区二区 | 91久久久久久久| 成人网18免费网站| 国产色视频在线播放| 亚洲国产成人自拍| 1级黄色大片儿| 亚洲国产欧美一区二区三区久久| 欧美xxx黑人xxx水蜜桃| 亚洲xxxxx性| 欧美日韩 国产精品| www国产视频| 黄色一区二区在线观看| 日韩一级在线播放| 国产va免费精品高清在线观看| 久久99性xxx老妇胖精品| 国产日韩一区二区在线观看| 91首页免费视频| 特级西西444www高清大视频| 中文字幕日韩欧美在线| 国产精品成人国产| 一区二区三区视频| 国产精品白丝av| 久久精品免费av| 亚洲男人的天堂网站| 一二三四视频在线中文| 欧洲成人一区二区| 蜜臀av国产精品久久久久| 黄色香蕉视频在线观看| 精品国产乱码久久久久久老虎| 成人免费网站观看| 日本高清不卡一区二区三| 老牛影视一区二区三区| 在线观看亚洲网站| 亚洲激情视频在线播放| 欧美特大特白屁股xxxx| 中文字幕中文字幕在线中一区高清| 国产一区视频在线看| 免费一级片在线观看| 亚洲精品久久久久久下一站| 99精品在免费线偷拍| 青草全福视在线| 99国产精品久久久久| 亚洲一卡二卡在线观看| 欧美刺激性大交免费视频| 国内精品免费| 好男人www社区| 亚洲高清在线视频| av亚洲在线| 国产精品免费视频一区二区| 日韩成人午夜电影|