访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
A51 4.1.3 堆栈段(Stack Segment)
内容导读:
 x51架构使用一个硬件堆栈为CALL指令存储返回地址,也用于PUSH和POP指令的临时存储。使用这些指令的8051应用程序必须把堆栈指针设置到一个不允许其它变量使用的存储区域。

    对于传统的8051,必须定义一个堆栈段,堆栈空间必须按下面的方法保留。这种定义也适用于扩展的8051和251,而一般情况下,这些控制指令也可以在其它区域设置堆栈。

STACK SEGMENT IDATA  
  RSEG STACK ; 选择堆栈段
  DS 10h ; 保留16个字节的空间

然后,你必须在程序的开始初始化堆栈指针。

CSEG AT 0 ; 复位向量
  JMP STARTUP ; 跳转到启动代码
STARTUP:     ; 在复位时执行的代码
  MOV SP, #STACK - 1 ; 装入堆栈指针

    对于Philips 80C51MX或者Intel/Atmel WM 251,可以定义一个堆栈段,而且必须按下面的方法保留堆栈空间。

STACK SEGMENT EDATA  
  RSEG STACK ; 选择堆栈段
  DS 100h ; 保留256个字节的空间

然后,你必须在程序的开始初始化堆栈指针。

CSEG AT 0 ; 复位向量
  JMP STARTUP ; 跳转到启动代码
STARTUP:     ; 在复位时执行的代码
;为Philips 80C51MX设置堆栈
  ORL MXCON, #0x02 ; 使能扩展的堆栈
  MOV SPE, #HIGH (STACK - 1) ; 装入堆栈高字节
  MOV SP, #LOW (STACK - 1) ; 装入堆栈低字节
       
为Intel/Atmel WM 251设置堆栈
  MOV DR60, #STACK - 1 ; 装入堆栈指针

如果你要使汇编接口到C,你可能不需要设置堆栈。这在C启动代码中已经为你做好了。

标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐