专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用右移加法做乘法运算(65535*65535)

作者:佚名   来源:本站原创   点击数:  更新时间:2013年03月18日   【字体:
 ORG 0000H
 JMP A1
 ORG 002BH
A1: MOV R0,#0;数据处理寄存器高位(乘积高8位)
 MOV R1,#0;数据处理寄存器低位(乘积高中8位)
 MOV R2,#255;被乘数高位(乘积低中8位)
 MOV R3,#255;被乘数低位(乘积低8位)
 MOV R4,#255;乘数高位
 MOV R5,#255;乘数低位
 MOV 30H,#16;循环次数--8位二进制数相乘8次4位则4次
A2:
 CLR C;清C
 MOV A,R3;
 JNB ACC.0,A3;判断被乘数第0位是否为0是则不用相加
 MOV A,R1;不为0则相加
 ADD A,R5;乘数低位与处理后数据低位相加
 MOV R1,A;数据存回数据处理低位寄存器
 MOV A,R0
 ADDC A,R4;乘数低位与处理后数据高位相加上面相加可能溢出所以用ADDC
 MOV R0,A;数据存回数据处理高位寄存器
A3: MOV A,R0;先右移高位
 RRC A;相加可能溢出所以用RRC
 MOV R0,A;
 MOV A,R1;在右移低位
 RRC A;RRC把高位的数移入低位
 MOV R1,A
 MOV A,R2;
 RRC A;将处理后的数移到被乘数高位
 MOV R2,A;
 MOV A,R3;
 RRC A;将处理后的数移到被乘数低位
 MOV R3,A;
 DJNZ 30H,A2;是否完成
 NOP
 NOP
 NOP
 JMP $
 END
关闭窗口

相关文章