什麼是堆疊?堆疊指標的sp的作用是什麼?8051單片

時間 2021-09-04 02:40:25

1樓:七彩鏡

計算機中的堆疊是計算機儲存資料的一種資料結構,通常由一塊儲存區和指向該儲存區的指標sp構成。

在堆疊中儲存資料叫入棧,從堆疊中讀取資料叫出棧。堆疊儲存資料的特點是入棧和出棧是倒序的,最先入棧的資料要到最後才能出棧,而最後入棧的資料最先出棧,這就是通常說的「先進後出,後進先出」。

堆疊儲存資料和讀取資料都是通過唯一的堆疊指標sp來實現的,sp的作用就是指示當前要出棧或入棧的資料,並在操作執行後自動遞增或遞減。至於是入棧遞增還是入棧遞減,由堆疊設計者確定。對於硬體堆疊,就是由cpu的生產廠家確定。

但有一點,sp是入棧遞增的,出棧就必定是遞減,反之亦然。sp入棧遞增的堆疊通常叫向上生長型的堆疊,反之就是向下生長型的堆疊。

8051的堆疊容量不超過(256-8)位元組,微控制器復位後sp的值為07h,sp是入棧遞增,即向上生長型的堆疊。

2樓:匿名使用者

在呼叫子程式時需要儲存呼叫函式的cpu暫存器pc指標,pc指標是被call指令自動壓入sp所指向的片記憶體儲器,cpu暫存器要由使用者用push指令自行儲存,

因此sp的作用就是一個指標,當進行中斷呼叫,子函式呼叫時將現場資料壓入sp所指向的儲存器,sp自動增加1或2,當中斷結束reti,呼叫返回ret,pop時將sp資料彈出,sp自動減1或2

8051最大為128位元組的片記憶體儲器,0x20以上理論都可以做堆疊用96位元組,8052為256位元組224位元組可用

但這樣便沒有其它空間可用於資料儲存

現在的微控制器的程式一般都能用c51來,不用關心堆疊大小與sp暫存器

3樓:匿名使用者

堆疊把程式的地址或需要保護的資料暫時存起來,比如呼叫子程式時,當前程式的地址會被壓入堆疊儲存,在子程式返回時這個地址會從堆疊讀出。微控制器堆疊深度要看ram大小,初始位置在07h,然後不能讓它堆到7fh之後的特殊功能暫存器,就是這樣

4樓:潘達

128個位元組,就是用來暫存資料的,比如 你執行了一段實現 c=a+b的指令,你只要push c(地址) 就會把c推入棧中, 中間你只要沒有其他的push 操作,再使用 pop d(地址) ,d中的資料就是原來c的資料。。。

這東西不要亂用,平常可以完全不用的,只要用call ret指令用就行了。。。push用法必須符合先入後出的原則,用不好很麻煩,如果是資料你完全可以,把它先移動到一個工作暫存器裡,也不容易把事情搞亂。。。

5樓:匿名使用者

棧和堆是2種不同的資料結構。

棧,你可以想象成一個杯子,後進先出原則。

棧的記憶體空間是連續的。

和棧有關的暫存器:esp,ebp。 ebp指向當前程式所在的棧的棧底,而esp則指向該棧的棧頂。

函式呼叫和棧是密切相關的

典型的函式呼叫過程(stdcall 約定)

比如 c**中有這麼一句:ret = function1(p1,p2,p3)

那麼實際上編譯器會將這句話翻譯成如下:

push p3 //將函式形參依次從右到左壓入棧中

push p2

push p1

push eip //壓入當前指令地址,也就是函式呼叫完後接著要執行的位置

push ebp //為function1函式開闢棧空間

move ebp,esp

sub esp, 44h

//之後程式將跳轉到function1原型所在的位置,開始從第一句逐句執行。

函式內的引數是儲存在棧中的

而堆,堆不只是單純的資料結構,它是一種os管理記憶體,分配記憶體的策略。

大致上,win平臺下,若使用heap create函式,則會為程式準備一個堆區,這個堆區是一片連續的記憶體空間。

堆一開始是一個大塊block。 在經過使用和釋放後,會產生空表和快表。空表和快表都是以連結串列形式存在的。

空表為雙連結串列,而快表是單連結串列形式。當然win對堆的管理不只這兩種資料結構形式。

什麼叫堆疊?8051堆疊指示器sp有多少位,作用是什麼?微控制器初始化話後sp中的內容是什麼?

6樓:生活如歌

堆疊是計算機中在記憶體ram裡的一段特殊的儲存空間,儲存資料按「先進後出,後進先出」規律,一般在子程式呼叫,中斷子程式呼叫時儲存地址和資料用。

8051微控制器堆疊指標sp是8位的,用來指向堆疊的棧頂。

初始化後sp=07h

7樓:渾興

堆疊是連續的記憶體單元,存取方式遵循「先進後出」的原則。

其作用一般是儲存暫存器或標誌暫存器的內容。堆疊就是這樣一種資料結構。它是在記憶體中開闢一個儲存區域,資料一個一個順序地存入(也就是「壓入——push」)這個區域之中。

有一個地址指標總指向最後一個壓入堆疊的資料所在的資料單元,存放這個地址指標的暫存器就叫做堆疊指示器。開始放入資料的單元叫做「棧底」。資料一個一個地存入,這個過程叫做「壓棧」。

在壓棧的過程中,每有一個資料壓入堆疊,就放在和前一個單元相連的後面一個單元中,堆疊指示器中的地址自動加1。讀取這些資料時,按照堆疊指示器中的地址讀取資料,堆疊指示器中的地址數自動減 1。這個過程叫做「彈出pop」。

如此就實現了後進先出的原則。sp是一個8位專用暫存器,它批示出堆疊頂部在內部ram塊中的位置。系統復位後,sp初始化為07h,實際上堆疊是由08h單元開始的。

考慮08h~1fh單元分別屬於工作暫存器區1~3,若在程式設計中用到這些區,則最好把sp值改值為1fh或更大的值。 sp是一個8位專用暫存器,它批示出堆疊頂部在內部ram塊中的位置。系統復位後,sp初始化為07h,實際上堆疊是由08h單元開始的。

考慮08h~1fh單元分別屬於工作暫存器區1~3,若在程式設計中用到這些區,則最好把sp值改值為1fh或更大的值。

設堆疊指標SP的初值為2019H,AX 3000H,BX 5000H,執行PUSHAX後,SP

偉悅喜貢初 1 sp 1ffeh 2 sp 1ffeh,bx 5000h,ax 5000h 3 push ax將ax裡的值壓入堆疊,push bx將bx裡的值再壓入堆疊,popax將堆疊頂的值彈出到ax裡.即將bx的值賦給ax.4 sp 2000h指棧頂指標的地址是2000h ax為一個字 即兩個位...

什麼是下堆疊,什麼是下堆疊

手機使用者 是一個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。要點 堆 順序隨意 棧 後進先出 last in first out 編輯本段 堆和棧的區別 一 預備知識 程...

java中的堆疊是什麼

來自巢湖敬老慈幼的風車草 棧 是先進後出,有一定順序的 堆 是程式開闢的記憶體空間,用來儲存物件,是無序的。棧的主要作用是儲存 方法的執行順序,如 main 方法呼叫 go 方法 然後用go 方法呼叫relase 方法,那麼這三個方法就會按照main go relase 的順序儲存在棧中,按照棧的規...