谁能给我讲解下汇编的多字节乘除法啊?怎么看都看不懂!
现在有一个算法:计数(TH1TL1)*17/1000人家用移位的方法实现,不懂是什么意思!JI_SUAN:SETBRS0MOV30H,#0MOV31H,#0MOV32H,...
现在有一个算法:计数(TH1 TL1 )*17/1000 人家用移位的方法实现,不懂是什么意思!
JI_SUAN: SETB RS0
MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV R0,TL1
MOV R1,TH1
CLR A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R5,#16
LOP: CLR C
MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
MOV R2,A
DJNZ R5,LOP
MOV A,R4
MOV B,#16
DIV AB
MOV 43H,A
MOV 44H,B
MOV A,R2
MOV 40H,A
MOV A,R3
MOV B,#16
DIV AB
MOV 41H,A
MOV 42H,B
MOV A,43H
MOV B,#7
MUL AB
MOV A,B
ADD A,34H
MOV 34H,A
MOV A,42H
MOV B,#7
MUL AB
ADD A,43H
ADD A,34H
MOV 34H,A
MOV A,B
ADD A,33H
MOV 33H,A
MOV A,41H
MOV B,#7
MUL AB
ADD A,42H
ADD A,33H
MOV 33H,A
MOV A,B
ADD A,32H
MOV 32H,A
MOV A,40H
MOV B,#7
MUL AB
ADD A,41H
ADD A,32H
MOV 32H,A
MOV A,B
ADD A,31H
ADD A,40H
MOV 31H,A
MOV A,34H
MOV B,#10
DIV AB
ADD A,33H
MOV 33H,A
MOV 34H,B
MOV A,33H
MOV B,#10
DIV AB
ADD A,32H
MOV 32H,A
MOV 33H,B
MOV A,32H
MOV B,#10
DIV AB
ADD A,31H
MOV 31H,A
MOV 32H,B
MOV A,31H
MOV B,#10
DIV AB
ADD A,30H
MOV 30H,A
MOV 31H,B
CLR RS0
RET 展开
JI_SUAN: SETB RS0
MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV R0,TL1
MOV R1,TH1
CLR A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R5,#16
LOP: CLR C
MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
MOV R2,A
DJNZ R5,LOP
MOV A,R4
MOV B,#16
DIV AB
MOV 43H,A
MOV 44H,B
MOV A,R2
MOV 40H,A
MOV A,R3
MOV B,#16
DIV AB
MOV 41H,A
MOV 42H,B
MOV A,43H
MOV B,#7
MUL AB
MOV A,B
ADD A,34H
MOV 34H,A
MOV A,42H
MOV B,#7
MUL AB
ADD A,43H
ADD A,34H
MOV 34H,A
MOV A,B
ADD A,33H
MOV 33H,A
MOV A,41H
MOV B,#7
MUL AB
ADD A,42H
ADD A,33H
MOV 33H,A
MOV A,B
ADD A,32H
MOV 32H,A
MOV A,40H
MOV B,#7
MUL AB
ADD A,41H
ADD A,32H
MOV 32H,A
MOV A,B
ADD A,31H
ADD A,40H
MOV 31H,A
MOV A,34H
MOV B,#10
DIV AB
ADD A,33H
MOV 33H,A
MOV 34H,B
MOV A,33H
MOV B,#10
DIV AB
ADD A,32H
MOV 32H,A
MOV 33H,B
MOV A,32H
MOV B,#10
DIV AB
ADD A,31H
MOV 31H,A
MOV 32H,B
MOV A,31H
MOV B,#10
DIV AB
ADD A,30H
MOV 30H,A
MOV 31H,B
CLR RS0
RET 展开
2个回答
展开全部
TH1 TL1中,有 16 位二进制数,变换成十进制,即:0~65535。
共五位,万、千、百、十、个。
变换程序,就是下面这段:
MOV R0,TL1
MOV R1,TH1
CLR A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R5,#16
LOP: CLR C
MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
MOV R2,A
DJNZ R5,LOP
--------
万、千、百、十、个,分解送到30H、31H、32H、33H、34H。
就是下面这段:
MOV A,R4
MOV B,#16
DIV AB
MOV 43H,A
MOV 44H,B
MOV A,R2
MOV 40H,A
MOV A,R3
MOV B,#16
DIV AB
MOV 41H,A
MOV 42H,B
--------
把个位(30H单元)放弃,就是除以10。
--------
把30H、31H、32H、33H,乘以7。
就是下面这段:
MOV A,43H
MOV B,#7
MUL AB
MOV A,B
ADD A,34H
MOV 34H,A
MOV A,42H
MOV B,#7
MUL AB
ADD A,43H
ADD A,34H
MOV 34H,A
MOV A,B
ADD A,33H
MOV 33H,A
MOV A,41H
MOV B,#7
MUL AB
ADD A,42H
ADD A,33H
MOV 33H,A
MOV A,B
ADD A,32H
MOV 32H,A
MOV A,40H
MOV B,#7
MUL AB
ADD A,41H
ADD A,32H
MOV 32H,A
MOV A,B
ADD A,31H
ADD A,40H
MOV 31H,A
--------
把30H、31H、32H、33H,再乘以10。
就是剩下的部分。
大致的流程,就是这样。
程序正确与否,还没有实验。
共五位,万、千、百、十、个。
变换程序,就是下面这段:
MOV R0,TL1
MOV R1,TH1
CLR A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R5,#16
LOP: CLR C
MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
MOV R2,A
DJNZ R5,LOP
--------
万、千、百、十、个,分解送到30H、31H、32H、33H、34H。
就是下面这段:
MOV A,R4
MOV B,#16
DIV AB
MOV 43H,A
MOV 44H,B
MOV A,R2
MOV 40H,A
MOV A,R3
MOV B,#16
DIV AB
MOV 41H,A
MOV 42H,B
--------
把个位(30H单元)放弃,就是除以10。
--------
把30H、31H、32H、33H,乘以7。
就是下面这段:
MOV A,43H
MOV B,#7
MUL AB
MOV A,B
ADD A,34H
MOV 34H,A
MOV A,42H
MOV B,#7
MUL AB
ADD A,43H
ADD A,34H
MOV 34H,A
MOV A,B
ADD A,33H
MOV 33H,A
MOV A,41H
MOV B,#7
MUL AB
ADD A,42H
ADD A,33H
MOV 33H,A
MOV A,B
ADD A,32H
MOV 32H,A
MOV A,40H
MOV B,#7
MUL AB
ADD A,41H
ADD A,32H
MOV 32H,A
MOV A,B
ADD A,31H
ADD A,40H
MOV 31H,A
--------
把30H、31H、32H、33H,再乘以10。
就是剩下的部分。
大致的流程,就是这样。
程序正确与否,还没有实验。
更多追问追答
追问
他这个移位16次是怎么实现乘法的我还没弄懂
追答
这个移位16次是怎么实现乘法的
--移位16次,不是乘法。
--而是变成了 BCD 码。
展开全部
思路其实就是小学就学过的竖式乘法:例如2字节(ab)乘2字节(cd)先b*d=ef(乘法会使位数加倍,所以是2个字节e和f),a*d=gh0(乘积是gh,后面补一个字节的0,因为a在高8位),d*c=ij0,a*c=mn00(0的意思同前)然后做加法:整个的成积(4个字节)=ef+gh0+ij0+mn00
追问
这个我懂!但是移位实现乘法 和移位实现除以1000 我没弄懂这是多字节的移位,单字节我还懂点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询