;***************************************************************************
;名称:16位除以8位
;被除数: xtmp1 xtmp2(H--L)
;除数 : xtmp3(H--L) (不能为零)
;商 : xtmp1 xtmp2(H--L)
;余数 : xtmp4
;其它 : xtmp5
;运算原理:
;首先判断除数是否为零,若为零时,则设溢出标志为1,然后退出。若除数不为零,则采用移位相减法进行运算。
;首先,把进位位和余数单元清零。再将进位位、余数单元和被除数单元按顺序首尾相连,逐位进行向左循环移位,共移位32次。
;每移位一次,余数单元都和除数作一次减法运算,
;若够减,余数单元内容更新为两者之差,并且将被除数最末一位置为1;
;若不够减,则余数单元内容保持不变,且将被除数最末一位置为0。
;判断是否够减的方法是:在作减法之前,先保存进位位,再看作完减法后的进位位。
;仅在作减法之前进位位为0,并且作减法之后进位位为1时判为不够减,
;其余情况均视为够减。这样,等到全部运算结束时,商数为两个字节,存放在被除数单元中;余数为一个字节,存放在余数单元中。
;整除,余数是对,不整除,余数不对
;***************************************************************************
F16DIV8:
;余数清0
clrr xtmp4
;被除数位数,也是循环次数
movia 16
movar xtmp5
clrwdt
DIVloop1:
bclr status,c
;余数带C左移1位,被除数带C左移1位,
rlr xtmp2,1
rlr xtmp1,1
rlr xtmp4,1
jbts0 status,c
goto DIVloop2
;比较余数与除数大小
movr xtmp3,0
subra xtmp4,A
jbts1 status,c
goto DIVloop3
DIVloop2:
;余数大于除数,余数等于余数减去除数
;bclr status,c
movr xtmp3,0
subra xtmp4,R
bset xtmp2,0
DIVloop3:
DIVloop4:
djzr xtmp5,R
goto DIVloop1
return