首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]双字节二进制无符号数除以单字节二进制数程序

[求助]双字节二进制无符号数除以单字节二进制数程序

想求得一

双字节二进制无符号数除以单字节二进制数

的汇编程序,用于mcs51。

的汇编程序,用于mcs51。

下面是我在mcs51子程序库中找到的,但调试后发现不正确……

入口条件:被除数在R4R5中,除数在R7中。
出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
影响资源:PSWAR3R7 堆栈需求:2字节

D457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;
商溢出

RET
DV50: MOV R6,#8 ;
求平均值(R4R5R7-→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

对这个程序的原理不是很清楚,调试了一段时间,也没调对

对这个程序的原理不是很清楚,调试了一段时间,也没调对

还望写过这个程序的高手指点一下……

谢谢了…………

D457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;
商溢出

RET
DV50: MOV R6,#8 ;
求平均值(R4R5R7-→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字节,就很容易得出双字节和单字节的除法

返回列表