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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM匯編中LDR與LTORG的關(guān)系

          ARM匯編中LDR與LTORG的關(guān)系

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          看了arm匯編語(yǔ)言語(yǔ)法一個(gè)多月了??偹闳腴T(mén)了。當(dāng)然還有很多東西值得繼續(xù)努力推敲滴。

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

          最近對(duì)LDRLTORG有了一些新的認(rèn)識(shí)。

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

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

          1,LDRRd,

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

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

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

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

          使用說(shuō)明:

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

          示例代碼:

          AREA Example ,CODE,READONLY; //聲明一個(gè)代碼段,名稱(chēng)為Example,屬性為只讀

          Start BL funcl

          ;code

          funcl //子程序

          ;code

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

          MOV PC,lr //子程序結(jié)束

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

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

          END//程序結(jié)束

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



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

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁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); })();