内行们帮忙看看,为什么下面这段程序在调用子程序时,不把当前地址入棧,而是把起始地址入棧?谢谢啦!!
; 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 ;从子程序返回
是编译器的问题吗?
你认为是哪一句指令将起始地址入栈,什么起始地址?
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |