滿堆棧與空堆棧__嵌入式

來源:互聯網
上載者:User

     初學ARM指令時,如果從字面上理解滿堆棧和空堆棧很有可能會歪曲它們的意思。可以想象一下,“滿堆棧”就是一個滿的堆棧,不能再儲存資料了;而“空堆棧”就是一個空的堆棧,沒有被使用的堆棧,呵呵,這樣理解的話那就錯了。

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

    滿堆棧(full stack,“F”)是指堆棧指標指向堆棧的最後一個已使用的地址或者滿位置(也就是sp指向堆棧最後一個資料項目位置)。

    空堆棧(empty stack,"E")是指sp指向堆棧的第一個沒有使用的地址或者空位置(也就是說sp指向堆棧最後一個資料項目的下一個位置)。

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

 

 

  

 

    ARM體繫結構使用多寄存器指令load-store來完成堆棧操作。在指令上加上尾碼FA、FD、EA、ED(F-滿位置,E-空位置,-遞增,D-遞減)來表示sp指標的定址方式,如FA表示遞增滿。

 

    下面是 《ARM嵌入式系統開發 --軟體設計與最佳化》書中的兩個例子,但是第一個例子好像是有錯誤。將sp=0x00080014寫成了0x00000004,這裡改正過來了。其中1例子說明滿棧,2例子說明了空棧。

    例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

   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.