ORG 0000H
JMP A1
ORG 002BH
JMP A1
ORG 002BH
A1: MOV R0,#0;數(shù)據(jù)處理寄存器(乘積高八位)
MOV R1,#255;被乘數(shù)(乘積低八位)
MOV R2,#255;乘數(shù)
MOV 30H,#8;循環(huán)次數(shù)--8位二進(jìn)制數(shù)相乘8次4位則4次
A2:
CLR C;清C
MOV A,R1;
JNB ACC.0,A3;判斷被乘數(shù)第0位是否為0是則不用相加
MOV A,R0;不為0則相加
ADD A,R2;乘數(shù)與處理后數(shù)據(jù)相加
MOV R0,A;數(shù)據(jù)存回?cái)?shù)據(jù)處理寄存器
A3: MOV A,R0;右移一位
RRC A;相加可能溢出所以用RRC
MOV R0,A;
MOV R1,#255;被乘數(shù)(乘積低八位)
MOV R2,#255;乘數(shù)
MOV 30H,#8;循環(huán)次數(shù)--8位二進(jìn)制數(shù)相乘8次4位則4次
A2:
CLR C;清C
MOV A,R1;
JNB ACC.0,A3;判斷被乘數(shù)第0位是否為0是則不用相加
MOV A,R0;不為0則相加
ADD A,R2;乘數(shù)與處理后數(shù)據(jù)相加
MOV R0,A;數(shù)據(jù)存回?cái)?shù)據(jù)處理寄存器
A3: MOV A,R0;右移一位
RRC A;相加可能溢出所以用RRC
MOV R0,A;
MOV A,R1;
RRC A;將處理后的數(shù)移到被乘數(shù)
MOV R1,A;
RRC A;將處理后的數(shù)移到被乘數(shù)
MOV R1,A;
DJNZ 30H,A2;是否完成
NOP
NOP
NOP
JMP $
;思路
; R0處理數(shù) R1被乘數(shù) 被乘數(shù)第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
NOP
NOP
NOP
JMP $
;思路
; R0處理數(shù) R1被乘數(shù) 被乘數(shù)第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