当前位置: 网站首页 > 技术应用 > 单片机应用 > 汇编运算

汇编除法运算--双字节除以单字节(一)

 
;***************************************************************************
;名称: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
点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号

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