嵌入式汇编实验二

嵌入式汇编实验二

环境:ADS
软件:Metrowerks CodeWarrior for ARM Developer Suite v1.2

一、复制数据

要求:用汇编语言编程实现:将存储器中起始地址M1处的4个字数据复制到地址M2处。

	AREA SCopy,CODE,READONLY
M1 DCD 0x0001,0x0002,0x0003,0x0004
M2 DCD 0x0000,0x0000,0x0000,0x0000
	ENTRY
	CODE32

START

	LDR R0,=M1		;M1的地址
	LDR R1,=M2		;M2的地址
	LDMIA R0!,{R4-R7}
	STMIA R1!,{R4-R7}
	
	END

二、累加

要求:用汇编语言编程实现:100+101+102+…+200,其和存于R0。

	AREA Test,CODE,READONLY
	ENTRY
	CODE32

START

	MOV R0,#0
	MOV R1,#100
	
LOOP
	
	ADD R0,R0,R1
	ADD R1,R1,#1
	CMP R1,#201
	BNE LOOP
	
	END

三、寻找最小值

要求:用汇编语言编程实现:从存储器中起始地址M1处的20个字节数据中,找出一个最小数存放在R0中。

	AREA TEST2,DATA,READWRITE
M1 DCB 0x20,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11
   DCB 0x10,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01
	
	AREA TEST1,CODE,READONLY
	ENTRY
	CODE32

START

	LDR R1,=M1
	LDRB R0,[R1],#1		;存放最小值
	MOV R3,#1			;次数
	
FIND

	LDRB R2,[R1],#1		
	CMP R0,R2
	MOVHS R0,R2
	ADD R3,R3,#1
	CMP R3,#20
	BNE FIND
	
	END

四、跳转表

要求:利用跳转表的思想编写一个汇编子程序,根据键入的值(存放在R0中)不同来完成不同的子程序跳转(假设有四个子程序SUB0、SUB1、SUB2、SUB3)。

	AREA Test,CODE,READONLY
	ENTRY
	CODE32

START

	MOV R0,#1
	BL JUMPTAB
	B Stop
	
JUMPTAB

	ADR R1,SUBTAB
	LDR PC,[R1,R0,LSL #2]	;R0 * 4 + R1 -> PC
	
SUBTAB
	
	DCD SUB0
	DCD SUB1
	DCD SUB2
	DCD SUB3
	
SUB0

	;要执行的代码
	MOV PC,LR
	
SUB1

	MOV R3,#1
	MOV PC,LR

SUB2
	
	;要执行的代码
	MOV PC,LR
	
SUB3
	
	;要执行的代码
	MOV PC,LR

Stop	

	MOV R0,#0x18
	LDR R1,= &20026
	SWI 0x123456
	
	END

说明:

SUBTAB下面的四个DCD:分配4个连续字地址,假如是0x00008014、0x00008018、0x0000801C、0x00008020,这四个地址中存放的值就是各个SUB段的地址,例如上面的代码,SUB0,SUB2,SUB3只有一行代码,SUB1有两行代码,那么SUB[i] 对应的地址为:

[0x00008014] -> 0x00008024 ; SUB0的地址
[0x00008018] -> 0x00008028 ; SUB1的地址
[0x0000801C] -> 0x00008030 ; SUB2的地址
[0x00008020] -> 0x00008034 ; SUB3的地址

SUB1有两行代码,所以SUB2的地址需要 +8

所以这条指令 LDR PC,[R1,R0,LSL #2] 相当于 取SUB[i] 的地址赋值给PC,实现了跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值