<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          ARM匯編中LDR與LTORG的關系

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

          本文引用地址:http://www.ex-cimer.com/article/201611/318784.htm

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

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

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

          1,LDRRd,

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

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

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

          LTORG用于聲明一個數(shù)據(jù)緩沖池,(也稱為文字池)的開始。在使用偽指令LDR時,常常需要在適當?shù)牡胤郊尤隠TORG聲明數(shù)據(jù)緩沖池,LDR加載的數(shù)據(jù)暫時被編譯器放于數(shù)據(jù)緩沖池中。

          使用說明:

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

          示例代碼:

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

          Start BL funcl

          ;code

          funcl //子程序

          ;code

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

          MOV PC,lr //子程序結束

          LTORG//定義數(shù)據(jù)緩沖池

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

          END//程序結束

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



          關鍵詞: ARM匯編LDRLTOR

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();