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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 多寄存器加載/存儲指令的8種模式

          多寄存器加載/存儲指令的8種模式

          作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          多寄存器加載/存儲指令8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。
          模式 說明模式 說明
          IA 每次傳送后地址加4 FD 滿遞減堆棧
          IB 每次傳送前地址加4 ED 空遞減堆棧
          DA 每次傳送后地址減4 FA 滿遞增堆棧
          DB 每次傳送前地址減4 EA 空遞增堆棧
          數(shù)據(jù)塊傳送操作 堆棧操作
          進行數(shù)據(jù)復(fù)制時,先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進行讀取和存儲。
          進行堆棧操作操作時,要先設(shè)置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實現(xiàn)堆棧操作。

          當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時,稱為滿堆棧(Full Stack);

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

          當(dāng)堆棧指針指向下一個將要放入數(shù)據(jù)的空位置時,稱為空堆棧(Empty Stack)。

          同時,根據(jù)堆棧的生成方式,又可以分為遞增堆棧(Ascending Stack)和遞減堆棧(DecendingStack)。

          當(dāng)堆棧由低地址向高地址生成時,稱為遞增堆棧,當(dāng)堆棧由高地址向低地址生成時,稱為遞減堆棧。

          這樣就有四種類型的堆棧工作方式,ARM 微處理器支持這四種類型的堆棧工作方式,

          即:

          ◎ Full descending 滿遞減堆棧——FD 堆棧首部是高地址,堆棧向低地址增長。棧指針總是指向堆棧最后一個元素(最后一個元素是最后壓入的數(shù)據(jù))。 ARM-Thumb過程調(diào)用標(biāo)準(zhǔn)和ARM、Thumb C/C++ 編譯器總是使用Full descending 類型堆棧。

          ◎ Full ascending 滿遞增堆棧——FA 堆棧首部是低地址,堆棧向高地址增長。棧指針總是指向堆棧最后一個元素(最后一個元素是最后壓入的數(shù)據(jù))。

          ◎ Empty descending 空遞減堆棧——ED 堆棧首部是高地址,堆棧向低地址增長。棧指針總是指向下一個將要放入數(shù)據(jù)的空位置。

          ◎ Empty ascending 空遞增堆棧——EA 堆棧首部是低地址,堆棧向高地址增長。棧指針總是指向下一個將要放入數(shù)據(jù)的空位置。

          在ARM中,一般是滿堆棧,堆棧生長方向是從上向下遞減的(51相反為遞增),在操作系統(tǒng)的一直過程中,與CPU相關(guān)部分的一直肯定會涉及到堆棧生長方向的定義。

          在ARM中我們定義如下:

          #define OS_STK_GROWTH 1 //從上向下遞減 UCOS51中相同的定義如下:

          #define OS_STK_GROWTH 0 //從下向上遞增

          arm堆棧的組織結(jié)構(gòu)是 滿棧降 的形式,滿棧即sp是要停留在最后一個進棧元素,降:就是堆棧的增長方向是從高地址向低地址發(fā)展。 arm對于堆棧的操作一般采用 LDMFD(pop)和STMFD (push) 兩個命令。 以前困惑的就是STMFD 命令 對于操作數(shù)是按照什么順序壓棧的

          比如:STMFD sp!{R0-R5,LR} 進棧順序是:

          高地址(1方式) LR R5 R4 ``````` R0 <-sp 低地址

          高地址(2方式) R0 R1 ``` R5 LR <-sp 低地址

          現(xiàn)在通過下表,可以輕松的解決這個問題:
          尋址方式說明pop=LDMpush=STM
          FA遞增滿LDMFALDMDASTMFASTMIB
          FD遞減滿LDMFDLDMIASTMFDSTMDB
          EA遞增空LDMEALDMDBSTMEASTMIA
          ED遞減空LDMEDLDMIBSTMEDSTMDA

          可以輕松的解決這個問題: 尋址方式說明 pop =LDM push =STM FA 遞增滿 LDMFA LDMDA STMFA STMIB FD 遞減滿 LDMFD LDMIA STMFD STMDB EA 遞增空 LDMEA LDMDB STMEA STMIA ED 遞減空 LDMED LDMIB STMED STMDA 按照圖表,可知 STMFD對應(yīng)的是STMDB,根據(jù)arm指令手冊,可知STMDB入棧順序是(1方式)而LDMFD對應(yīng)的是LDMIA,這樣這兩個操作就可以成功配對:




          評論


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