<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

ARM堆棧方式

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
初學(xué)ARM指令時(shí),如果從字面上理解滿(mǎn)堆棧和空堆棧很有可能會(huì )歪曲它們的意思??梢韵胂笠幌?,“滿(mǎn)堆棧”就是一個(gè)滿(mǎn)的堆棧,不能再存儲數據了;而“空堆棧”就是一個(gè)空的堆棧,沒(méi)有被使用的堆棧,呵呵,這樣理解的話(huà)那就錯了。

實(shí)際上“滿(mǎn)堆棧”和“空堆棧”確切的說(shuō)應該是“滿(mǎn)棧”或者是“空棧”,我們只是習慣了把棧叫做堆棧。而二者深層的意思是說(shuō)的“位置”或者“地址”,而不是“堆棧”。如果叫“滿(mǎn)位置”或者“空位置”更容易理解一些。下面是《ARM嵌入式系統開(kāi)發(fā) --軟件設計與優(yōu)化》書(shū)中給的解釋?zhuān)?/p>本文引用地址:http://dyxdggzs.com/article/201611/316669.htm

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

空堆棧(empty stack,"E")是指sp指向堆棧的第一個(gè)沒(méi)有使用的地址或者空位置(也就是說(shuō)sp指向堆棧最后一個(gè)數據項的下一個(gè)位置)。

滿(mǎn)堆棧的關(guān)鍵詞是最后一個(gè)已使用的地址,空堆棧是第一個(gè)沒(méi)有使用的地址。

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

一種是向上生長(cháng),就是向著(zhù)高地址方向生長(cháng),稱(chēng)為遞增堆棧。
一種是向下生長(cháng),就是向著(zhù)低地址方向生長(cháng),稱(chēng)為遞減堆棧。

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

入棧規律:
(1)滿(mǎn)堆棧操作先調整SP,然后存入數據。
(2)空堆棧操作先存入數據,然后調整SP。
(3)遞增堆棧調整SP時(shí),執行SP=SP+4
(4)遞減堆棧調整SP時(shí),執行SP=SP-4

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

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

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

假設初始SP為0x0400,那么執行完畢后內存0x03E4-0x0403保存寄存器R4-R11的內容。
實(shí)際應用中,只選用一種方式使用就可以了。最常用最典型的就是后綴為“FD”時(shí)的結構,這是人們熟悉的堆棧結構。
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



關(guān)鍵詞: ARM堆棧方

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>