dyt22
积分
帖子
主题
对AT89C51来讲:程序中是否一定要设置栈顶(SP)
如:MOV SP,#60H
如没有上一条指令,SP默认的地址是什么?
请教大师!
使用道具 举报
SP默认的地址是07H?
这都不学,多看看书吧!
复位后堆栈地址为07H,堆栈从08H单元开始存放数据,这就占用了用户单元,最好把堆栈移到地址较高的区域.
特别在不用外部RAM的程序中更应该把堆栈移到地址较高的区域.
这是一个非大师说的,对吗?
只有在程序用到堆栈的时候才需要设置SP.没有使用POP和PUSH指令的程序是不需要设置SP的.设置SP没有特别要求,只要满足下面要求,SP可以设置在你想要的任何内存地址:
1,堆栈容量取决于PUSH和POP指令的执行次数,只要该段不与其它用到的单元有冲突,可以任意设置.无论是07H还是60H.
2,设为60H是避免内存冲突的较好的技术习惯,而不是非做不可的事.如果可以确保堆栈段只在10H长度内,设为70H也可以.
3.复位后SP=07H,只要不用该BANK,也未尝不可.
本版积分规则 提交评论 回帖并转播 回帖后跳转到最后一页