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

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

作者:佚名   来源:本站原创   点击数:  更新时间:2013年03月19日   【字体:
 ORG 0000H
 JMP A1
 ORG 002BH
A1: MOV R0,#0;数据处理寄存器(乘积高八位)
 MOV R1,#255;被乘数(乘积低八位)
 MOV R2,#255;乘数
 MOV 30H,#8;循环次数--8位二进制数相乘8次4位则4次
A2:
 CLR C;清C
 MOV A,R1;
 JNB ACC.0,A3;判断被乘数第0位是否为0是则不用相加
 MOV A,R0;不为0则相加
 ADD A,R2;乘数与处理后数据相加
 MOV R0,A;数据存回数据处理寄存器
 
A3: MOV A,R0;右移一位
 RRC A;相加可能溢出所以用RRC
 MOV R0,A;
 MOV A,R1;
 RRC A;将处理后的数移到被乘数
 MOV R1,A;
 DJNZ 30H,A2;是否完成
 NOP
 NOP
 NOP
 JMP $
;思路
;       R0处理数        R1被乘数   被乘数第0位为1相加       相加存到R0
;       00000000        11111111        1          00000000+11111111=11111111
;1     01111111        11111111        1          01111111+11111111=101111110
;2     10111111        01111111        1         10111111+11111111=110111110                                            
;3     11011111        00111111        1         11011111+11111111=111011110                                                 
;4     11101111        00011111        1         11101111+11111111=111101110                                                 
;5     11110111        00001111        1         11110111+11111111=111110110                                                 
;6     11111011        00000111        1         11111011+11111111=111111010                                                 
;7     11111101        00000011        1         11111101+11111111=111111100                                                 
;8     11111110        00000001                                                                   
END
关闭窗口

相关文章