位置:51电子网 » 技术资料 » 测试测量

单片机多字节BCD码加法减法

发布时间:2008/5/27 0:00:00 访问次数:2388

        

    

     作者:不详

     来源:不详

     -------------(1) 标号: bcda 功能:多字节bcd码加法

     入口条件:字节数在r7中,被加数在[r0]中,加数在[r1]中。

     出口信息:和在[r0]中,最高位进位在cy中。

     影响资源:psw、a、r2 堆栈需求: 2字节

     bcda: mov a,r7 ;取字节数至r2中

     mov r2,a

     add a,r0 ;初始化数据指针

     mov r0,a

     mov a,r2

     add a,r1

     mov r1,a

     clr c

     bcd1: dec r0 ;调整数据指针

     dec r1

     mov a,@r0

     addc a,@r1 ;按字节相加

     da a ;十进制调整

     mov @r0,a ;和存回[r0]中

     djnz r2,bcd1 ;处理完所有字节

     ret(2) 标号: bcdb 功能:多字节bcd码减法

     入口条件:字节数在r7中,被减数在[r0]中,减数在[r1]中。

     出口信息:差在[r0]中,最高位借位在cy中。

     影响资源:psw、a、r2、r3 堆栈需求: 6字节

     bcdb: lcall neg1 ;减数[r1]十进制取补

     lcall bcda ;按多字节bcd码加法处理

     cpl c ;将补码加法的进位标志转换成借位标志

     mov f0,c ;保护借位标志

     lcall neg1 ;恢复减数[r1]的原始值

     mov c,f0 ;恢复借位标志

     ret

     neg1: mov a,r0 ;[r1]十进制取补子程序入口

     xch a,r1 ;交换指针

     xch a,r0

     lcall neg ;通过[r0]实现[r1]取补

     mov a,r0

     xch a,r1 ;换回指针

     xch a,r0

     ret

      

     (3) 标号: neg 功能:多字节bcd码取补入口条件:字节数在r7中,操作数在[r0]中。

     出口信息:结果仍在[r0]中。

     影响资源:psw、a、r2、r3 堆栈需求: 2字节

     neg: mov a,r7 ;取(字节数减一)至r2中

     dec a

     mov r2,a

     mov a,r0 ;保护指针

     mov r3,a

     neg0: clr c

     mov a,#99h

     subb a,@r0 ;按字节十进制取补

     mov @r0,a ;存回[r0]中

     inc r0 ;调整数据指针

     djnz r2,neg0 ;处理完(r2)字节

     mov a,#9ah ;最低字节单独取补

     subb a,@r0

     mov @r0,a

     mov a,r3 ;恢复指针

     mov r0,a

     ret

    

    

    

        

    

     作者:不详

     来源:不详

     -------------(1) 标号: bcda 功能:多字节bcd码加法

     入口条件:字节数在r7中,被加数在[r0]中,加数在[r1]中。

     出口信息:和在[r0]中,最高位进位在cy中。

     影响资源:psw、a、r2 堆栈需求: 2字节

     bcda: mov a,r7 ;取字节数至r2中

     mov r2,a

     add a,r0 ;初始化数据指针

     mov r0,a

     mov a,r2

     add a,r1

     mov r1,a

     clr c

     bcd1: dec r0 ;调整数据指针

     dec r1

     mov a,@r0

     addc a,@r1 ;按字节相加

     da a ;十进制调整

     mov @r0,a ;和存回[r0]中

     djnz r2,bcd1 ;处理完所有字节

     ret(2) 标号: bcdb 功能:多字节bcd码减法

     入口条件:字节数在r7中,被减数在[r0]中,减数在[r1]中。

     出口信息:差在[r0]中,最高位借位在cy中。

     影响资源:psw、a、r2、r3 堆栈需求: 6字节

     bcdb: lcall neg1 ;减数[r1]十进制取补

     lcall bcda ;按多字节bcd码加法处理

     cpl c ;将补码加法的进位标志转换成借位标志

     mov f0,c ;保护借位标志

     lcall neg1 ;恢复减数[r1]的原始值

     mov c,f0 ;恢复借位标志

     ret

     neg1: mov a,r0 ;[r1]十进制取补子程序入口

     xch a,r1 ;交换指针

     xch a,r0

     lcall neg ;通过[r0]实现[r1]取补

     mov a,r0

     xch a,r1 ;换回指针

     xch a,r0

     ret

      

     (3) 标号: neg 功能:多字节bcd码取补入口条件:字节数在r7中,操作数在[r0]中。

     出口信息:结果仍在[r0]中。

     影响资源:psw、a、r2、r3 堆栈需求: 2字节

     neg: mov a,r7 ;取(字节数减一)至r2中

     dec a

     mov r2,a

     mov a,r0 ;保护指针

     mov r3,a

     neg0: clr c

     mov a,#99h

     subb a,@r0 ;按字节十进制取补

     mov @r0,a ;存回[r0]中

     inc r0 ;调整数据指针

     djnz r2,neg0 ;处理完(r2)字节

     mov a,#9ah ;最低字节单独取补

     subb a,@r0

     mov @r0,a

     mov a,r3 ;恢复指针

     mov r0,a

     ret

    

    

    

相关IC型号

热门点击

 

推荐技术资料

音频变压器DIY
    笔者在本刊今年第六期上着重介绍了“四夹三”音频变压器的... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!