|
方法一:
.......
; Stack
Unused_Stack_Size EQU 0x00000100
Svc_Stack_Size EQU 0x00001000
Abt_Stack_Size EQU 0x00000100
Fiq_Stack_Size EQU 0x00000100
Irq_Stack_Size EQU 0x00001000
Usr_Stack_Size EQU 0x00001000
ISR_Stack_Size EQU (Unused_Stack_Size + Svc_Stack_Size + Abt_Stack_Size + \
Fiq_Stack_Size + Irq_Stack_Size)
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Usr_Stack_Size
__initial_sp SPACE ISR_Stack_Size
Stack_Top
........
****************************************************************
;* Initialize Stack Pointer
;****************************************************************
; Setup Stack for each mode
LDR R0, =Stack_Top
; Enter Undefined Instruction Mode and set its Stack Pointer
MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #Unused_Stack_Size
.........
方法二(0x04000000是ram地址)
SP_USR EQU 0x0400fff0; USR模式下的堆栈首指针
SP_SYS EQU 0x0400fef0; SYS模式下的堆栈首指针
SP_SVC EQU 0x0400fdf0; SVC模式下的堆栈首指针
SP_IRQ EQU 0x0400fbf0; IRQ模式下的堆栈首指针
SP_FIQ EQU 0x0400faf0 ; FIQ模式下的堆栈首指针
SP_UND EQU 0x0400f9f0; UND模式下的堆栈首指针
SP_ABT EQU 0x0400f8f0 ; ABT模式下的堆栈首指针
......
ldr sp, =SP_SVC ;init sp_svc
mov R4, #0xD2 ;chmod to irq and init sp_irq
msr cpsr_cf, R4
ldr sp, =SP_IRQ
......
请问如上两种方式堆栈方式绝对地址和相对地址有关吗?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|