搜索
您的当前位置:首页正文

单片机两个双字节无符号数相乘程序举例

2021-02-13 来源:步旅网
单片机两个双字节无符号数相乘程序举例

本程序适用于Intel的51系统单片机 例将(R2R3 )和(R6R7 )两个双字节无符号数相乘,结果送 R4R5R6R7。用移位和迭加的方式,步骤如下: 把R4R5R6R7右移一位,从最低位开始检查乘数

1 )清部分积(高16位)R4R5=0。循环数16。2) R6R7的各个位。3)如乘数位为1

本程序适用于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

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

,#16 MOV R0

;乘数16位二进制

CLR C

NMLP : MOV A, R4

RRC A

,A MOV R4

MOV A, RRC A

,R5

,A MOV R5

MOV A,R6

RRC A

MOV R6 , A

MOVA , R7

RRC A

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

JNC NMLN

MOV A , R5 ;若移出位=1,则

ADD A , R3

MOV R5 , A

MOV A , R4

ADDCA , 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

R4R5 ) = ( R4R5 ) + ( R2R3 )

MOV R6 , A MOVA , R7

RRC A

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

RET

因篇幅问题不能全部显示,请点此查看更多更全内容

Top