ARM 实验报告范本
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
stop:
b stop
.end
⑵、实验内容:
将立即数存储在R0中
将立即数8989eeee存储在R1中
将立即数504ed99d存储在R2中
将立即数8949556f存储在R3中
使用带标志位的加法指令将R2+R0中的值存到R0
使用带进位的加法指令将R3+R1的值存到R1中,如果R0+R2产生了进位,则C=1,此时将R1+1
屏蔽掉R3中的低8位,使使用或命令是能将R2的低8位移到R3的低8位
将R2中的高8位”12”移到R3的低8位而不影响R3中的其他的24位
2、实现64位的加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中
⑴、程序代码:
.global _start
_start:
;将立即数存储在R0中
and R3,R3,#0xffffff00;屏蔽掉R2的低8位
orr R3,R3,R2;用取或将R2的低8位移到R3得低8位
stop:
b stop
.end
⑵、实验内容:
将存储在R2中
将存储在R3中
将R2中的高8位“12”移到R2的低8位,原来的数“”变为“”
屏蔽掉R2中的高24位,采用或命令时使其不影响R3中高24位的数值
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,那么跳转到子程序标记处
ldr R1,=0x8989eeee;将立即数8989eeee存储在R1中
ldr R2,=0x504ed99d;将立即数504ed99d存储在R2中
ldr r3,=0x8949556f;将立即数8949556f存储在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
⑵、实验内容:
跟踪10次后的答案是:0x375f00
⑶、结果分析:
10!=10x9x8x7x6x5x4x3x2x1=3638800,转化为16进制为375f00(3x165+7x164+5x163+15x162+0x161+0x160=3145728+458752+20480+3840=3628800)
A R M与嵌入式技术
实
验
报
告
1、编写程序将R2的高8位传送到R3的低8位(不考虑R3的其他位)
⑴、程序代码:
.global _start
_start:
将立即数存储到R2中
;将存储在R3中
mov R2,R2,ROR #24;循环移位24位,使R2中的高八位移到第八位
and R2,R2,#0x000000ff;屏蔽掉R2的高24位,
7+0=7,C=0;4+5=9,C=0。
相加后的结果为:,可以看出低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:
mov R0,#10;将立即数10存储在R0中
可以看出实验结果和计算出来的结果一致,所以实验成功!
4、编写程序将地址1000H~1030H的数据全部搬移到2000H~2030H中,并将原数据区清零
⑴、程序代码:
.global _start
_start:
ldr R0,=0x1000;将地址1000H送到R0中存储
ldr R1,=0x2000;将地址2000H送到R1中存储
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值可以看出试验成功。
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;判断是否移完
⑶、结果分析
注:以下分析均为16进制计算
【R1 : R0】+Biblioteka BaiduR3 : R2】=【R1 : R0】
【8989eeee:】+【8949556f:504ed99d】=【12d3445d:97a71f05】
首先低32位相加::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;
b stop
.end
⑵、实验内容:
将立即数存储在R0中
将立即数8989eeee存储在R1中
将立即数504ed99d存储在R2中
将立即数8949556f存储在R3中
使用带标志位的加法指令将R2+R0中的值存到R0
使用带进位的加法指令将R3+R1的值存到R1中,如果R0+R2产生了进位,则C=1,此时将R1+1
屏蔽掉R3中的低8位,使使用或命令是能将R2的低8位移到R3的低8位
将R2中的高8位”12”移到R3的低8位而不影响R3中的其他的24位
2、实现64位的加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中
⑴、程序代码:
.global _start
_start:
;将立即数存储在R0中
and R3,R3,#0xffffff00;屏蔽掉R2的低8位
orr R3,R3,R2;用取或将R2的低8位移到R3得低8位
stop:
b stop
.end
⑵、实验内容:
将存储在R2中
将存储在R3中
将R2中的高8位“12”移到R2的低8位,原来的数“”变为“”
屏蔽掉R2中的高24位,采用或命令时使其不影响R3中高24位的数值
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,那么跳转到子程序标记处
ldr R1,=0x8989eeee;将立即数8989eeee存储在R1中
ldr R2,=0x504ed99d;将立即数504ed99d存储在R2中
ldr r3,=0x8949556f;将立即数8949556f存储在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
⑵、实验内容:
跟踪10次后的答案是:0x375f00
⑶、结果分析:
10!=10x9x8x7x6x5x4x3x2x1=3638800,转化为16进制为375f00(3x165+7x164+5x163+15x162+0x161+0x160=3145728+458752+20480+3840=3628800)
A R M与嵌入式技术
实
验
报
告
1、编写程序将R2的高8位传送到R3的低8位(不考虑R3的其他位)
⑴、程序代码:
.global _start
_start:
将立即数存储到R2中
;将存储在R3中
mov R2,R2,ROR #24;循环移位24位,使R2中的高八位移到第八位
and R2,R2,#0x000000ff;屏蔽掉R2的高24位,
7+0=7,C=0;4+5=9,C=0。
相加后的结果为:,可以看出低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:
mov R0,#10;将立即数10存储在R0中
可以看出实验结果和计算出来的结果一致,所以实验成功!
4、编写程序将地址1000H~1030H的数据全部搬移到2000H~2030H中,并将原数据区清零
⑴、程序代码:
.global _start
_start:
ldr R0,=0x1000;将地址1000H送到R0中存储
ldr R1,=0x2000;将地址2000H送到R1中存储
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值可以看出试验成功。
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;判断是否移完
⑶、结果分析
注:以下分析均为16进制计算
【R1 : R0】+Biblioteka BaiduR3 : R2】=【R1 : R0】
【8989eeee:】+【8949556f:504ed99d】=【12d3445d:97a71f05】
首先低32位相加::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;