想求得一
双字节二进制无符号数除以单字节二进制数
的汇编程序,用于mcs51。
的汇编程序,用于mcs51。
下面是我在mcs51子程序库中找到的,但调试后发现不正确……
入口条件:被除数在R4、R5中,除数在R7中。 D457: CLR C RLC A 对这个程序的原理不是很清楚,调试了一段时间,也没调对 对这个程序的原理不是很清楚,调试了一段时间,也没调对 还望写过这个程序的高手指点一下…… 谢谢了…………
出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
影响资源:PSW、A、R3~R7 堆栈需求:2字节
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;商溢出
RET
DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
RET
D457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;商溢出
RET
DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
RET
对这个程序的原理不是很清楚,调试了一段时间,也没调对
对这个程序的原理不是很清楚,调试了一段时间,也没调对
还望写过这个程序的高手指点一下……
谢谢了…………
[此贴子已经被作者于2008-8-12 20:43:54编辑过]
不好意思,对论坛不是很熟悉,重新编辑了好几次,都删不掉重复的地方……
我这里有一个比较容易理解的:
;///////////////////////////////////////////////////////////////////////
;函数功能:两字节除以两字节,商存在r0【低】,r7【高】
; 余数存在r2【低】,r3【高】
;入口参数:r2【除数低字节】,r3【除数高字节】;r4【被除数低字节】,r5【被除数高字节】
;出口参数:r0【商低】,r7【商高】,r2【余低】,r3【余高】
;日 期:2005年6月15日
;作 者:by 黄青强
div:
mov r0,#00h ;商低字节
mov r7,#00h ;商高字节
next0:
clr c
mov a,r2
subb a,r4
mov r2,a
mov a,r3
subb a,r5
mov r3,a
jc next1
cjne r0,#0ffh,next2 ;
mov r0,#00h
inc r7
ajmp next0
ret
next2:
inc r0
ajmp next0
ret
next1:
mov a,r3 ;求余数高字节
addc a,r5
mov r3,a
mov a,r2 ;求余数低字节
add a,r4
mov r2,a
clr c
ret
要是你想用双字节除以单字节,把被除数高字节设为0即可
一样的,有了4字节除4字节,就很容易得出双字节和单字节的除法
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |