堆栈区和SP堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 12:33:39
堆栈区和SP堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊

堆栈区和SP堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊
堆栈区和SP
堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?
没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊

堆栈区和SP堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊
LS说的是 x86汇编的
看lz问得明显是 51单片机的
SP默认是07H
但是程序总要用ram的..07很多时候都是要被用掉得所以,
一般来说 个开始运行的时候.就会确定好了 堆栈的起始地址
比如你说的30H
那么开始的时候会把 SP = 30H
当然如果你原本吧用的数据都定义在 很后面,
直接不修改sp也是没有关系的
///////////////////////////
补充.先说一下堆栈的作用.
比如你用call指令的时候.
cpu回吧 你的返回地址压入堆栈.比如这个时候sp = 07,返回地址=1122H
那么call后
07H = 11H
08H = 22H
SP = 09H.因为压入2个直接所以变成09//sp = sp + 2
你用ret或者ret指令后,sp = sp - 2
还有pop push指令.也是相关的作用,
没有堆栈或者堆栈设置错误.你调用指令根本就不能用,
程序肯定会跳飞.这就是堆栈的作用
至于SP为什么默认等于7 ..因为前面8个字节都是 特殊功能寄存器,别人做cpu只好sp默认等于7了..其实sp默认等于多少都没有关系,因为这东西.初始化的时候..必定要修改的.
至于你说的堆栈区是30H-7FH...根本就没有这种说法,
只要你的单片机有ram 要你设置 80h 90h ..也没有关系.
只是"51"单片机只有128个字节,所以最大只能设置成7Fh
至于为什么要30H开始,因为20H开始时位寻址区.一般给某些特殊数据用,但是你要用也没有关系,0-20H这些地址.是4主.特殊功能寄存器,自然也最好保留,但是你要高兴 从07H开始...也是可以用的,
////////////////////////////////////////
讲了那么多..楼主才给5分.太不够意思了..o(∩_∩)o