展开全部
128个字节,就是用来暂存数据的,比如 你执行了一段实现 c=a+b的指令,你只要push c(地址) 就会把c推入栈中, 中间你只要没有其他的push 操作,再使用 pop d(地址) ,d中的数据就是原来c的数据。。。
这东西不要乱用,平常可以完全不用的,只要用call ret指令用就行了。。。push用法必须符合先入后出的原则,用不好很麻烦,如果是数据你完全可以,把它先移动到一个工作寄存器里,也不容易把事情搞乱。。。
这东西不要乱用,平常可以完全不用的,只要用call ret指令用就行了。。。push用法必须符合先入后出的原则,用不好很麻烦,如果是数据你完全可以,把它先移动到一个工作寄存器里,也不容易把事情搞乱。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
栈和堆是2种不同的数据结构。
栈,你可以想象成一个杯子,后进先出原则。
栈的内存空间是连续的。
和栈有关的寄存器:ESP,EBP。 EBP指向当前程序所在的栈的栈底,而ESP则指向该栈的栈顶。
函数调用和栈是密切相关的
典型的函数调用过程(STDCALL 约定)
比如 C代码中有这么一句:ret = function1(p1,p2,p3)
那么实际上编译器会将这句话翻译成如下:
push p3 //将函数形参依次从右到左压入栈中
push p2
push p1
push EIP //压入当前指令地址,也就是函数调用完后接着要执行的位置
push EBP //为function1函数开辟栈空间
move EBP,ESP
sub ESP, 44h
//之后程序将跳转到function1原型所在的位置,开始从第一句逐句执行。
函数内的参数是保存在栈中的
而堆,堆不只是单纯的数据结构,它是一种OS管理内存,分配内存的策略。
大致上,WIN平台下,若使用HEAP CREATE函数,则会为程序准备一个堆区,这个堆区是一片连续的内存空间。
堆一开始是一个大块BLOCK。 在经过使用和释放后,会产生空表和快表。空表和快表都是以链表形式存在的。
空表为双链表,而快表是单链表形式。当然WIN对堆的管理不只这两种数据结构形式。
栈,你可以想象成一个杯子,后进先出原则。
栈的内存空间是连续的。
和栈有关的寄存器:ESP,EBP。 EBP指向当前程序所在的栈的栈底,而ESP则指向该栈的栈顶。
函数调用和栈是密切相关的
典型的函数调用过程(STDCALL 约定)
比如 C代码中有这么一句:ret = function1(p1,p2,p3)
那么实际上编译器会将这句话翻译成如下:
push p3 //将函数形参依次从右到左压入栈中
push p2
push p1
push EIP //压入当前指令地址,也就是函数调用完后接着要执行的位置
push EBP //为function1函数开辟栈空间
move EBP,ESP
sub ESP, 44h
//之后程序将跳转到function1原型所在的位置,开始从第一句逐句执行。
函数内的参数是保存在栈中的
而堆,堆不只是单纯的数据结构,它是一种OS管理内存,分配内存的策略。
大致上,WIN平台下,若使用HEAP CREATE函数,则会为程序准备一个堆区,这个堆区是一片连续的内存空间。
堆一开始是一个大块BLOCK。 在经过使用和释放后,会产生空表和快表。空表和快表都是以链表形式存在的。
空表为双链表,而快表是单链表形式。当然WIN对堆的管理不只这两种数据结构形式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-02
展开全部
堆栈把程序的地址或需要保护的数据暂时存起来,比如调用子程序时,当前程序的地址会被压入堆栈保存,在子程序返回时这个地址会从堆栈读出。单片机堆栈深度要看ram大小,初始位置在07H,然后不能让它堆到7FH之后的特殊功能寄存器,就是这样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
计算机中的堆栈是计算机存储数据的一种数据结构,通常由一块存储区和指向该存储区的指针SP构成。
在堆栈中保存数据叫入栈,从堆栈中读取数据叫出栈。堆栈保存数据的特点是入栈和出栈是倒序的,最先入栈的数据要到最后才能出栈,而最后入栈的数据最先出栈,这就是通常说的“先进后出,后进先出”。
堆栈保存数据和读取数据都是通过唯一的堆栈指针SP来实现的,SP的作用就是指示当前要出栈或入栈的数据,并在操作执行后自动递增或递减。至于是入栈递增还是入栈递减,由堆栈设计者确定。对于硬件堆栈,就是由CPU的生产厂家确定。但有一点,SP是入栈递增的,出栈就必定是递减,反之亦然。SP入栈递增的堆栈通常叫向上生长型的堆栈,反之就是向下生长型的堆栈。
8051的堆栈容量不超过(256-8)字节,单片机复位后SP的值为07H,SP是入栈递增,即向上生长型的堆栈。
在堆栈中保存数据叫入栈,从堆栈中读取数据叫出栈。堆栈保存数据的特点是入栈和出栈是倒序的,最先入栈的数据要到最后才能出栈,而最后入栈的数据最先出栈,这就是通常说的“先进后出,后进先出”。
堆栈保存数据和读取数据都是通过唯一的堆栈指针SP来实现的,SP的作用就是指示当前要出栈或入栈的数据,并在操作执行后自动递增或递减。至于是入栈递增还是入栈递减,由堆栈设计者确定。对于硬件堆栈,就是由CPU的生产厂家确定。但有一点,SP是入栈递增的,出栈就必定是递减,反之亦然。SP入栈递增的堆栈通常叫向上生长型的堆栈,反之就是向下生长型的堆栈。
8051的堆栈容量不超过(256-8)字节,单片机复位后SP的值为07H,SP是入栈递增,即向上生长型的堆栈。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询