当前位置: 网站首页 > 技术应用 > 单片机应用 > 应用范例

汇编除法运算--4字节除以2字节

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

点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2023 粤ICP备17151077号

Powered by  xinfuke  5.2.5 ©2008-2024  www.100mcu.com