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进制