DSP之汇编语言实现两个32位有符号数乘法

1、基本原理

如下图所示,设A、B为被乘数得高、低16位二进制数,C、D为乘数的高、低二进制数,则有:N1×N2=(A×2**16+B)×(C×2**16+D)=BD+AD×2**16+BC×2**16+AC×2**32

通过分析可知,其需要四次乘法运算,每次进行两个16位二进制数乘法,得到四个部分积,然后再求部分累加和。如下图所示:

64位积在内存中存放格式如下:

2、流程图

3、代码实现

test.asm

.global _c_int00
              .bss x1,4
              .bss x2,4
              .bss y,8
              .data
dat1:         .word  -1547316,123133 ;初始数据
              .text
_c_int00:
			MVKL.S2 0X00000000,B1
			MVKH.S2 0X00000000,B1
			MVC.S2 B1,AMR
			MVK.S1 x1,A0
            MVK.S1 x2,A1
            MVK.S1 y,A2
			MVK.S1 dat1,A4
			NOP 5
			LDW.D1 *A4++,A5		;两数据分别存于A4和A5
			NOP 5
			STW.D1 A5,*A0		;为x1于x2变量赋值
			 NOP 5
			LDW.D1 *A4,A5
			 NOP 5
			STW.D1 A5,*A1
			 NOP 5
			LDW.D1 *A0,A4
			NOP 5
			CMPLT .L2 0,A4,B1 ;A4大于0时,B1置1
			ABS .L1 A4,A4
			NOP 5
			CMPLT .L2 0,A5,B2 ;A5大于0时,B2置1
			ABS .L1 A5,A5
			NOP 5
			MPYU.M1 A4,A5,A6   ;A4与A5的低16位相乘
			NOP 5
			MPYLHU.M1 A4,A5,A7 ;A4低16位与A5高16位相乘
			NOP 5
			MPYLHU.M1 A5,A4,A8 ;A4高16位与A5低16位相乘
			NOP 5
			MPYHU.M1 A4,A5,A9  ;A4与A5的高16位相乘
			NOP 5
			ADDU.L1 A7,A8,A13:A12
			NOP 5
			SHR.S1 A12,16,A11
			NOP 5
			ADD.L1 A9,A13,A9
			ADD.L1 A9,A11,A13
			NOP 5
			SHL.S1 A12,16,A7
			NOP 5
            ADDU.L1 A6,A7,A9:A8
            ADD.L1 A9,A13,A13
            NOP 5
            CMPEQ .L2 B1,B2,B0 ;B1与B2相等时,B0置1
            NOP 5
			[B0]B A
			NOP 5       ;若为负数,取补码
	        NEG A8,A8
	        NOP 5
	        NEG A13,A13
	        NOP 5
	        ADD.L1 A13,-1,A13
A:
            STW.D1 A8,*A2++  
			NOP 5
			STW.D1 A13,*A2
			NOP 5
			.end

test.cmd

test1.obj
-o test1.out
MEMORY
{
	PAGE 0: ROM0: ORIGIN=0x00003000,LENGTH=0200H
			ROM1: ORIGIN=0x00004000,LENGTH=0020H
	PAGE 1: RAM : ORIGIN=0x00005000,LENGTH=0020H
}
SECTIONS
{
	.text :> ROM0	PAGE 0
	.data :> ROM1   PAGE 0
	.bss  :> RAM 	PAGE 1
}

4、运行结果

我们将x1、x2、y存储在了连续的地址,如下图为运算仿真图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值