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

📄 arm_assemble.s

📁 DM2410开发板
💻 S
字号:
;===============================================================
;实验名称:ARM汇编语言编程实验
;程序功能:实现从源地址拷贝num个字数据,到目的地址des中
;===============================================================

;下面是段名为Init的,只读的代码段

	AREA	Init, CODE, READONLY

num	EQU		20
	
	ENTRY					;伪指令指出程序的入口点

;传递参数并设置堆栈	

start
	LDR		r0, =src		;r0 = 源数据块地址
		
	LDR		r1, =dst		;r1 = 目的数据块地址
	
	MOV		r2, #num		;r2 = 拷贝字数量
		
	MOV		sp, #0x400		;建立栈指针(r13)

;块拷贝:以32个字节(8个字)为单位进行拷贝
;使用指令:LDMIA,STMIA

blockcopy
	MOVS	r3, r2, LSR #3	;r3 = r2/8 = 2(num = 20)
	
	BEQ		copywords		;少于8个字则跳转到copywords处理
	
	STMFD	sp!, {r4 - r11}	;保存工作寄存器

octcopy
	LDMIA	r0!, {r4 - r11}	;从源地址取出8个字数据分别存放到(r4 - r11)中
	
	STMIA	r1!, {r4 - r11}	;将(r4 - r11)中的数据设置到目的数据块地址
	
	SUBS	r3, r3, #1		;计数器递减
	
	BNE		octcopy			;重复拷贝
		
	LDMFD	sp!, {r4 - r11}	;恢复工作寄存器

;字拷贝:以4个字节(1个字)为单位进行拷贝
;使用指令:LDR,STR
	
copywords
	ANDS	r2, r2, #7		;最多拷贝7个,多余8个先使用blockcopy,然后使用copywords拷贝
	
	BEQ		stop			;是否拷贝完毕,拷贝完毕则跳转到stop

wordcopy
	LDR		r3, [r0], #4	;从源地址取出1个字数据存放到r3中
	
	STR		r3, [r1], #4	;将r3中的数据设置到目的数据地址
	
	SUBS	r2, r2, #1		;计数器递减

	BNE		wordcopy		;重复拷贝

;将程序的控制权转交给调试器
	
stop
	MOV		r0, #0x18		;angel_SWIreason_ReportException
	
	LDR		r1, =0x20026	;ADP_Stopped_ApplicationExit
	
	SWI		0x123456		;ARM semihosting SWI
	
;下面是段名为BlockData的,可读写的数据段
;定义源地址数据,以及目的地址数据

	AREA BlockData, DATA, READWRITE

src     DCD     1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst     DCD     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

	END						;程序结束

⌨️ 快捷键说明

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