testasm.s

来自「汇编编写的ARM启动代码」· S 代码 · 共 141 行

S
141
字号
		; 定义输出的全局符号
		export	Exit
		import	Loader		
		
		include		defines.s			
five	equ		5		

		
		
		
		; 用于返回arm的子程序段
		; --------------------------------------------------------------
		area	Exit, code
		code32
        MOV     r0, #0x18       ; angel_SWIreason_ReportException
        LDR     r1, =0x20026    ; ADP_Stopped_ApplicationExit
        SWI     0x123456        ; ARM semihosting SWI

       
		
		
		
		; 设置所有特权模式的堆栈
		; --------------------------------------------------------------
		area	SetSp, code
		code32
		mrs		r0, cpsr
		mov		r1, r0			; 保存当前cpsr
		bic		r0, r0, #&1f	; 清零低5位
		
		add		r2, r0, #MODE_FIQ
		msr		cpsr_c, r2;		
		ldr		sp, =SP_FIQ_BASE

		add		r2, r0, #MODE_IRQ
		msr		cpsr_c, r2;
		ldr		sp, =SP_IRQ_BASE

		add		r2, r0, #MODE_SVC
		msr		cpsr_c, r2;
		ldr		sp, =SP_SVC_BASE

		add		r2, r0, #MODE_ABT
		msr		cpsr_c, r2;
		ldr		sp, =SP_ABT_BASE
				
		add		r2, r0, #MODE_UND
		msr		cpsr_c, r2;
		ldr		sp, =SP_UND_BASE
		
		add		r2, r0, #MODE_SYS
		msr		cpsr_c, r2;
		ldr		sp, =SP_USR_BASE
		
		msr		cpsr_fsxc, r1
		mov		pc, lr
		
		
		
		
		; 一个初始化数据段
		; --------------------------------------------------------------
		area	initedData
		code32
		
msg		=	"This is a test program!", 0
cde		dcd 	&e3a000fe




		; 中断向量表
		; --------------------------------------------------------------
        area	Vectors, code
        code32        
		entry        
        ldr		pc, reset_1
        ldr		pc, undefine_6
        ldr		pc, swi_6
        ldr		pc, Iabort_5
        ldr		pc, Dabort_2
        dcd		0
        ldr		pc, irq_4
        ldr		pc, fiq_3        
       
reset_1			&	ResetIntHandler	
undefine_6		&	0
swi_6			&	0
Iabort_5		&	0
Dabort_2		&	0
irq_4			&	0
fiq_3			&	0



		; 复位处理
		; --------------------------------------------------------------
		area	ResetIntHandler, code
		code32
		; 如果ROM不位于0,则要把中断向量表搬移到0(RAM)中,然后地址重映射
		; .......
		
		bl		Loader	; 搬移运行时域		
		bl		SetSp	; 设置堆栈				
		

		ldr		r0, =loop
		
		
		;msr		cpsr_c, #2_10000
		msr		cpsr_c, #&10 ;开中断,转入用户模式		
		
		
loop	nop
		b 		loop
		
		b		Exit

		
		
		; 存储区设置
		; 物理地址映射配置
		; 虚拟存储管理配置,各级页表
		; --------------------------------------------------------------
		area	MemInit, code
		code32
		mov		pc, lr
		
		
		
		
		end


        


        


⌨️ 快捷键说明

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