在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > GNU ARM匯編--(十二)arm匯編指令的B真的那么簡(jiǎn)單嗎?

            GNU ARM匯編--(十二)arm匯編指令的B真的那么簡(jiǎn)單嗎?

            作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201611/321719.htm

            對(duì)照匯編和反匯編的結(jié)果,一切正常.下面我們來(lái)看看ea00000e是如何表達(dá)b10000040 的?

            31 28 27 26 25 24 23 0
            cond 1 0 1 L signed_immed_24

            ea00000e轉(zhuǎn)換為二進(jìn)制后:

            31 28 27 26 25 24 23 0
            1110 1 0 1 0 0x00000e

            cond是1110,即是條件執(zhí)行的ALL,L為0表示指令是B,不是BL.signed_immed_24值為0x00000e.

            signed表示有符號(hào)數(shù).所以0x00000e就是+15,按照上圖的規(guī)則:

            0x10000000+14<<2+8 = 0x10000040

            這里的0x10000000等地址都是VMA(虛擬內(nèi)存地址),而B(niǎo)跳轉(zhuǎn)的地址是和PC相關(guān)的,所以這部分代碼是與位置無(wú)關(guān)的.

            注意上面等式中的+8與流水線有關(guān).

            B和BL的跳轉(zhuǎn)范圍是+-32MB,24bit的有符號(hào)數(shù),也就是-2^23--2^23,即-8MB--8MB,因?yàn)橛心莻€(gè)<<2,所以就是+-32MB了.

            可以再看一個(gè)例子:

            代碼如下:

            [cpp]view plaincopy
            1. ledloop:
            2. ldrr1,=0x1c0
            3. strr1,[r2]
            4. bldelay
            5. ldrr1,=0x1a0
            6. strr1,[r2]
            7. bldelay
            8. ldrr1,=0x160
            9. strr1,[r2]
            10. bldelay
            11. ldrr1,=0x0e0
            12. strr1,[r2]
            13. bldelay
            14. bledloop


            反匯編結(jié)果如下:

            [cpp]view plaincopy
            1. 100002f0:
            2. 100002f0:e3a01d07movr1,#448;0x1c0
            3. 100002f4:e5821000strr1,[r2]
            4. 100002f8:ebffffadbl100001b4
            5. 100002fc:e3a01e1amovr1,#416;0x1a0
            6. 10000300:e5821000strr1,[r2]
            7. 10000304:ebffffaabl100001b4
            8. 10000308:e3a01e16movr1,#352;0x160
            9. 1000030c:e5821000strr1,[r2]
            10. 10000310:ebffffa7bl100001b4
            11. 10000314:e3a010e0movr1,#224;0xe0
            12. 10000318:e5821000strr1,[r2]
            13. 1000031c:ebffffa4bl100001b4
            14. 10000320:eafffff2b100002f0


            同樣的:0x10000320+8+(-14)<<2 = 0x1000002f0

            結(jié)合官方文檔和兩個(gè)實(shí)例,才能真正明白B指令的一些細(xì)節(jié).而不是一些中文書(shū)上所說(shuō)的正確的但是表面的內(nèi)容.

            這么深入的分析指令B并不太麻煩,但是arm匯編有很多指令,不可能一一去分析.這里分析指令B,只是因?yàn)樘D(zhuǎn)指令在bootloader中很重要.而這里給出了一個(gè)方法,如果對(duì)LDR這種指令不清楚的話,可以用同樣的方法來(lái)分析.


            上一頁(yè) 1 2 下一頁(yè)

            關(guān)鍵詞: ARM匯編匯編指

            評(píng)論


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

            關(guān)閉