c语言 无符号乘法 双字节,单片机两个双字节无符号数相乘程序举例

本程序适用于Intel的51系统单片机

例 将(R2R3)和(R6R7)两个双字节无符号数相乘,结果送R4R5R6R7。

用移位和迭加的方式,步骤如下:

1)清部分积(高16位)R4R5=0。循环数16。

2)把R4R5R6R7右移一位,从最低位开始检查乘数R6R7的各个位。

3)如乘数位为1,则被乘数R2R3加到部分积R4R5中,否则不加。

4)循环数减1,不到16次再返回1)。

NMUL:MOV R4,#0

MOV R5,#0 ;积的高16位=0

MOV R0,#16 ;乘数16位二进制

CLR C

NMLP:MOV A,R4

RRC A

MOV R4,A

MOV A,R5

RRC A

MOV R5,A

MOV A,R6

RRC A

MOV R6,A

MOV A,R7

RRC A

MOV R7,A ;(R4R5R6R7)右移一位

JNC NMLN

MOV A,R5 ;若移出位=1,则(R4R5)=(R4R5)+(R2R3)

ADD A,R3

MOV R5,A

MOV A,R4

ADDC A,R2

MOV R4,A

NMLN:DJNZ R0,NMLP

MOV A,R4 ;最后再移位一次

RRC A

MOV R4,A

MOV A,R5

RRC A

MOV R5,A

MOV A,R6

RRC A

MOV R6,A

MOV A,R7

RRC A

MOV R7,A ;(R4R5R6R7)右移一位

RET

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值