什麼叫軟體堆棧,什麼叫硬體堆棧?兩者的區別是什麼?
看其棧頂指針是否和CPU具有特殊的關聯,有關聯者(如SP)「硬」,而無關聯者「軟」。
單片機在執行調用子程序的指令時,一般會把返回地址自動存入堆棧,而沒有被單片機自動入棧但是也需要保存的內容比如狀態寄存器、通用寄存器等,就得通過PUSH等指令把它們人為地保存到堆棧中。自動入棧和「人為入棧」可能使用的是一個堆棧指針。有的單片機可以分開,比如AVR,可以通過「ST -Y, R0」這樣的指令把R0存入軟體堆棧區(Y是由R28和R29兩個寄存器的值組成的16位指針),有的單片機缺少這樣的指令,就會把軟體堆棧和硬體堆棧放在一個棧空間,都使用SP,比如51.