打印
[ZLG-ARM]

堆栈地址是怎样计算出的?

[复制链接]
1686|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinjing999|  楼主 | 2007-4-15 22:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USR_STACK_LEGTH     EQU         64
SVC_STACK_LEGTH     EQU         0
FIQ_STACK_LEGTH     EQU         16
IRQ_STACK_LEGTH     EQU         64
ABT_STACK_LEGTH     EQU         0
UND_STACK_LEGTH     EQU         0
; 名称:InitStack
; 功能:堆栈初始化,即初始化各模式下的堆栈指针。
; 入口参数:无
; 出口参数:无
; 说明:在特权模式下调用此子程序,比如复位后的管理模式
InitStack    
            MOV     R0, LR        ; R0 <= LR,因为各种模式下R0是相同的       

;设置管理模式堆栈
            MSR     CPSR_c, #0xd3   
            LDR     SP, StackSvc   
;设置中断模式堆栈
            MSR     CPSR_c, #0xd2   
            LDR     SP, StackIrq   
;设置快速中断模式堆栈
            MSR     CPSR_c, #0xd1   
            LDR     SP, StackFiq   
;设置中止模式堆栈
            MSR     CPSR_c, #0xd7   
              LDR     SP, StackAbt    
;设置未定义模式堆栈
            MSR     CPSR_c, #0xdb   
            LDR     SP, StackUnd   
;设置系统模式堆栈
            MSR     CPSR_c, #0xdf   
            LDR     SP, StackUsr   

            MOV     PC, R0   

StackUsr       DCD     UsrStackSpace + (USR_STACK_LEGTH - 1)*4
StackSvc    DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)*4
StackIrq    DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)*4
StackFiq    DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)*4
StackAbt    DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)*4
StackUnd    DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)*4


; 分配堆栈空间 
            AREA    MyStacks, DATA, NOINIT, ALIGN=2   
UsrStackSpace         SPACE      USR_STACK_LEGTH * 4     ; 用户(系统)模式堆栈空间   d
SvcStackSpace          SPACE      SVC_STACK_LEGTH * 4      ; 管理模式堆栈空间  
IrqStackSpace          SPACE      IRQ_STACK_LEGTH * 4      ; 中断模式堆栈空间  
FiqStackSpace          SPACE      FIQ_STACK_LEGTH * 4      ; 快速中断模式堆栈空间  
AbtStackSpace          SPACE      ABT_STACK_LEGTH * 4      ; 中止义模式堆栈空间  
UndtStackSpace      SPACE   UND_STACK_LEGTH * 4     ; 未定义模式堆栈      



经过ADS1.2仿真;发现地址变化如下
svc   0x400030fc
irq   0x400031fc
fiq   0x4000323c
abort 0x4000323c
undef 0x4000323c
sys   0x400030fc

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

363

帖子

1

粉丝