ARM:嵌入式系统之ARM指令

嵌入式开发 (2)

1、编绎执行下列汇编程序sy1.S,要在开发板上执行。程序执行后返回到调用处,使用uboot的md 0x20009000 1命令查看0x20009000处的值。理解程序如何返回的调用处的,程序调用要做哪些工作。如果省去最后mov pc,lr指令,则会出现什么结果,为什么?

.text
.global _start
_start:
	mov r0,#0x04
	mov r1,#0x03
	add r2,r0,r1
	Ldr r3,=0x20009000
	str r2,[r3]
	mov pc,lr
.end

答案:

.text
.global _start
_start
	mov r0,#3
	mov r1,#4
	add r2,r0,r1
	ldr r0,=0x20009000
	str r2,[r0]
	mov pc,lr
.end

2、将sy1程序下载到0x20007000处,编写汇编程序sy2.S,调用sy1,并能正确返回。

Tftp 20007000 sy1.bin

Tftp 20008000 sy2.bin

Go 20008000

答案:
ARM:嵌入式系统之ARM指令_第1张图片
3、编写程序sy3.S,功能:开中断,禁止快速中断。
答案:

.text
.global _start
_start:
	mrs r0,cpsr
	orr r0,#0x40
	msr cpsr,r0
	mov pc,lr 

4、编写程序sy4.S,读取内存地址为0x20008000处的值入r0,修改r0低8位为0x1f,其他位保持不变。并将r0的值存入内存单元0x20009000处。

.text
.global _start
_start:
	ldr r0,=0x20008000
	orr r0,#0x1f
	ldr r1,=0x20009000
	str r0,[r1]
	mov pc,lr 
.end

5、Sy5.S使用循环计算1+2+…+100 并将结果存入0x20009000处(答案:0x13ba)

.text
.global _start
_start:
	mov r1,#1
	mov r0,#0
for:
	cmp r1,#100
	bgt endfor
	add r0,r0,r1
	add r1,r1,#1
	b for
endfor:
	ldr r2,=0x20009000
	str r0,[r2]
	mov pc,lr
.end 

6、编写程序sy6.S计算 1+(1+2)+(1+2+3)+….+(1+2+…+20),并将结果存入0x20009000处,要编写子程序addn 计算1+2+…n,主程序调用该子程序最终完成计算( 结果: 0x604 )。

.text
.global _start
_start:
	stmfd sp!,{
     lr}
	mov R4,#0
	mov R5,#1
for2:
	cmp R5,#20
	bgt endfor2
	mov R0,R5
	bl addn
	add R4,R4,R0
	add R5,R5,#1
	b for2
endfor2:
	ldr R0,=0x20009000
	str R4,[R0]
	ldmfd sp!,{
     lr}
	mov pc,lr
addn:
	mov R1,#0
for:
	cmp R0,#1
	blt endfor
	add R1,R1,R0	
	sub R0,R0,#1
	b for
endfor:
	mov R0,R1
	mov pc,lr 

7、Sy7.S使用循环计算1到100之间能被4整除的所有数的和,并将结果存入0x20009000处。(结果:0x514)

.text
.global _start
_start:
mov r0,#1
MOV r1,#0
myloop:
      cmp r0,#100
      bgt exit
      tst r0,#0X3
      addeq r1,r1,r0
      add r0,r0,#1
      b myloop
exit:
      ldr r0,=0x20009000
      str r1,[r0]
      mov pc,lr 

8、编写程序sy8.S, 将内存0x20008000开始的5个数据(每个数据4个字节)复制到内存0x20009000这个位置。(要求使用ldm,stm指令)

.text
.global _start
_start:
		stmfd sp!,{
     r0,r1-r4,r5}
		ldr r0,=0x20008000
		ldmfd r0! ,{
     r0,r1-r4,r5}
		ldr r0,=0x20009000
		stmea r0!, {
     r0,r1-r4,r5}
		ldmfd sp!,{
     r0,r1-r4,r5}
		mov pc,lr
.end 

你可能感兴趣的:(嵌入式系统,嵌入式)