嵌入式系统原理及应用实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌⼊式系统原理及应⽤实验报告
嵌⼊式系统原理及应⽤
1、实验⽬的
练习ARM汇编语⾔程序设计。

2、实验环境
PC个⼈计算机、Windows XP操作系统、ADS1.2集成开发环境软件。

3、实验要求
⽤ARM指令集设计⼀段汇编语⾔程序,完成两个64位⼆进制数的乘法运算,两个乘数分别放在r1、r0和r3、r2中(r1和r3放⾼位字),结果存在r7、r6、r5、r4中。

4实验原理及基本技术线路图
ARM的乘法指令把⼀对寄存器的内容相乘,然后根据指令类型把结果累加到其它的寄存器。

长整形的“乘累加”要使⽤代表64位的⼀对寄存器,最终的结果放在⼀个⽬标寄存器或者⼀对寄存器中。

乘法指令的语法:
MLA {}{S} Rd,Rm,Rs,Rn
MUL{}{S} Rd,Rm,Rs
MLA 乘累加Rd=(Rm×Rs)+Rn
MUL 乘法Rd=Rm×Rs
{}{S} RdLo,RdHi,Rm,Rs
SMLAL 长整型有符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)SMULL 长整型有符号乘法[RdHi,RdLo]=Rm×Rs
UMLAL 长整型⽆符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)UMULL 长整型⽆符号乘法[RdHi,RdLo]=Rm×Rs
长整型乘法指令产⽣64位的结果。

由于结果太⼤,不能存放在⼀个32位寄存器,所以把结果存放在2个32位的寄存器RdLo和RdHi中。

RdLo存放低32位,RdHi存放⾼32位。

利⽤UMULL和SUMLL指令可以进⾏32位宽度的⽆符号或有符号的整数乘法运算,得到64位的结果。

在实际应⽤中,有许多需要长整型乘法运算的应⽤。

例如,处理C中long long整型算术运算等。

对于64位整数乘法运算可利⽤如下页图所⽰的扩展⽅法来实现。

其中:
R0,R1分别存放被乘数的低32位和⾼32位;
R2,R3分别存放乘数的低32位和⾼32位;
128位结果由低到⾼依次存放在R4,R5,R6,R7中。

依据图2-1框图所⽰⽅法编制2个64位⽆符号整数乘法的程序。

5.实验步骤
1.在Code Warrior IDE 环境中新建⼯程,编写程序 2.编译及修改错误 3.仿真运⾏
4.根据仿真结果分析设计是否正确。

6源程序:
AREA Block, CODE, READONLY ; name this block of code
ENTRY ; mark the first instruction to call
Start
MOV R1,#103 ;数1为ox6700000072,数2为0x740000006D MOV R0,#114 MOV R3,#116 MOV R2,#109 UMULL r4,r5,r2,r0
R1 R0 R2
R3
R0*R2
R0*R2
R1*R2
R0*R3
R1*R2
R0*R3
R1*R3
R1*R3
R4
R5 R6 R7 ×

图2-1: 2个64位⽆符号整数乘法的扩展⽅法L
H
L
H
H
H
L
L
UMULL r9,r8,r2,r1
UMULL r10,r11,r3,R0
UMULL r6,r7,r1,r3
ADDS R5,R5,R9
ADCS R5,R5,R10
ADCS R6,R6,R8
ADCS R6,R6,R11
ADC R7,R7,#0
stop
MOV r0, #0x18
LDR r1, =0x20026
SWI 0x123456
END
7.实验结果截图
8.实验结果分析
将ox6700000072分别放在r1和r0,将0x740000006D分别放在r3和r2,然后按照图2-1框图所⽰⽅法,先做乘法,在做加法,最后结果存放在r7,r6,r5,r4中。

结果为0x0000000000002EAC00005F830000308A,是0x6700000072和0x740000006D的乘积,证明运算正确。

相关文档
最新文档