本程序适用于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
因篇幅问题不能全部显示,请点此查看更多更全内容