📄 remap.s
字号:
;******************************************************************************
; File:REMAP.S
; 功能:REMAP控制操作。
; 说明:在REMAP前观察0x00000000-0x0000003F处的数据,REMAP后再次读出观察。
; 对REMAP的空间0x4000000-0x4000003F进行修改,观察0x00000000-0x0000003F处的数据。
;******************************************************************************
INCLUDE LPC2106.INC ; 引入头文件
AREA DoRemap,CODE,READONLY
ENTRY ; 程序入口
STARTC ; 进行系统初始化
MSR CPSR_c,#0xD3 ; 设置各种模式下的堆栈,
LDR SP,=0x40003000
MSR CPSR_c,#0xD2
LDR SP,=0x40003100
MSR CPSR_c,#0xD1
LDR SP,=0x40003200
MSR CPSR_c,#0x10
LDR SP,=0x40003300
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
; REMAP操作
REMAPS MOV R0,#0x40000000 ; 复制中断向量代码
LDR R1,=Vectors
LDMIA R1!,{R2-R9}
STMIA R0!,{R2-R9}
LDMIA R1!,{R2-R9}
STMIA R0!,{R2-R9}
LDR R0,=MEMMAP ; REMAP操作
MOV R1,#0x02
STR R1,[R0]
; 修改中断向量
LDR R0,=0x40000028 ; 修改SWI中断向量,使其指向HALT
LDR R1,=HALT
STR R1,[R0]
; 运行SWI中断
SWI 0x123456
NOP
HALT NOP
B HALT
; 定义中断向量表,用于REMAP
AREA Vect,CODE,READONLY
Vectors
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
NOP
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
ResetAddr DCD Reset
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
; 中断服务程序
Reset
Undefined
SoftwareInterrupt
PrefetchAbort
DataAbort
IRQ_Handler
FIQ_Handler
B .
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -