堆栈区和SP堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/12 19:17:01
![堆栈区和SP堆栈区是30H-7FH,而堆栈操作时从默认SP=07H开始,那么堆栈区是做什么用的呢?没说完整啊,堆栈区到底干什么用的?如果是堆栈操作用的话,为什么SP要默认等于07H呢?应该是30H啊](/uploads/image/z/5463854-62-4.jpg?t=%E5%A0%86%E6%A0%88%E5%8C%BA%E5%92%8CSP%E5%A0%86%E6%A0%88%E5%8C%BA%E6%98%AF30H-7FH%2C%E8%80%8C%E5%A0%86%E6%A0%88%E6%93%8D%E4%BD%9C%E6%97%B6%E4%BB%8E%E9%BB%98%E8%AE%A4SP%3D07H%E5%BC%80%E5%A7%8B%2C%E9%82%A3%E4%B9%88%E5%A0%86%E6%A0%88%E5%8C%BA%E6%98%AF%E5%81%9A%E4%BB%80%E4%B9%88%E7%94%A8%E7%9A%84%E5%91%A2%3F%E6%B2%A1%E8%AF%B4%E5%AE%8C%E6%95%B4%E5%95%8A%2C%E5%A0%86%E6%A0%88%E5%8C%BA%E5%88%B0%E5%BA%95%E5%B9%B2%E4%BB%80%E4%B9%88%E7%94%A8%E7%9A%84%3F%E5%A6%82%E6%9E%9C%E6%98%AF%E5%A0%86%E6%A0%88%E6%93%8D%E4%BD%9C%E7%94%A8%E7%9A%84%E8%AF%9D%2C%E4%B8%BA%E4%BB%80%E4%B9%88SP%E8%A6%81%E9%BB%98%E8%AE%A4%E7%AD%89%E4%BA%8E07H%E5%91%A2%3F%E5%BA%94%E8%AF%A5%E6%98%AF30H%E5%95%8A)
堆栈区和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