300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > ARM:嵌入式系统之ARM指令

ARM:嵌入式系统之ARM指令

时间:2021-03-20 09:01:10

相关推荐

ARM:嵌入式系统之ARM指令

嵌入式开发 (2)

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

.text.global _start_start:mov r0,#0x04mov r1,#0x03add r2,r0,r1Ldr r3,=0x20009000str r2,[r3]mov pc,lr.end

答案:

.text.global _start_startmov r0,#3mov r1,#4add r2,r0,r1ldr r0,=0x20009000str r2,[r0]mov pc,lr.end

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

Tftp 20007000 sy1.binTftp 20008000 sy2.binGo 20008000

答案:

3、编写程序sy3.S,功能:开中断,禁止快速中断。

答案:

.text.global _start_start:mrs r0,cpsrorr r0,#0x40msr cpsr,r0mov pc,lr

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

.text.global _start_start:ldr r0,=0x20008000orr r0,#0x1fldr r1,=0x20009000str r0,[r1]mov pc,lr .end

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

.text.global _start_start:mov r1,#1mov r0,#0for:cmp r1,#100bgt endforadd r0,r0,r1add r1,r1,#1b forendfor:ldr r2,=0x20009000str 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,#0mov R5,#1for2:cmp R5,#20bgt endfor2mov R0,R5bl addnadd R4,R4,R0add R5,R5,#1b for2endfor2:ldr R0,=0x20009000str R4,[R0]ldmfd sp!,{lr}mov pc,lraddn:mov R1,#0for:cmp R0,#1blt endforadd R1,R1,R0sub R0,R0,#1b forendfor:mov R0,R1mov pc,lr

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

.text.global _start_start:mov r0,#1MOV r1,#0myloop:cmp r0,#100bgt exittst r0,#0X3addeq r1,r1,r0add r0,r0,#1b myloopexit:ldr r0,=0x20009000str 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,=0x20008000ldmfd r0! ,{r0,r1-r4,r5}ldr r0,=0x20009000stmea r0!, {r0,r1-r4,r5}ldmfd sp!,{r0,r1-r4,r5}mov pc,lr.end

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。