在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            多寄存器加載/存儲(chǔ)指令的8種模式

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

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

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

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

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

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

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

            即:

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

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

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

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

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

            在ARM中我們定義如下:

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

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

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

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

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

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

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

            可以輕松的解決這個(gè)問題: 尋址方式說明 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ì):




            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉