ARM堆疊方式

2021-06-26 15:42:52 字數 2329 閱讀 3926

當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(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 的堆疊操作有很多疑惑,這幾天終於沒有客戶來煩了,拿出書來研究了一下,發現原來理解上有誤區。這裡寫一些讀書筆記,算是幫自己記錄一下吧。

arm堆疊的組織結構是 滿棧降 的形式,滿棧即sp是要停留在最後乙個進棧元素,降:就是堆疊的增長方向是從高位址向低位址發展。 arm對於堆疊的操作一般採用 ldmfd(pop)和stmfd (push) 兩個命令。 以前困惑的就是stmfd 命令 對於運算元 是按照什麼順序壓棧的 

比如:stmfd sp! 進棧順序是:

高位址(1方式) lr r5 r4 ``````` r0

高位址(2方式) r0 r1 ``` r5 lr

現在通過下表,可以輕鬆的解決這個問題:

定址方式

說明

pop

=ldm

push

=stm

fa

遞增滿

ldmfa

ldmda

stmfa

stmib

fd

遞減滿

ldmfd

ldmia

stmfd

s***b

ea

遞增空

ldmea

ldmdb

stmea

stmia

ed

遞減空

ldmed

ldmib

stmed

s***a

可以輕鬆的解決這個問題: 定址方式說明 pop =ldm push =stm fa 遞增滿 ldmfa ldmda stmfa stmib fd 遞減滿 ldmfd ldmia stmfd s***b ea 遞增空 ldmea ldmdb stmea stmia ed 遞減空 ldmed ldmib stmed s***a 按照圖表,可知 stmfd對應的是s***b,根據arm指令手冊,可知s***b入棧順序是(1方式) 而ldmfd對應的是ldmia,這樣這兩個操作就可以成功配對:

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...