[AVR单片机] avr入门的关于堆栈设置的问题

[复制链接]
4625|7
 楼主| 工作狂 发表于 2007-2-18 23:16 | 显示全部楼层 |阅读模式
 楼主| 工作狂 发表于 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解释的不错。

 楼主| 工作狂 发表于 2007-2-19 14:15 | 显示全部楼层

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

zsmbj 发表于 2007-2-19 15:23 | 显示全部楼层

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

没有内部ram的芯片不行,都是硬件堆栈。不过这种没ram的芯片基本快不生产了。
 楼主| 工作狂 发表于 2007-2-23 13:50 | 显示全部楼层

明白了,多谢

kaiwen21ic 发表于 2007-2-26 14:07 | 显示全部楼层

点评精采!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部