关于堆栈初始化问题请教,请问如下两种方式的本质区别...
方法一:.......
; Stack
Unused_Stack_SizeEQU 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_SizeEQU (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
......
请问如上两种方式堆栈方式绝对地址和相对地址有关吗?
自己顶一下……请指点啊
页:
[1]