📄 beginvector.s
字号:
;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;
IMPORT mmain
IMPORT do_undefined_instruction
IMPORT do_software_interrupt
IMPORT do_prefetch_abort
IMPORT do_data_abort
IMPORT do_not_used
IMPORT do_irq
IMPORT do_frq
import |Image$$ZI$$Limit|
macro
$label save_reg $label2
$label
stdmf sp, {r0-r7}!
stdmf sp, {lr,r12}!
mend
AREA BeginRam, CODE, READONLY
code32
ENTRY
vector
b _reset_addr
b _undefined_instruction
b _software_interrupt
b _prefetch_abort
b _data_abort
b _not_used
b _irq
b _fiq
_undefined_instruction
bl do_undefined_instruction
_software_interrupt
bl do_software_interrupt
_prefetch_abort
bl do_prefetch_abort
_data_abort
bl do_data_abort
_not_used
bl do_not_used
_irq
bl do_irq
_fiq
bl do_frq
_reset_addr
;;;;;;;;;;;;;;;;;; config the stack in every mode
bl InitStack
bl mmain
loop
b loop
InitStack
MRS R0, CPSR
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
MSR CPSR_c, R0
MOV PC,LR
USR_STACK_LEGTH EQU 64
SVC_STACK_LEGTH EQU 64
FIQ_STACK_LEGTH EQU 64
IRQ_STACK_LEGTH EQU 64
ABT_STACK_LEGTH EQU 16
UND_STACK_LEGTH EQU 16
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=4
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 ;中止义模式堆栈空间
UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定义模式堆栈
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -