在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            ARM堆棧方式

            作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
            初學ARM指令時,如果從字面上理解滿堆棧和空堆棧很有可能會歪曲它們的意思。可以想象一下,“滿堆棧”就是一個滿的堆棧,不能再存儲數(shù)據(jù)了;而“空堆棧”就是一個空的堆棧,沒有被使用的堆棧,呵呵,這樣理解的話那就錯了。

            實際上“滿堆棧”和“空堆棧”確切的說應該是“滿棧”或者是“空棧”,我們只是習慣了把棧叫做堆棧。而二者深層的意思是說的“位置”或者“地址”,而不是“堆棧”。如果叫“滿位置”或者“空位置”更容易理解一些。下面是《ARM嵌入式系統(tǒng)開發(fā) --軟件設計與優(yōu)化》書中給的解釋:

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

            滿堆棧(full stack,“F”)是指堆棧指針指向堆棧的最后一個已使用的地址或者滿位置(也就是sp指向堆棧最后一個數(shù)據(jù)項位置)。

            空堆棧(empty stack,"E")是指sp指向堆棧的第一個沒有使用的地址或者空位置(也就是說sp指向堆棧最后一個數(shù)據(jù)項的下一個位置)。

            滿堆棧的關鍵詞是最后一個已使用的地址,空堆棧是第一個沒有使用的地址。

            存儲器堆??梢苑譃閮煞N:

            一種是向上生長,就是向著高地址方向生長,稱為遞增堆棧。
            一種是向下生長,就是向著低地址方向生長,稱為遞減堆棧。

            這樣,就有四種組合:滿遞增(FA)、空遞增(EA)、滿遞減(FD)、空遞減(ED)。

            入棧規(guī)律:
            (1)滿堆棧操作先調(diào)整SP,然后存入數(shù)據(jù)。
            (2)空堆棧操作先存入數(shù)據(jù),然后調(diào)整SP。
            (3)遞增堆棧調(diào)整SP時,執(zhí)行SP=SP+4
            (4)遞減堆棧調(diào)整SP時,執(zhí)行SP=SP-4

            出棧規(guī)律正好與入棧相反,也就是入棧的逆操作。
            (1)空堆棧操作先調(diào)整SP,然后存入數(shù)據(jù)。
            (2)滿堆棧操作先存入數(shù)據(jù),然后調(diào)整SP。
            (3)遞減堆棧調(diào)整SP時,執(zhí)行SP=SP+4
            (4)遞增堆棧調(diào)整SP時,執(zhí)行SP=SP-4

            明確了這四個規(guī)律,就很容易分析各種堆棧尋址方式對應的堆棧分布情況了。
            stmfd sp!, {r4-r11}

            假設初始SP為0x0400,那么執(zhí)行完畢后內(nèi)存0x03E0-0x03FF保存寄存器R4-R11的內(nèi)容。
            stmed sp!, {r4-r11}

            假設初始SP為0x0400,那么執(zhí)行完畢后內(nèi)存0x03E4-0x0403保存寄存器R4-R11的內(nèi)容。
            實際應用中,只選用一種方式使用就可以了。最常用最典型的就是后綴為“FD”時的結構,這是人們熟悉的堆棧結構。
            stmfd sp!, {r4-r11, lr}
            ldmfd sp!, {r4-r11, lr}

            例1:

            PRE

            r1 = 0X00000002

            r4 = 0x00000003

            sp = 0x00080014

            STMFD sp!, {r1, r4}

            POST

            r1 = 0X00000002

            r4 = 0x00000003

            sp = 0x0008000c

            例2

            PRE

            r1 = 0X00000002

            r4 = 0x00000003

            sp = 0x00080010

            STMFD sp!, {r1, r4}

            POST

            r1 = 0X00000002

            r4 = 0x00000003

            sp = 0x00080008



            關鍵詞: ARM堆棧方

            評論


            技術專區(qū)

            關閉