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

          新聞中心

          ARM匯編----偽指令LTORG

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          LTORG用于聲明一個(gè)數(shù)據(jù)緩沖池,(也稱為文字池)的開始。在使用偽指令LDR時(shí),常常需要在適當(dāng)?shù)牡胤郊尤隠TORG聲明數(shù)據(jù)緩沖池,LDR加載的數(shù)據(jù)暫時(shí)放于數(shù)據(jù)緩沖池。

          語(yǔ)法LTORG

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

          使用說(shuō)明:

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

          LDR偽指令在匯編時(shí),如果立即數(shù)可以用表示的話就替換為MOV或MVN指令;如果不能用其表示則需要將該立即數(shù)放到一個(gè)文字池中,并生成一條將該文字池內(nèi)容加載到目標(biāo)寄存器的LDR指令。而使用LDR指令必須保證文字池在其可以訪問(wèn)的地址范圍之內(nèi),對(duì)于ARM指令集來(lái)說(shuō)就是4KB,所以必須在LDR指令前后4KB的范圍內(nèi)用LTORG顯式地在代碼段中添加一個(gè)文字池。

          LTORG是在此指令出現(xiàn)的地方放一個(gè)文本池(literal pool).在ARM匯編中常用到

          ldr r0, =instruction將地址instruction載入r0.

          此時(shí)編譯器將ldr盡可能的轉(zhuǎn)變成mov或mvn指令。

          如果轉(zhuǎn)變不成,將產(chǎn)生一個(gè)ldr指令,通過(guò)pc相對(duì)地址從一塊保存常數(shù)的內(nèi)存區(qū)讀出instruction的值。此內(nèi)存區(qū)既是文本池。一般的,文本池放在END指令之后的地方。但是,如果偏移地址大于4k空間, ldr指令會(huì)出錯(cuò)(因?yàn)閘dr的相對(duì)偏移地址為12-bit的值).此時(shí)使用LTORG放到會(huì)出錯(cuò)的ldr指令附近,以解決此問(wèn)題。編譯器會(huì)收集沒(méi)有分配的ldr的值放到此文本池中。



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

          評(píng)論


          技術(shù)專區(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); })();