A. 51單片機R0-R7怎樣壓棧
首先你得知道R0~R7並不對應絕對地址,而PUSH只能對絕對地址壓棧的。
對於自己編寫的匯編程序,你得清楚當前PSW.RS位域選中的是哪一組RegBank,並將相應地址的寄存器壓棧。例如如果選中了第2組寄存器(10b),那麼應當壓棧的是10h~17h單元。
如果是編譯器寫的偽代碼,可以直接書寫成 PUSH Rn 形式,編譯器自動根據當前的RS位域來換算成對應的絕對地址。
網路嫌我字數不夠
B. 單片機堆棧問題
堆棧的壓棧動作地址是遞減的;出棧動作地址是增加的。sp是棧頂指針,經過壓棧動作後的值要比70H小。具體的數值得看單片機的位數——32 bit/16 bit/8 bit
C. 關於51單片機堆棧的問題
首先,SP是堆棧指針,當壓堆棧的時候,它增加一,當出棧的時候,它減一。
PUSH
ACC和POP
ACC分別是壓和出的指令。
除此之外,中斷和call指令,硬體自動將PC程序指針壓棧,等到reti或ret指令的時候,出棧。
一般講SP設置大一點,比如70H,以免和其他單元沖突。
D. 51單片機問題: SP=60 A=90 push A 執行這條語句後,(SP)= (
(SP)=61因51單片機堆堆是向上生長的
(60H)=90答案可能是這樣的,但應該錯誤的,實際上是(61H)=90因51單片機壓棧是先上移指針,後壓入數據60H單元並沒有被佔用
A=90這是沒說的,入棧並沒有改變A的值
並且不知是你寫錯了還是出題人寫錯了SP=60 不是16進制 (60H)又變成
16進制