<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的入棧出棧具體的操作詳解

          ARM的入棧出棧具體的操作詳解

          作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
          ARM用ADS編譯的話,用的是FD 滿減 棧方式。順便說(shuō)下滿減 FD方式,入棧是先移動(dòng)SP,再存數(shù)據(jù);出棧是先存數(shù)據(jù),再移SP。

          我看的資料具體也就說(shuō)到這里了。

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

          看下面的例子:

          STMFD SP!, {R0-R3, R12, LR}

          。。。。。。


          LDMFD SP!, {R0-R3, R12, PC}^

          STMFD之后,SP就指向LR了,LDMFD 就把LR 出棧給了R0了,若這么理解的話肯定不對(duì)了??隙ㄟM(jìn)棧和出棧的順序是不一樣的,雖然表達(dá)方式上可能為了直觀都是從 低到高的寄存器。

          以前困惑的就是STMFD 命令 對(duì)于操作數(shù) 是按照什么順序壓棧的

          比如:STMFD sp!{R0-R5,LR} 進(jìn)棧順序是:

          高地址(1方式)

          LR

          R5

          R4

          ```````

          R0 <-sp

          低地址

          還是:

          高地址(2方式)

          R0

          R1

          ```

          R5

          LR <-sp

          低地址

          現(xiàn)在通過(guò)下表,可以輕松的解決這個(gè)問(wèn)題:

          尋址方式
          說(shuō)明
          pop
          =LDM
          push
          =STM
          FA
          遞增滿
          LDMFA
          LDMDA
          STMFA
          STMIB
          FD
          遞減滿
          LDMFD
          LDMIA
          STMFD
          STMDB
          EA
          遞增空
          LDMEA
          LDMDB
          STMEA
          STMIA
          ED
          遞減空
          LDMED
          LDMIB
          STMED
          STMDA

          按照?qǐng)D表,可知 STMFD對(duì)應(yīng)的是STMDB,根據(jù)arm指令手冊(cè),可知STMDB入棧順序是(1方式)

          而LDMFD對(duì)應(yīng)的是LDMIA,這樣這兩個(gè)操作就可以成功配對(duì)



          關(guān)鍵詞: ARM入棧出

          評(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); })();