[求助]多字节除法的原理 我刚从事单片机这一行没多 10
[求助]多字节除法的原理我刚从事单片机这一行没多久,平时用C编程,最近在看一个程序,汇编的,不胜头痛。其中有一个多字节无符号数除法的函数,看不懂。主要是不知道程序的原理和...
[求助]多字节除法的原理
我刚从事单片机这一行没多久,平时用C编程,最近在看一个程序,汇编的,不胜头痛。其中有一个多字节无符号数除法的函数,看不懂。
主要是不知道程序的原理和流程,哪位大侠给指点一下。
程序如下:
;标号: DV31 功能:三字节二进制无符号数除以单字节二进制数
;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
DV31: CLR C
MOV A,R3 ;R3被除数的最高字节
SUBB A,R7 ;?为什么要减,这样减的意义是什么
JC DV30 ;如果被除数的最高字节小于除数,则跳转。
SETB OV ;商溢出
RET
DV30: MOV R2,#10H ;求R3R4R5/R7-→R4R5
DM23: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C ;F0表示被除数的最高位
CLR C
SUBB A,R7 ;此时的A是R3左移一位后的结果。
;目标操作数C表示,R3左移一位后与R7的差的情况。
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24: DJNZ R2,DM23
MOV A,R3 ;四舍五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25: INC R5
MOV A,R5
JNZ DM26
INC R4
DM26: CLR OV
RET ;商在R4R5中 展开
我刚从事单片机这一行没多久,平时用C编程,最近在看一个程序,汇编的,不胜头痛。其中有一个多字节无符号数除法的函数,看不懂。
主要是不知道程序的原理和流程,哪位大侠给指点一下。
程序如下:
;标号: DV31 功能:三字节二进制无符号数除以单字节二进制数
;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
DV31: CLR C
MOV A,R3 ;R3被除数的最高字节
SUBB A,R7 ;?为什么要减,这样减的意义是什么
JC DV30 ;如果被除数的最高字节小于除数,则跳转。
SETB OV ;商溢出
RET
DV30: MOV R2,#10H ;求R3R4R5/R7-→R4R5
DM23: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C ;F0表示被除数的最高位
CLR C
SUBB A,R7 ;此时的A是R3左移一位后的结果。
;目标操作数C表示,R3左移一位后与R7的差的情况。
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24: DJNZ R2,DM23
MOV A,R3 ;四舍五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25: INC R5
MOV A,R5
JNZ DM26
INC R4
DM26: CLR OV
RET ;商在R4R5中 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |