新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM匯編中LDR與LTORG的關系

        ARM匯編中LDR與LTORG的關系

        作者: 時間:2016-11-20 來源:網絡 收藏
        看了arm匯編語言語法一個多月了。總算入門了。當然還有很多東西值得繼續(xù)努力推敲滴。

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

        最近對LDRLTORG有了一些新的認識。

        LDR是一個比較的指令。作用是從存儲器到寄存器的單一數據讀取指令。它有19條指令格式。

        其中有兩條格式為宏指令(macro),格式如下:

        1,LDRRd,

        2,LDR Rd,=<32-bit-value>

        這里重點分析下第二條宏指令。它會被編譯器編譯成一條指令,把給定的32位數值保存到寄存器Rd.通常這掉指令是LDRRd,[pc,#],這個32位數保存在以地址(pc+開始的一個文字池(literal pool)中。

        關于指令LDRRd,[pc,#],大家就要復習一下arm匯編的"單寄存器load-store指令的尋址方式"了。這里使用到了它的前變址尋址方式。 pc的值不變,尋找的內存值為mem[pc+offset]。

        LTORG用于聲明一個數據緩沖池,(也稱為文字池)的開始。在使用偽指令LDR時,常常需要在適當的地方加入LTORG聲明數據緩沖池,LDR加載的數據暫時被編譯器放于數據緩沖池中。

        使用說明:

        當程序中使用LDR之類的指令時,數據緩沖池的使用可能越界。為防止越界發(fā)生,可使用LTONG偽操作定義數據緩沖池。通常大的代碼段可以使用多個數據緩沖池。ARM匯編編譯器一般把數據緩沖池放在代碼段的最后面,即下一代碼段開始之前,或者END偽操作之前。LTORG偽操作通常放在無條件跳轉指令之后,或者子程序返回指令之后,這樣處理器就不會錯誤的將數據緩沖池中的數據當作指令來執(zhí)行。

        示例代碼:

        AREA Example ,CODE,READONLY; //聲明一個代碼段,名稱為Example,屬性為只讀

        Start BL funcl

        ;code

        funcl //子程序

        ;code

        LDR R1,=0x800 //將0X800加載到R1

        MOV PC,lr //子程序結束

        LTORG//定義數據緩沖池

        data SPACE 4200//從當前開始分配40字節(jié)的內存單元并初始化為0

        END//程序結束

        0x800的值被編譯器暫時放在了data[0-3]字段中。



        關鍵詞: ARM匯編LDRLTOR

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 石楼县| 都匀市| 安岳县| 富民县| 乌兰察布市| 桃源县| 彩票| 琼结县| 余江县| 剑阁县| 湟中县| 德安县| 崇州市| 盈江县| 米易县| 甘泉县| 灵山县| 邵阳县| 石城县| 中超| 绵阳市| 当涂县| 女性| 衡东县| 长春市| 邻水| 启东市| 青铜峡市| 潢川县| 保亭| 平邑县| 伊通| 安泽县| 五华县| 图木舒克市| 淮南市| 贵州省| 扶风县| 德令哈市| 旅游| 于田县|