📄 transit_code.asm
字号:
AREA TRANSIT, CODE, READONLY
; Linker produced symbols
LR_Limit_Ptr
IMPORT |Image$$ER_INIT$$Limit|
DCD |Image$$ER_INIT$$Limit|
ER_RO_Start_Ptr
IMPORT |Image$$ER_RO$$Base|
DCD |Image$$ER_RO$$Base|
ER_RO_End_Ptr
IMPORT |Image$$ER_RO$$Limit|
DCD |Image$$ER_RO$$Limit|
ER_RW_RAM_Start_Ptr
IMPORT |Image$$ER_RW$$Base|
DCD |Image$$ER_RW$$Base|
ER_RW_BSS_Start_Ptr
IMPORT |Image$$ER_RW$$ZI$$Base|
DCD |Image$$ER_RW$$ZI$$Base|
ER_RW_BSS_End_Ptr
IMPORT |Image$$ER_RW$$ZI$$Limit|
DCD |Image$$ER_RW$$ZI$$Limit|
;; IMPORT cinit
;; IMPORT _ld_bss_start
;; IMPORT _ld_bss_end
EXPORT TCT_Transit_Code
TCT_Transit_Code
;copy initialized code and data in ROM to RAM
LDR a1,=LR_Limit_Ptr
LDR a1,[a1]
LDR a2,=ER_RO_Start_Ptr
LDR a2,[a2]
LDR a4,=ER_RO_End_Ptr
LDR a4,[a4]
CMP a2,a4
BEQ INT_RW_Copy
INT_ROM_Code_Copy
CMP a2,a4
LDRCC a3,[a1],#4
STRCC a3,[a2],#4
BCC INT_ROM_Code_Copy
INT_RW_Copy
LDR a2,=ER_RW_RAM_Start_Ptr
LDR a2,[a2]
LDR a4,=ER_RW_BSS_Start_Ptr
LDR a4,[a4]
CMP a1,a2
BEQ INT_BSS_Clear
INT_ROM_Vars_Copy
CMP a2,a4
LDRCC a3,[a1],#4
STRCC a3,[a2],#4
BCC INT_ROM_Vars_Copy
; Clear the un-initialized global and static C data areas.
INT_BSS_Clear
LDR r0,ER_RW_BSS_Start_Ptr ; Pickup the start of the BSS area
MOV r2,#0 ; Clear value in r2
LDR r1,ER_RW_BSS_End_Ptr ; Pickup the end of the BSS area
INT_BSS_Clear_Loop
STR r2,[r0],#4 ; Clear a word
INT_BSS_Clear_Check
CMP r0,r1 ; Are the start and end equal?
BNE INT_BSS_Clear_Loop ; If so, continue with BSS clear
; Perform auto-initialization. if cinit is -1, then there is none.
; LDR r0, c_cinit
; CMN r0, #1
; BLNE _auto_init
MOV pc, lr
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -