ARM 实验报告12p.docx
- 文档编号:3373304
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:9
- 大小:420.65KB
ARM 实验报告12p.docx
《ARM 实验报告12p.docx》由会员分享,可在线阅读,更多相关《ARM 实验报告12p.docx(9页珍藏版)》请在冰豆网上搜索。
ARM实验报告12p
ARM与嵌入式技术
实
验
报
告
1、编写程序将R2的高8位传送到R3的低8位(不考虑R3的其他位)
⑴、程序代码:
.global_start
_start:
ldrR2,=0x12345678;将立即数12345678存储到R2中
ldrR3,=0x98765432;将98765432存储在R3中
movR2,R2,ROR#24;循环移位24位,使R2中的高八位移到第八位
andR2,R2,#0x000000ff;屏蔽掉R2的高24位,
andR3,R3,#0xffffff00;屏蔽掉R2的低8位
orrR3,R3,R2;用取或将R2的低8位移到R3得低8位
stop:
bstop
.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、实现64位的加法运算,要求【R1:
R0】+【R3:
R2】,结果放回【R1:
R0】中
⑴、程序代码:
.global_start
_start:
ldrR0,=0x47584568;将立即数47584568存储在R0中
ldrR1,=0x8989eeee;将立即数8989eeee存储在R1中
ldrR2,=0x504ed99d;将立即数504ed99d存储在R2中
ldrr3,=0x8949556f;将立即数8949556f存储在R3中
addsr0,r0,r2;使用带标志位的加法指令将R2+R0中的值存到R0
adcr1,r1,r3;使用带进位的加法指令将R3+R1的值存到R1中,如果R0+R2产生了进位,则C=1,此时将R1+1
stop:
bstop
.end
⑵、实验内容:
将立即数47584568存储在R0中
将立即数8989eeee存储在R1中
将立即数504ed99d存储在R2中
将立即数8949556f存储在R3中
使用带标志位的加法指令将R2+R0中的值存到R0
使用带进位的加法指令将R3+R1的值存到R1中,如果R0+R2产生了进位,则C=1,此时将R1+1
⑶、结果分析
注:
以下分析均为16进制计算
【R1:
R0】+【R3:
R2】=【R1:
R0】
【8989eeee:
47584568】+【8949556f:
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位相加:
8989eeee+8949556f:
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。
相加后的结果为:
8989eeee+8949556f=12d3445d,可以看出高32位相加得出的结果和实验得出的结果一样。
所以由结果可以看出实验成功!
3、编写一段程序计算10!
⑴、程序代码:
.global_start
_start:
movR0,#10;将立即数10存储在R0中
movR1,#10;将立即数10存到R1中,作为循环次数的限
minus:
subR1,R1,#1;标记一个minus子函数,每执行一次R1自减1
mulR0,R1,R0;R1自减后与R0相乘,积放在R0中
cmpR1,#0;判断R1是不是减到1了,如果没有则继续调用子程序
bneminus;如果Z不等于1,那么跳转到子程序标记处
stop:
bstop
.end
⑵、实验内容:
跟踪10次后的答案是:
0x375f00
⑶、结果分析:
10!
=10x9x8x7x6x5x4x3x2x1=3638800,转化为16进制为375f00(3x165+7x164+5x163+15x162+0x161+0x160=3145728+458752+20480+3840=3628800)
可以看出实验结果和计算出来的结果一致,所以实验成功!
4、编写程序将地址1000H~1030H的数据全部搬移到2000H~2030H中,并将原数据区清零
⑴、程序代码:
.global_start
_start:
ldrR0,=0x1000;将地址1000H送到R0中存储
ldrR1,=0x2000;将地址2000H送到R1中存储
movR2,#48;将立即数48送到R2中
movR4,#0;初始化R4,将0存储到R4中
copy:
ldrbR3,[R0];标记子程序入口
strbR4,[R0],#1;将寄存器R0中的内容移到R4中
strbR3,[R1],#1;将寄存器R1中的内容移到R3中
subsR2,R2,#1;判断是否移完
bnecopy;如果没有移完则跳转到子程序入口继续移
stop:
bstop
.end
⑵、实验内容:
⑶、结果分析
由单步调试可以看出,没执行一次,则程序计数器PC就增加4,源地址首段地址为1000H,增加30H(3x16+0=48)则末段地址为1030H,之间有30H个空间,目的地址首段地址为2000H,增加30H(3x16+0=48)则末段地址为2030H,之间有30H个空间,然后使用strb指令将8位字节数据传输到指定的内存(此字节数据为元寄存器中的低8位)。
由PC值可以看出试验成功。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 实验报告12p 实验 报告 12