80C51的双字节无符号BCD码乘法子程序分析

来源:互联网 发布:八爪鱼数据采集器教程 编辑:程序博客网 时间:2024/04/27 18:21

(6) 标号: MUL2 功能:双字节二进制无符号数平方
(A+B)^2=A*A+B*B+2*A*B
(90+9)^2=90*90+9*9+2*90*9=8100+1620+81=9801
99
99
--------
891
+ 891
--------
9801
  9 9
入口条件:待平方数在R2、R3中
出口信息:结果在R2、R3、R4、R5中。
影响资源:PSW、A、B、R2~R5 堆栈需求: 2字节
MUL2: MOV A,R3 ;计算R3平方
MOV B,A
MUL AB ;9*9=81
MOV R4,B ;暂存部分积高位,R4=0
MOV R5,A ;R5=81
MOV A,R2 ;计算R2平方
MOV B,A
MUL AB ;9*9=81,A=81,B=0
XCH A,R3 ;暂存部分积,并换出R2和R3 ,A=9,R3=81
XCH A,B ;A=0,B=9
XCH A,R2 ;A=9,R2=0
MUL AB ;计算2×R2×R3 ,9*9=81,A=81,B=0
CLR C
RLC A ;A=81*2=162
XCH A,B ;A=0,B=162
RLC A ;A=0*2=0
JNC MU20
INC R2 ;累加溢出量
MU20: XCH A,B ;累加部分积 A=162,B=0
ADD A,R4 ;162+0=162
MOV R4,A ;R4=162
MOV A,R3 ;A=81
ADDC A,B ;81+0+0=81
MOV R3,A ;R3=81
CLR A ;A=0
ADDC A,R2 A=0
MOV R2,A ;R2=0
RET

R2=0,R3=81(51H),R4=162(A2H),R5=81(51H)
结果:R2R3R4R5(BCD码)=R2*1000+R3*100+R4*10+R5
=81*100+162*10+81
=9801