实验二ARM的无符号整数乘法
一、实验目的:
掌握ARM的汇编语言程序设计方法。
二、实验原理:
ARM的乘法指令把一对寄存器的内容相乘,然后根据指令类型把结果累加到其它的寄存器。
长整形的“乘累加”要使用代表64位的一对寄存器,最终的结果放在一个目标寄存器或者一对寄存器中。
乘法指令的语法:
MLA {<cond>}{S} Rd,Rm,Rs,Rn
长整型乘法指令产生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位无符号整数乘法的程序。
四、实验步骤:
●在Embest IDE环境中新建工程,编写程序;
●编译成功后,连接下载进行调试。
五、思考题:
考虑利用UMLAL指令(长整型乘累加)完成上述程序功能。
×
+
图2-1: 2个64位无符号整数乘法的扩展方法
L
H L
H
H
H L
L。