单片机多字节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
    
    
    
上一篇:CMOS集成电路使用注意事项
上一篇:使用单片机C语言的好处