單片機(jī)堆棧是什么?
簡(jiǎn)單來說是在RAM區(qū)的一塊存儲(chǔ)空間,在系統(tǒng)空間中用作臨時(shí)數(shù)據(jù)存儲(chǔ),遵循后進(jìn)先出的原則。
??臻g操作的關(guān)鍵點(diǎn)之一就是棧指針寄存器,每次執(zhí)行棧操作時(shí),棧指針的內(nèi)容自動(dòng)調(diào)整。
按照通常的說法,向棧中存儲(chǔ)數(shù)據(jù)稱為“壓?!保ㄊ褂肞USH指令),恢復(fù)數(shù)據(jù)稱為“出?!保ㄊ褂肞OP指令)。根據(jù)所使用架構(gòu)的不同,有些處理器在向棧存入數(shù)據(jù)時(shí)地址會(huì)自動(dòng)增加,而有些則會(huì)減小。
這就意味著棧指針始終指向??臻g的最后一個(gè)數(shù)據(jù),在執(zhí)行數(shù)據(jù)存儲(chǔ)前(PUSH),棧指針會(huì)首先減小。
PUSH和POP通常用在函數(shù)或子程序的開始和結(jié)尾處。在函數(shù)開始執(zhí)行時(shí),PUSH操作將寄存器的當(dāng)前內(nèi)容存入??臻g;執(zhí)行結(jié)束前,POP又將??臻g存儲(chǔ)的數(shù)據(jù)恢復(fù)。一般說來,對(duì)每個(gè)寄存器的PUSH操作都應(yīng)相應(yīng)的進(jìn)行POP操作。否則恢復(fù)的數(shù)據(jù)可能無法對(duì)應(yīng)之前的寄存器,這樣會(huì)導(dǎo)致無法預(yù)期的后果,比如棧溢出。