首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]大家帮忙看看下面这段程序,为什么从子程序返回时会出错?

[求助]大家帮忙看看下面这段程序,为什么从子程序返回时会出错?

内行们帮忙看看,为什么下面这段程序在调用子程序时,不把当前地址入棧,而是把起始地址入棧?谢谢啦!!

; export symbols
XDEF Entry, main
; we use export 'Entry' as symbol. This allows us to
; reference 'Entry' either in the linker .prm file
; or from C/C++ later on

;XREF __SEG_END_SSTACK ; symbol defined by the linker for the end of the stack

; include derivative specific macros
INCLUDE 'mc9s12dg128.inc'

org $1000 ;程序从1000开始
main:


Entry: LDAA #$FF ;
STAA DDRK ;设置B口为输出
SEC ;将CCR中的C置位
LDAA #$01 ;

SHIFT:
STAA PORTK ;赋初值,是一个灯亮
BSR DELAY ;调用延时子程序
RORA ;带位左循环移动
BRA SHIFT ;循环
;*****************************************************************
;延时程序:利用寄存器X,Y实现两重循环,延时时间为100ms
;*****************************************************************
DELAY: PSHA
PSHB ;A,B,X寄存器值入栈保护
PSHX
LDX #$0200 ;外循环次数为$0200
DELAY1: LDY #$0500 ;内循环次数为$0500
DELAY2: DEY
BNE DELAY2 ;当Y值不为0时跳转到DELAY2
DEX
BNE DELAY1 ;当X值不为0时跳转到DELAY1
PULX ;X,B,A出栈,注意出栈顺序和入栈顺序相反!!
PULB
PULA
RTS ;从子程序返回

是编译器的问题吗?

你认为是哪一句指令将起始地址入栈,什么起始地址?

海纳百川  有容乃大
返回列表