[求助]大家帮忙看看下面这段程序,为什么从子程序返回时会出错?
- UID
- 518620
- 性别
- 男
|
[求助]大家帮忙看看下面这段程序,为什么从子程序返回时会出错?
内行们帮忙看看,为什么下面这段程序在调用子程序时,不把当前地址入棧,而是把起始地址入棧?谢谢啦!! ; 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 ;从子程序返回
|
|
|
|
|
|
- UID
- 518620
- 性别
- 男
|
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|