主题:[讨论]8051汇编一个乘法(不用MUL指令),请帮忙看看有没问题
题目:
用8051汇编写两个16bit unsinged乘法(不能用MUL指令),原数据摆在40h~43h(low high), 结果摆在IDATA80h~81h(low high)。
我的解答:
ORG 0000H
AJMP Main
ORG 0040H
Main: MOV 80H,#00H
MOV 81H,#00H
MOV R0,#00H
MOV A,40H
RRC A
JNC No;第一位不是1,不操作
MOV 80H,42H
MOV 81H,43H
JMP No
Loop: CJNE R0,#7,Next
MOV A,41H;查完乘法低字节后查乘法高字节
Next: CLR C
RRC A
JNC No
MOV R2,A;保存A
MOV A,R0
MOV R1,A
Mul2: CLR C
MOV A,42H
RLC A
MOV 82H,A
MOV A,43H
RLC A
MOV 83H,A
DJNZ R1,Mul2;16位数左移R0次存放在82H~83H(Low High)
ADD16: CLR C
MOV A,80H
ADD A,82H
MOV 80H,A
MOV A,81H
ADDC A,83H
MOV 81H,A;16位加法
MOV A,R2;还原A
No: INC R0
CJNE R0,#16,Loop
END
好像得不到理想结果,不知道错哪里?[em10]
用8051汇编写两个16bit unsinged乘法(不能用MUL指令),原数据摆在40h~43h(low high), 结果摆在IDATA80h~81h(low high)。
我的解答:
ORG 0000H
AJMP Main
ORG 0040H
Main: MOV 80H,#00H
MOV 81H,#00H
MOV R0,#00H
MOV A,40H
RRC A
JNC No;第一位不是1,不操作
MOV 80H,42H
MOV 81H,43H
JMP No
Loop: CJNE R0,#7,Next
MOV A,41H;查完乘法低字节后查乘法高字节
Next: CLR C
RRC A
JNC No
MOV R2,A;保存A
MOV A,R0
MOV R1,A
Mul2: CLR C
MOV A,42H
RLC A
MOV 82H,A
MOV A,43H
RLC A
MOV 83H,A
DJNZ R1,Mul2;16位数左移R0次存放在82H~83H(Low High)
ADD16: CLR C
MOV A,80H
ADD A,82H
MOV 80H,A
MOV A,81H
ADDC A,83H
MOV 81H,A;16位加法
MOV A,R2;还原A
No: INC R0
CJNE R0,#16,Loop
END
好像得不到理想结果,不知道错哪里?[em10]