天天看點

ARM資料棧的使用規則

ARM資料棧的使用規則

     資料棧有兩個增長方向:向記憶體位址減小的方向增長時,稱為DESCENDING棧;向記憶體位址增長的方向增長時,稱為ASCENDING棧。

     所謂資料棧的增長方向就是移動棧指針。當棧指針指向棧頂元素(最後一個入棧的資料)時,稱為FULL棧;當棧指針指向棧頂元素(最後一個入棧的資料)相鄰的一個空的資料單元時,稱為EMPTY棧。

     綜合這兩點,資料棧可以分為以下4種。

     1.FD:Full Descending,滿遞減。

     2.ED: Empty Descending,空遞減。

     3.FA:Full Ascending,滿遞增。

     4.EA:Empty Ascending,空遞增。

     ARM的ATPCS規定資料棧為FD類型,并且對資料棧的操作是8位元組對齊的。使用stmdb/ldmia批量通路記憶體指令來操作FD資料棧。

     使用stmdb指令往資料棧中儲存内容時,先遞減sp指針,再儲存資料,使用ldmia指令從資料棧中恢複資料時,先獲得資料,再遞增sp指針,sp指針總是指向棧頂元素,這剛好是FD棧的定義