1. 堆棧的功能,操作過程和特點
堆棧其實是數據結果中的兩個概念 ,是存放數據的方式,堆:順序隨意;棧:後進先出(Last-In/First-Out)。要說用處,那就是在寫代碼的時候,有時數據存取肯定是要有規定的順序的,這個是你自己桐弊規定的,然後按照你所寫程序的用處的特點來用堆還是棧還是隊列之類的順序 追問: 程序設計時,為什圓歲么要對堆棧指針SP重新賦值? 回答: 這不是初始化嘛
堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。它的特點是按照先進後出的原則存取數據,這里的進與出是指進棧與出棧操作。
80C51片內RAM的部分單局腔族元可以用做堆棧。有一個8位的堆棧指針寄存器SP,專用於指出當前堆棧頂部是片內RAM的哪一個單元。80C51單片機系統復位後SP的初值為07H,也就是將從內部RAM的08H單元開始堆放信息。
但是,80C51系列的棧區不是固定的,只要通過軟體改變SP寄存器的值便可更動棧區。為了避開工作寄存器區和位定址區,SP的初值可置為2FH或更大的地址值。如果CPU在操作中要使用兩組工作寄存器,如果不使用位變數,SP的初值至少應為0FH或更大的值;如果使用位變數,SP的初值至少應為2FH或更大的值;KeilC51編譯器會自動計算SP的初始設定值,無需編程者關心。
2. 什麼是堆棧堆棧指針的SP的作用是什麼8051單片機堆棧容量不超過多少位元組
堆棧:堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂對數據項進行插入和刪除。在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。
SP的作用是在51單片機中,SP棧指針是一個專用的8位寄存器,系統復位後,SP初始化為07H,使得堆棧指針實際上是由08H單元開始。
51堆棧的容量最大也不會超過128位元組。
3. 什麼叫堆棧8051堆棧指示器SP有多少位,作用是什麼單片機初始化話後SP中的內容是什麼
堆棧是連續的內存單元,存取方式遵循「先進後出」的原則。
其作用一般是保存寄存器或標志寄存器的內容。
堆棧就是這樣一種數據結構。它是在內存中開辟一個存儲區域,數據一個一個順序地存入(也就是「壓入——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或更大的值。
mcs-51的堆棧是向上生成的,若sp=60h,cpu執行一和調用指令或者響應中斷後,pc進棧,pcl保護到61h,pch保護到62h,sp=62h。
4. 什麼是堆棧及堆棧的作用是什麼
在計算機領域,堆棧是一個不容忽視的概念,堆棧是兩種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。要點:堆,隊列優先,先進先出 。棧,先進後出(First-In/改灶隱Last-Out)。
1. 棧(stack)與堆(heap)都是Java用來在Ram中核廳存放數據的地方。與C++不同,Java自動管理棧和堆,程序員不能直接地設置棧或堆。
2. 棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據可辯升以共享,詳見第3點。堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。
3.Java中的數據類型有兩種。
一種是基本類型(primitivetypes), 共有8種,即int,short, long, byte, float, double, boolean, char(注意,並沒有string的基本類型)。這種類型的定義是通過諸如int a= 3; long b = 255L;的形式來定義的,稱為自動變數。值得注意的是,自動變數存的是字面值,不是類的實例,即不是類的引用,這里並沒有類的存在。如int a= 3; 這里的a是一個指向int類型的引用,指向3這個字面值。這些字面值的數據,由於大小可知,生存期可知(這些字面值固定定義在某個程序塊裡面,程序塊退出後,欄位值就消失了),出於追求速度的原因,就存在於棧中。
5. 單片機中堆棧有什麼用
1、堆棧空間分配
棧(操作系統):由操作系統自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。
堆(操作系統): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。
2、堆棧緩存方式
棧使用的是一級緩存, 他們通常都是被調用時處於存儲空間中,調用完畢立即釋放。
堆則是存放在二級緩存中,生命周期由虛擬機的垃圾回收侍燃演算法來決定(並不是一旦成為孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低一些。
3、效率比較
棧由系統自動分配,速度較快。但程序員是無法控制的。
堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便。
4、存儲內容
棧: 在函數調用時,在大多數的C編譯器中,參數是由右往左入棧的,然後是函數中的局部變數。注意靜態變數是不入棧的。
當本次函數調用結束後,局部變數先出棧,然後是參數,最後棧頂指針指向函數的返回地址,也就是主函數中的下一條指令的地址,程序由該點繼續運行。
堆:一般是在堆的頭部用一個老凱虛位元組存放堆的大小。堆中的具體內容由程序員安排。
(5)單片機堆棧主要作用擴展閱讀:
簡介
單片機應用中,堆棧是個特殊存儲區,堆棧屬於RAM空間的一部分,堆棧用於函數調用、中斷切換時保存和恢復現場數據。
堆棧中的物體具有一個特性:第一個放入堆棧中的物體總是被最後拿出來, 這個特性通常稱為先進後出 (FILO—First-In/Last-Out)。 堆棧中定義了一些操作, 兩個最重要的是PUSH和POP。 PUSH(入棧)操作:堆棧指針(SP)加1,然後在堆棧的頂部加入一 個元素。
POP(出棧)操作相反,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中(目的位置),然後再孫春將堆棧指針(SP)減1.。這兩種操作實現了數據項的插入和刪除。
6. 什麼是堆棧堆棧有什麼作用
什麼是堆棧?堆灶兄州棧有什麼作用?
正確答案:堆棧是在單片機內存中專門塵段開辟出來的按照「先進後出、後進先出」的原則進行存取的RAM區域隱蔽,堆棧的作用是保護現場和斷點地址。
7. 單片機裡面堆棧的功能是什麼
堆棧是存儲器中的特殊群體。在內RAM中專門辟出一個連續存儲區,用來碧戚暫時存放子程序斷口地址、中檔圓斷斷口地址和其他需要保存的數據。
堆棧操作無論是存入或取出數據,均只能依次存人或依次取出,行慧塌不能越位,必須遵循「先進後出"、「後進先出」的原則。
堆棧指針SP指出棧頂存儲單元的地址。
8. 單片機-堆棧有何作用復位時SP=07H嗎為什麼要設SP.....
我來詳細講一下吧。
復位的時候SP等於07,堆棧的用處是存儲數據,舉個例子:
如果你現在不修改SP,那SP就等於07H。
假如你的A是等於6的,你執行PUSH
ACC,之後,你的SP就變成08H了,如果你再執行一句
MOV
08H,#3,你的08H單元之前本來是6,現在變成3了,你再執行POP
ACC,此時A等於3了。
無法恢復了。
一般我們都要重新設置SP,一般SP=70H就夠用了。堆棧區間就是70H到7FH,這樣你就不會沖突了。