打印
[AVR单片机]

avr入门的关于堆栈设置的问题

[复制链接]
3921|7
手机看帖
扫描二维码
随时随地手机跟帖
沙发
工作狂|  楼主 | 2007-2-18 23:21 | 只看该作者

avr入门的关于堆栈设置的问题

我刚接触avr芯片,看了几个汇编程序的例子,有几种关于堆栈的初始化设置不太一样
1。
    ldi r16,ramend
    out sp,r16
2。
         ldi  r16,high(ramend)    ;定义堆栈指针
         out  sph,r16
    ldi  r16,low(ramend)
    out  spl,r16
3。 
         ldi  r16,0x02             ;设置堆栈指针0x025f
         out  sph,r16
    ldi  r16,0x5f
    out  spl,r16
哪位能帮我解释一下这几种的区别及含义,多谢

使用特权

评论回复
板凳
NE5532| | 2007-2-19 10:05 | 只看该作者

如下

1.
    ldi r16,ramend
    out sp,r16

点评:SPH被吃了,写出这个程序的要么是十足的高手,要么就是大大的菜鸟。高手发现堆栈只需要设置低位就够了,发挥:“句有可削,足见其疏;字不得减,乃知其密。”的境界,遂将高位省略。

2.
    ldi  r16,high(ramend)    ;定义堆栈指针
    out  sph,r16
    ldi  r16,low(ramend)
    out  spl,r16

点评:打拼过江湖的老手之作,吃够了老板频繁更改程序要求的亏,遂采用high(ramend)与low(ramend)之伪指令书写,此乃高手,若预之,需当心。

3.
    ldi  r16,0x02            ;设置堆栈指针0x025f
    out  sph,r16
    ldi  r16,0x5f
    out  spl,r16

点评:在校生或者书呆子教授之作,此类程序确实可爱,清楚明白,绝不搞绕口令。一股质朴的气息扑面而来,但是放到实际应用里,恐怕就只有抓狂了。

使用特权

评论回复
地板
zsmbj| | 2007-2-19 10:25 | 只看该作者

呵呵,ne5532解释的不错。

使用特权

评论回复
5
工作狂|  楼主 | 2007-2-19 14:15 | 只看该作者

点评确实精彩,不过第2种用法是针对各种avr芯片都可以吗

使用特权

评论回复
6
zsmbj| | 2007-2-19 15:23 | 只看该作者

对于有内部ram的芯片都可以。

没有内部ram的芯片不行,都是硬件堆栈。不过这种没ram的芯片基本快不生产了。

使用特权

评论回复
7
工作狂|  楼主 | 2007-2-23 13:50 | 只看该作者

明白了,多谢

使用特权

评论回复
8
kaiwen21ic| | 2007-2-26 14:07 | 只看该作者

点评精采!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

21

帖子

0

粉丝