3、nd>}{S}Rd,Rm,RsMLA乘累加Rd=(Rm×Rs)+RnMUL乘法Rd=Rm×Rs{}{S}RdLo,RdHi,Rm,RsSMLAL长整型有符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)SMULL长整型有符号乘法[RdHi,RdLo]=Rm×RsUMLAL长整型无符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)UMULL长整型无符号乘法[RdHi,RdLo]=Rm×Rs对于64位整数乘法运算可利用如图1所示的扩展方法来实现。其中:R0,R1分别存放被乘数的低32位和高32位;R2,R3分别存放
4、乘数的低32位和高32位;128位结果由低到高依次存放在R4,R5,R6,R7中。R1R0R3R2×R0*RR0*RHLR1*RR1*RHLR0*RR0*RHL+R1*RR1*RHLR7R6R5R4图1:2个64位无符号整数乘法的扩展方法三、实验内容依据图2-1框图所示方法编制2个64位无符号整数乘法的程序。运行EmbestIDE集成开发环境,输入自己设计的64位整数乘法汇编程序,生成目标代码,连接下载后进行调试。四、实验步骤1.打开memory窗口,观察地址0x8000周围的内容。2.执行程序并观察和记录寄存器与memory的值变化。3.结合实验内容和相关资料,观察程序运行,
5、检验程序执行过程和结果是否正确,通过实验加深理解ARM指令的使用。五、实验参考程序.global_start.text_start:ldrr0,=0x12345678ldrr1,=0x10000000ldrr2,=0x12345678ldrr3,=0xF000000Fumullr5,r6,r2,r0umullr7,r8,r3,r0addsr6,r6,r7adcr7,r8,#0x0umullr8,r9,r2,r1umullr10,r11,r3,r1addsr9,r9,r10adcr10,r11,#0x0addsr6,r6,r8adcsr7,r7,r9adcr8,r10,#0x0sto
6、p:Bstop.end六、思考题考虑利用UMLAL指令(长整型乘累加)完成上述程序功能。.global_start.text_start:ldrr0,=0x12345678ldrr1,=0x10000000ldrr2,=0x12345678ldrr3,=0xF000000Fumullr5,r6,r2,r0umlalr6,r7,r3,r0umlalr6,r7,r2,r1umlalr7,r8,r3,r1stop:Bstop.end