|
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
AREA Example7,CODE,READONLY
ENTRY
CODE32
START MOV R0,#0
MOV R1,#1
MOV R2,#2
MOV R3,#3
MOV R4,#4
MOV R5,#5
MOV R6,#6
MOV R7,#7
MOV R8,#8
MOV R9,#9
MOV R10,#10
MOV R11,#11
MOV R12,#12
BL InitStack
MRS R0,CPSR
BIC R0,R0,#0x80
MSR CPSR_cxsf,R0
MSR CPSR_c,#0xd0
MRS R0,CPSR
MSR CPSR_c,#0xdf
MRS R0,CPSR
HALT B HALT
InitStack
MOV R0,LR
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 UndStackSpace+(UND_STACK_LEGTH-1)*4
AREA MyStack,DATA,NOINIT,ALIGN=2
UsrStackSpace SPACE USR_STACK_LEGTH*4
SvcStackSpace SPACE SVC_STACK_LEGTH*4
IrqStackSpace SPACE IRQ_STACK_LEGTH*4
FiqStackSpace SPACE FIQ_STACK_LEGTH*4
AbtStackSpace SPACE ABT_STACK_LEGTH*4
UndStackSpace SPACE UND_STACK_LEGTH*4
END
各位大哥大姐们,请教教小弟:各个模式下堆栈的起始地址的计算和后面几句伪指令的计算,小弟不胜感激!!!
[em03] |
|