单片机 除法编程

来源:百度知道 编辑:UC知道 时间:2024/06/14 18:55:35
设R2、R3、R4、R5四字节无符号二进制数为被除数,R6、R7为双字节除数,商存于R4、R5中,余数存于R2、R3中。在运算前先比较R2、R3与R6、R7的内容,如果前者大于等于后者的话商不能用双字节表示,置用户标志F0为1,不执行除法,否则,采用比较法求商,清F0。比较时,采用减法实现。程序在下面。我的问题是:为什么每次都要左移一位?最高位左移后做减法时最高位不就不参加减法了吗?这种减法怎么能实现除法呢?并且LOOP2的最后一条指令为什么要使R5中的值增1?因为我对除法的实现方式不懂。
START: MOV A,R3 ;先比较是否发生溢出
CLR C
SUBB A,R7
MOV A,R2
SUBB A,R6
JNC LOOP4 ;CY=0,溢出
MOV B,#16 ;无溢出,执行除法,位数16送B
LOOP1: CLR C
MOV A,R5 ;被除数最低位字节内容左移一位,补0
RLC A
MOV R5,A
MOV A,R4 ;R4内容左移一位
RLC A
MOV R4,A
MOV A,R3 ;R3内容左移一位
RLC A
MOV R3,A
XCH A,R2 ;R2内容左移一位
RLC A
XCH A,R2
MOV PSW.5,C ;移出的最高位保存在F0中
CLR C
SUBB A,R7 ;(R3)-(R7)
MOV R1,A ;差存R1
MOV A,R2

以前我也详细研究过汇编除法,没研究通,正是这一点使我下定决尽要学C语言,我劝你别研究汇编除法了,没有用的,还是真接用C编程吧,用C解决不了时再用汇编。
祝你好运。

左移 一位, 表示乘2的意思,就像我们十进制乘10一样。
减很多次 就是除, 加很多次就是乘啦。