當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(full stack),而當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊(empty stack)。
同時,根據堆疊的生成方式,又可以分為遞增堆疊(ascending stack)和遞減堆疊(decendingstack),當堆疊由低位址向高位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞減堆疊。
這樣就有四種型別的堆疊工作方式,arm 微處理器支援這四種型別的堆疊工作方式,即:
◎ full descending 滿遞減堆疊——fd
堆疊首部是高位址,堆疊向低位址增長。棧指標總是指向堆疊最後乙個元素(最後乙個元素是最後壓入的資料)。
arm-thumb過程呼叫標準和arm、thumb c/c++ 編譯器總是使用full descending 型別堆疊。
◎ full ascending 滿遞增堆疊——fa
堆疊首部是低位址,堆疊向高位址增長。棧指標總是指向堆疊最後乙個元素(最後乙個元素是最後壓入的資料)。
◎ empty descending 空遞減堆疊——ed
堆疊首部是高位址,堆疊向低位址增長。棧指標總是指向下乙個將要放入資料的空位置。
◎ empty ascending 空遞增堆疊——ea
堆疊首部是低位址,堆疊向高位址增長。棧指標總是指向下乙個將要放入資料的空位置。
在arm中,一般是滿堆疊,堆疊生長方向是從上向下遞減的(51相反為遞增),在作業系統的一直過程中,與cpu相關部分的一直肯定會涉及到堆疊生長方向的定義,在arm中我們定義如下:
#define os_stk_growth 1 //從上向下遞減
ucos51中相同的定義如下:
#define os_stk_growth 0 //從下向上遞增
ARM堆疊方式
當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊 full stack 當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊 empty stack 同時,根據堆疊的生成方式,又可以分為遞增堆疊 ascending stack 和遞減堆疊 decendingstack 當堆疊由低位址向高位址生成時,...
arm堆疊的增長方式
堆疊是一種資料結構,按先進後出 first in last out,filo 的方式工作,使用乙個稱作堆疊指標的專用暫存器指示當前的操作位置,堆疊指標總是指向棧頂。當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊 full stack 而當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊 empt...
arm堆疊操作
arm堆疊的組織結構是 滿棧降的形式,滿棧即sp是要停留在最後乙個進棧元素,降 就是堆疊的增長方向是從高位址向低位址發展。arm對於堆疊的操作一般採用 ldmfd pop 和stmfd push 兩個命令。指令stmfd和ldmfd分析 根據atpcs規則,我們一般使用fd full descend...