永发信息网

堆栈到底是什么意思,这个功能是干什么的,怎么用,举个例子.正在学汇编语言,这部分看不懂

答案:5  悬赏:50  手机版
解决时间 2021-01-19 22:19
  • 提问者网友:感性作祟
  • 2021-01-19 17:01
堆栈到底是什么意思,这个功能是干什么的,怎么用,举个例子.正在学汇编语言,这部分看不懂
最佳答案
  • 五星知识达人网友:神鬼未生
  • 2021-01-19 17:50
堆栈就是一个特殊内存区域,
用来存放数据
可以用指令PUSH ,POP 操作
主要是用来存放临时数据,比如局部变量,某个函数过程中定义的变量
堆栈是先进后出方式
比如说有个过程求和
int fun(int a,int b)
{
return a+b;
}
void main()
{
int z;
z=fun(5,6)
printf("%d",z)
}
调用fun过程时操作系统会使用堆栈来传递参数,
首先PUSH 5
PUSH 6
CALL FUN
又或者在调用过程前将各个寄存器先保存起来因为数量有限在本过程中可能用到同样的寄存器被覆盖原来的值
main
mov ax,6
mov bx,7
call proc
...

proc1 proc
push ax ;先入
push bx
子过程程序中用到AX,BX
pop bx
pop ax ;后出
ret
proc1 endp
全部回答
  • 1楼网友:往事埋风中
  • 2021-01-19 21:22
保护数据!
  • 2楼网友:夜风逐马
  • 2021-01-19 21:10
堆栈是在RAM空间,主要目的是1. 为了存储局部变量; 2.函数调用返回
  • 3楼网友:英雄的欲望
  • 2021-01-19 19:43
没什么特别的意思,就是指你电脑上的硬盘空间。至于说堆和栈就是一种数据结构,就是在硬盘上存东西的方法不一样,堆存的时候就是数据放进去了,取的时候先放的先出来。栈存的时候就是先放进去的后出来。就这么个意思了。追问麻烦举个例子把 把ax的内容压倒堆栈中,可是sp根本没有变化,什么用也没有追答怎么可能没变化呢???
你在debug下试下。
mov ax,12
push ax
执行前后sp的值是不一样的,执行后明显的少了一个字。
  • 4楼网友:duile
  • 2021-01-19 18:57
坐过公交车吧,公交车是前门上后面下,公交车就是堆栈,人就是数据。比如你要叫某人从A站到B站去干什么,你得先叫他上车,等到B站到了,他再下车,汇编里面是一样的,一个数据你可以存放在堆栈里面,等到你要用的时候从堆栈里面取出来,数据在堆栈里面是受保护的,程序运行过程中不会被改变,像PUSH ACC就是要保护 A里面的数据,可能这时候出现某个中断,或者子程序需要A要去执行其他的程序,但是我们不希望A里面的数据因为执行其他任务而糟糕改变,所以先存在堆栈里面,等到这个任务执行完了,从堆栈里面把上次A的数据再调出来用。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯