Board logo

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

作者: terencejia111    时间: 2008-11-1 15:15     标题: [求助]大家帮忙看看下面这段程序,为什么从子程序返回时会出错?

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

; 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 ;从子程序返回


作者: terencejia111    时间: 2008-11-3 10:54

是编译器的问题吗?


作者: strongchen    时间: 2008-11-3 14:42

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






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0