新聞中心

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

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

        作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
        說句題外話,在輸入“指令”二字的時候,就想起了google搜索時,提示“令”不能搜索,要我換詞匯.如果不能說臟話,我真就無語了.

        在前面對具體芯片的各個基本模塊做完了學習后,在上一篇小結(jié)中自以為已經(jīng)具備了自己寫個bootloader的條件,但其實錯了,我還有很多基本的知識不了解.比如編譯鏈接gnu的linker script等等.也有很多地方只懂表面,沒有做深入的理解.

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

        在《GNU ARM匯編--(二)匯編編譯鏈接與運行》中,仿照網(wǎng)上的例子做了makefile和linker script,在那篇blog的末尾我寫道“根據(jù)google,做了上面的總結(jié),對GNU ARM匯編有了認識,并且對系統(tǒng)調(diào)用軟中斷,中斷處理,uboot異常向量表等等有了探究的欲望,也對elf格式和編譯鏈接有了興趣,根據(jù)自己的方向和精力,后續(xù)對這些內(nèi)容做一個或深或淺的學習.”

        當時看到了《linker and loader》,只是保存了,當時并沒有細看,作為一個程序員,其實很多時候我們并不懂程序的細節(jié).就像臺灣有個黑客關(guān)于“hello world”的分析,當初看了他的"hello world"系列ppt,就發(fā)現(xiàn)原來簡單的hello world里面有這么多不為人知的細節(jié).

        這些天翻看了《linker and loader》的前面幾節(jié),也翻了《程序員的自我修養(yǎng)--鏈接裝載和庫》,通讀了gnu.org的ld相關(guān)文檔linker script.自己還對gnu的這個文檔的大部分做了翻譯,在自己的筆記本上寫了好多頁,一根筆芯也用了大半,而且讓我有了久違寫字寫到手酸的感覺.覺得收獲不少.推薦去看看,值得的.

        廢話了這么多,這篇blog我倒不想寫linker script或者ELF的一些細節(jié).我想深究一下arm匯編指令中的B指令.

        很多網(wǎng)上的帖子都討論過arm匯編指令的B和LDR,這里我按照我的思路來:

        首先翻一下《ARM ArchitectureReference Manual》這份絕對權(quán)威的手冊:

        看完上面的英文,再結(jié)合下面的實際例子做個呼應:

        代碼如下:

        [html]view plaincopy
        1. _start:breset
        2. ......
        3. reset:
        4. ......


        反匯編如下:

        [cpp]view plaincopy
        1. 10000000<_start>:
        2. 10000000:ea00000eb10000040
        3. ......
        4. 10000040:


        上一頁 1 2 下一頁

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

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 日喀则市| 伊川县| 重庆市| 观塘区| 林周县| 平罗县| 佳木斯市| 会理县| 会宁县| 观塘区| 北安市| 商洛市| 富源县| 临洮县| 武清区| 汪清县| 寿宁县| 锡林浩特市| 江山市| 固镇县| 清水河县| 永靖县| 江北区| 扬州市| 松溪县| 乌鲁木齐县| 亳州市| 独山县| 麻城市| 苗栗县| 昌邑市| 云南省| 建宁县| 格尔木市| 沂南县| 彭山县| 辛集市| 红桥区| 卓资县| 海丰县| 维西|