有个朋友说,51单片机里,水平高的人一般堆栈都用的比较多,为什么?
当然不是刻意去使用堆栈了。我也就PUSHPSW,PUSHACC,LCALL....等用下,最多8个字节...
当然不是刻意去使用堆栈了。
我也就PUSH PSW,PUSH ACC,LCALL .... 等用下,最多8个字节 展开
我也就PUSH PSW,PUSH ACC,LCALL .... 等用下,最多8个字节 展开
8个回答
展开全部
也不能够这样说,那有说水平高的都用堆栈比较多的啊,用什么东西都要看实际情况。
堆栈的应用:
1.我们用堆栈用的最多的地方可能就是中断了,其实你可以说中断用的好的人水平应该都不错,在51中,哈哈。。
2.如果在有些时候,你不想定义过多的缓存变量,但是当时你又需要保护一些变量,那么你可以用堆栈,但是这个时候你特别要注意返回堆栈,不然的话你的程序可能就不知道要飞到那里去了。。。
3.堆栈你可以用来保存数据,但是一般是不会用来这样做的,这样做极其容易产生错误的操作,再有,在51中,堆栈的地址好象可以由你定义,那就你可以决定你堆栈可以暂存多少级子程序。也可以说,子程序的嵌套和堆栈有多少级有很大关系,不然子程序个数超过了堆栈级数那么程序也就同样飞了。。
总之,其实我们还是有必要的时候用堆栈,少用一点好,那样你的程序安全一点,过多的使用会导致错误的。。用的妙是最好的,呵呵。。。。
堆栈的应用:
1.我们用堆栈用的最多的地方可能就是中断了,其实你可以说中断用的好的人水平应该都不错,在51中,哈哈。。
2.如果在有些时候,你不想定义过多的缓存变量,但是当时你又需要保护一些变量,那么你可以用堆栈,但是这个时候你特别要注意返回堆栈,不然的话你的程序可能就不知道要飞到那里去了。。。
3.堆栈你可以用来保存数据,但是一般是不会用来这样做的,这样做极其容易产生错误的操作,再有,在51中,堆栈的地址好象可以由你定义,那就你可以决定你堆栈可以暂存多少级子程序。也可以说,子程序的嵌套和堆栈有多少级有很大关系,不然子程序个数超过了堆栈级数那么程序也就同样飞了。。
总之,其实我们还是有必要的时候用堆栈,少用一点好,那样你的程序安全一点,过多的使用会导致错误的。。用的妙是最好的,呵呵。。。。
展开全部
不是说水平高就用堆栈
而是因为这是一种方法,就像mov指令一样。功能上的问题
如果说所有的值和变量都要事先声明在空间里面定义那会非常麻烦
而堆栈是一种后进先出的结构,可以把某个值存如堆栈然后在用的时候取出来
这样非常方便。比如
mov bx,12h
mov ax,12h
add ax,bx
push ax
此时候的ax值被保存到堆栈
而ax的值还可以继续变动
在堆栈里的ax的值可以在随时取出来当作参数
堆栈还经常用于保存环境,以便程序完成后恢复寄存器内的值
而是因为这是一种方法,就像mov指令一样。功能上的问题
如果说所有的值和变量都要事先声明在空间里面定义那会非常麻烦
而堆栈是一种后进先出的结构,可以把某个值存如堆栈然后在用的时候取出来
这样非常方便。比如
mov bx,12h
mov ax,12h
add ax,bx
push ax
此时候的ax值被保存到堆栈
而ax的值还可以继续变动
在堆栈里的ax的值可以在随时取出来当作参数
堆栈还经常用于保存环境,以便程序完成后恢复寄存器内的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、告诉你吧,因为高手一般都会做很多子程序(包括中断),这样程序可读性非常强。逻辑结构非常清楚。而调用子程序里面就会涉及到保护现场的问题,而保护现场一般都用堆栈。
2、另外,一些特殊情况,我们会用到堆栈来进行参数传递,比如一些循环语句里。如进行累加处理
push ax
lp:
pop ax
add ax,1
push ax
....
....
loop lp
pop ax
在省略号里要改变ax的值,而又不想用一个专门的存储器,所以就用堆栈来做临时变量。
2、另外,一些特殊情况,我们会用到堆栈来进行参数传递,比如一些循环语句里。如进行累加处理
push ax
lp:
pop ax
add ax,1
push ax
....
....
loop lp
pop ax
在省略号里要改变ax的值,而又不想用一个专门的存储器,所以就用堆栈来做临时变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
堆栈用得比较多,那是因为它方便。
堆栈可以嵌套如:
PUSH A
...
PUSH A
...
PUSH Cy
...
PUSH A
...
...
POP A
POP Cy
POP A
POP A
注意这里面的三个A代表的东西,里面的内容可以一样可以不一样。
堆栈可以嵌套如:
PUSH A
...
PUSH A
...
PUSH Cy
...
PUSH A
...
...
POP A
POP Cy
POP A
POP A
注意这里面的三个A代表的东西,里面的内容可以一样可以不一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当编写的程序比较大的时候,工程师们不得不考虑,内存分配的问题了
而一些特殊寄存器的重复出现率会很高,
比如当程序正在执行,我们不知道它执行到哪了,突然要跳转到中断子程序,
子程序不可避免的就会使用重复使用寄存器,与其他程序起冲突,
所以经常会在段头来个PUSH X,在断尾来个POP X 以此来保护现场
如果用C就不用考虑这些问题了,所以C现在比较流行了,其实C在其他方面还要许多的优势
而一些特殊寄存器的重复出现率会很高,
比如当程序正在执行,我们不知道它执行到哪了,突然要跳转到中断子程序,
子程序不可避免的就会使用重复使用寄存器,与其他程序起冲突,
所以经常会在段头来个PUSH X,在断尾来个POP X 以此来保护现场
如果用C就不用考虑这些问题了,所以C现在比较流行了,其实C在其他方面还要许多的优势
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是在中断能用到A的时候才用堆栈,一般不用。用多了还影响执行速度。没必要的时候用了是不是多此一举呢?当然需要保存当前数据而又不想另存到一个存储空间的时候可以用入栈,这样能少定义一个存储器的名。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询