1樓:勤奮的瑤
堆疊:堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂對資料項進行插入和刪除。在微控制器應用中,堆疊是個特殊的儲存區,主要功能是暫時存放資料和地址,通常用來保護斷點和現場。
sp的作用是在51微控制器中,sp棧指標是一個專用的8位暫存器,系統復位後,sp初始化為07h,使得堆疊指標實際上是由08h單元開始。
51堆疊的容量最大也不會超過128位元組。
2樓:路人丙丿
堆疊,就是一個盒子,先放裡面的,是後拿出來,因為壓箱底了----。
不超過128個就可以了。
3樓:天邊之約
在51微控制器中,sp棧指標是一個專用的8位暫存器,系統復位後,sp初始化為07h,使得堆疊指標實際上是由08h單元開始。
在響應中斷或子程式呼叫時,發生入棧操作,入棧的是16位pc值;
51中有push壓入和pop彈出棧操作指令,如有必要,在中斷或呼叫子程式時可用posu指令把psw或其它需要保護的暫存器的內容
壓入堆疊加以保護;返回前再使用pop指令把它們恢復。
51的內部ram只有從00h到7fh共計128位元組的空間,而且00h~1fh是工作暫存器區,
所以sp的設定一般設定是從20h到70h這個範圍。
51堆疊的容量最大也不會超過128位元組。
什麼叫堆疊?8051堆疊指示器sp有多少位,作用是什麼?微控制器初始化話後sp中的內容是什麼?
4樓:生活如歌
堆疊是計算機中在記憶體ram裡的一段特殊的儲存空間,儲存資料按「先進後出,後進先出」規律,一般在子程式呼叫,中斷子程式呼叫時儲存地址和資料用。
8051微控制器堆疊指標sp是8位的,用來指向堆疊的棧頂。
初始化後sp=07h
5樓:渾興
堆疊是連續的記憶體單元,存取方式遵循「先進後出」的原則。
其作用一般是儲存暫存器或標誌暫存器的內容。堆疊就是這樣一種資料結構。它是在記憶體中開闢一個儲存區域,資料一個一個順序地存入(也就是「壓入——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有什麼作用
6樓:文件類共創空間
在51微控制器中,sp棧指標是一個專用的8位暫存器,系統復位後,sp初始化為07h,使得堆疊指標實際上是由08h單元開始。
在響應中斷或子程式呼叫時,發生入棧操作,入棧的是16位pc值;51中有push壓入和pop彈出棧操作指令,如有必要,在中斷或呼叫子程式時可用posu指令把psw或其它需要保護的暫存器的內容壓入堆疊加以保護;返回前再使用pop指令把它們恢復。
7樓:寶寶
sp用於存放棧頂的偏移地址。 通俗的說,就是存放堆疊ss的頂部。
什麼是堆疊?堆疊指標的sp的作用是什麼?8051微控制器堆疊容量不超過多少位元組?
8樓:七彩鏡
計算機中的堆疊是計算機儲存資料的一種資料結構,通常由一塊儲存區和指向該儲存區的指標sp構成。
在堆疊中儲存資料叫入棧,從堆疊中讀取資料叫出棧。堆疊儲存資料的特點是入棧和出棧是倒序的,最先入棧的資料要到最後才能出棧,而最後入棧的資料最先出棧,這就是通常說的「先進後出,後進先出」。
堆疊儲存資料和讀取資料都是通過唯一的堆疊指標sp來實現的,sp的作用就是指示當前要出棧或入棧的資料,並在操作執行後自動遞增或遞減。至於是入棧遞增還是入棧遞減,由堆疊設計者確定。對於硬體堆疊,就是由cpu的生產廠家確定。
但有一點,sp是入棧遞增的,出棧就必定是遞減,反之亦然。sp入棧遞增的堆疊通常叫向上生長型的堆疊,反之就是向下生長型的堆疊。
8051的堆疊容量不超過(256-8)位元組,微控制器復位後sp的值為07h,sp是入棧遞增,即向上生長型的堆疊。
9樓:匿名使用者
在呼叫子程式時需要儲存呼叫函式的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暫存器
10樓:匿名使用者
堆疊把程式的地址或需要保護的資料暫時存起來,比如呼叫子程式時,當前程式的地址會被壓入堆疊儲存,在子程式返回時這個地址會從堆疊讀出。微控制器堆疊深度要看ram大小,初始位置在07h,然後不能讓它堆到7fh之後的特殊功能暫存器,就是這樣
11樓:潘達
128個位元組,就是用來暫存資料的,比如 你執行了一段實現 c=a+b的指令,你只要push c(地址) 就會把c推入棧中, 中間你只要沒有其他的push 操作,再使用 pop d(地址) ,d中的資料就是原來c的資料。。。
這東西不要亂用,平常可以完全不用的,只要用call ret指令用就行了。。。push用法必須符合先入後出的原則,用不好很麻煩,如果是資料你完全可以,把它先移動到一個工作暫存器裡,也不容易把事情搞亂。。。
12樓:匿名使用者
棧和堆是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對堆的管理不只這兩種資料結構形式。
堆,棧,堆疊的區別
一個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,只讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...
java中的堆疊是什麼
來自巢湖敬老慈幼的風車草 棧 是先進後出,有一定順序的 堆 是程式開闢的記憶體空間,用來儲存物件,是無序的。棧的主要作用是儲存 方法的執行順序,如 main 方法呼叫 go 方法 然後用go 方法呼叫relase 方法,那麼這三個方法就會按照main go relase 的順序儲存在棧中,按照棧的規...
不同頻率的訊號為什麼是不會堆疊的
疊加也沒關係,但自身的波形是不改變的,使用時有一種電路叫濾波,他能使你需要的那個訊號通過而其他的訊號被短路掉 labview中做幾個正弦訊號的疊加怎麼做?如何同時設定取樣率和取樣點數?兩個不同頻率的訊號疊加後頻率是? 持續訊號發生器可以設定取樣率的啊,有個sample info,你接了嗎 珈藍利珠 ...