⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootldr.s

📁 汇编编写的ARM启动代码
💻 S
字号:
		import |Load$$ER_RO$$Base|
		import |Load$$ER_RW$$Base|
		import |Load$$ER_ZI$$Base|
		
		import |Image$$ER_RO$$Base|
		import |Image$$ER_RW$$Base|
		import |Image$$ER_ZI$$ZI$$Base|
		
		import |Image$$ER_RO$$Limit|
		import |Image$$ER_RW$$Limit|
		import |Image$$ER_ZI$$ZI$$Limit|

		export Loader

		area	Loader, code
		code32
reglist	rlist	{r3-r12}
		
		mov		r13, lr;					; 保存lr地址
		ldr		r0, =|Load$$ER_RO$$Base|	; ER_RO运行时域的加载时地址
		ldr		r1, =|Image$$ER_RO$$Base|   ; ER_RO运行时域的运行时地址
		ldr		r2, =|Image$$ER_RO$$Limit|	; ER_RO运行时域的长度
		cmp		r0, r1						; 两个不一样则要搬移
		blne	move
		
		ldr		r0, =|Load$$ER_RW$$Base|	; ER_RW运行时域的加载时地址
		ldr		r1, =|Image$$ER_RW$$Base|   ; ER_RW运行时域的运行时地址
		ldr		r2, =|Image$$ER_RW$$Limit|	; ER_RW运行时域的长度
		cmp		r0, r1						; 两个不一样则要搬移
		blne	move		
		
		ldr		r1, =|Image$$ER_ZI$$ZI$$Base|   ; ER_ZI运行时域的运行时地址
		ldr		r2, =|Image$$ER_ZI$$ZI$$Limit|	; ER_ZI运行时域的长度		

setZI	mov		r0, #0
		cmp		r1, r2						; 两个不一样则要搬移
		strcc	r0, [r1], #4
		bcc		setZI		
		
		mov 	pc, r13						; 返回



; 数据搬移子程序
; -----------------------------------------------------------
		
move	
		sub 	r3, r2, r1
		cmp 	r3, #40						; 尚剩余40以上字节,40字节40字节的搬
		
		ldmgeia	r0!, reglist
		stmgeia	r1!, reglist		
		bge		move		


moveWord
		sub 	r3, r2, r1
		cmp 	r3, #4						; 尚剩余4个以上,不到40字节,4字节4字节的搬
		ldrge	r4, [r0], #4				
		strge	r4, [r1], #4	
		bge		moveWord

		
moveByte
		cmp		r1, r2						; 尚剩余不到4字节,1字节1字节的搬
		ldrccb	r4, [r0], #1				
		strccb	r4, [r1], #1	
		bcc 	moveByte
		
		mov 	pc, lr						; 返回
		
		
		end
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -