视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ARM 实验报告
2025-09-30 01:32:31 责编:小OO
文档


               A R M 与 嵌 入 式 技 术

专业班级:09电子信息工程3班

学号:0901********

姓名:王孟雄

1、 编写程序将R2的高8位传送到R3的低8位(不考虑R3的其他位) 

   ⑴、程序代码: 

.global _start 

_start: 

ldr R2,=0x12345678 ;将立即数12345678存储到R2中

ldr R3,=0x98765432 ;将98765432存储在R3中 

mov R2,R2,ROR #24 ;循环移位24位,使R2中的高八位移到第八位 

and R2,R2,#0x000000ff ;屏蔽掉R2的高24位, 

and R3,R3,#0xffffff00 ;屏蔽掉R2的低8位 

orr R3,R3,R2 ;用取或将R2的低8位移到R3得低8位 

stop: 

b stop 

.end

⑵、实验内容:

将12345678存储在R2中

将98765432存储在R3中

将R2中的高8位“12”移到R2的低8位,原来的数“12345678”变为“34567812”

屏蔽掉R2中的高24位,采用或命令时使其不影响R3中高24位的数值

屏蔽掉R3中的低8位,使使用或命令是能将R2的低8位移到R3的低8位

将R2中的高8位”12”移到R3的低8位而不影响R3中的其他的24位

2、 实现位的加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中 

⑴、程序代码: 

.global _start 

_start: 

ldr R0,=0x47584568 ;将立即数47584568存储在R0中 

ldr R1,=0xeeee ;将立即数eeee存储在R1中 

ldr R2,=0x504ed99d ;将立即数504ed99d存储在R2中 

ldr r3,=0x49556f ;将立即数49556f 存储在R3中 

adds r0,r0,r2 ;使用带标志位的加法指令将R2+R0中的值存到R0 

adc r1,r1,r3 ;使用带进位的加法指令将R3+R1的值存到R1中,如果R0+R2产生了进位,则C=1,此时将R1+1 

stop: 

b stop 

.end

⑵、实验内容:

将立即数47584568存储在R0中

将立即数eeee存储在R1中

将立即数504ed99d存储在R2中

将立即数49556f 存储在R3中

使用带标志位的加法指令将R2+R0中的值存到R0

使用带进位的加法指令将R3+R1的值存到R1中,如果R0+R2产生了进位,则C=1,此时将R1+1

⑶、结果分析 

注:以下分析均为16进制计算 

【 R1 : R0 】+【 R3 : R2 】=【 R1 : R0 】 

【eeee:47584568】+【49556f :504ed99d】=【12d3445d:97a71f05】 

首先低32位相加:47584568+504ed99d:8+d=5,C=1;6+9+1=0,C=1;5+9+1=f,C=0; 

4+d=1,C=1;8+e+1=7,C=1;5+4+1=a,C=0; 

7+0=7,C=0;4+5=9 ,C=0。 

相加后的结果为:47584568+504ed99d=97a71f05,可以看出低32位相加得出的结果和实验得出的结果一样。

再是高32位相加:eeee+49556f:e+f=d ,C=1;e+6+1=5,C=1;e+5+1=4,C=1; 

e+5+1=4,C=1;9+9+1=3,C=1;8+4+1=d,C=0; 

9+9+0=2,C=1;8+8+1=1,C=1。 

相加后的结果为:eeee+49556f =12d3445d,可以看出高32位相加得出的结果和实验得出的结果一样。 

所以由结果可以看出实验成功!

3、 编写一段程序计算10 ! 

⑴、程序代码: 

.global _start 

_start: 

mov R0,#10 ;将立即数10存储在R0中

mov R1,#10 ;将立即数10存到R1中,作为循环次数的限 

minus : sub R1,R1,#1 ;标记一个minus 子函数,每执行一次R1自减1 

mul R0,R1,R0 ;R1自减后与R0相乘,积放在R0中 

cmp R1,#0 ;判断R1是不是减到1了,如果没有则继续调用子程序 

bne minus ;如果Z不等于1,那么跳转到子程序标记处 

stop: 

b stop 

.end

⑵、实验内容:

跟踪10次后的答案是:0x375f00

⑶、结果分析: 

10 !=10x9x8x7x6x5x4x3x2x1=3638800,转化为16进制为375f00(3x165+7x1+5x163+15x162+0x161+0x160=3145728+458752+20480+3840=3628800) 

可以看出实验结果和计算出来的结果一致,所以实验成功!

4、 编写程序将地址1000H~1030H的数据全部搬移到2000H~2030H中,并将原数据区清零 

⑴、程序代码: 

.global _start 

_start: 

ldr R0,=0x1000 ;将地址1000H送到R0中存储 

ldr R1,=0x2000 ;将地址2000H送到R1中存储 

mov R2,#48 ;将立即数48送到R2中 

mov R4,#0 ;初始化R4,将0存储到R4中 

copy: ldrb R3,[R0] ;标记子程序入口 

strb R4,[R0],#1 ;将寄存器R0中的内容移到R4中 

strb R3,[R1],#1 ;将寄存器R1中的内容移到R3中 

subs R2,R2,#1 ;判断是否移完 

bne copy ;如果没有移完则跳转到子程序入口继续移 

stop: 

b stop

.end

⑵、实验内容:

⑶、结果分析 

由单步调试可以看出,没执行一次,则程序计数器PC就增加4,源地址首段地址为1000H,增加30H(3x16+0=48)则末段地址为1030H,之间有30H个空间,目的地址首段地址为2000H,增加30H(3x16+0=48)则末段地址为2030H,之间有30H个空间,然后使用strb指令将8位字节数据传输到指定的内存(此字节数据为元寄存器中的低8位)。由PC值可以看出试验成功。下载本文

显示全文
专题