用软件实现DAA的方法
注:MCS-51单片机减法DAA子程序很容易按此移植(半进位为AC)。
见"3 定点数制转换子程序"中对BCD码右移调整的说明。
2 定点运算子程序
(1)多字节压缩BCD码加法子程序ADBCD
加法在寄存器内直接完成,以R20为DAA工作单元。BCD码相加后,将和送到R20,调用ADAA子程序,实现对和的调整(返回主程序后再回送调整结果)。
(2)多字节压缩BCD码减法子程序SUBCD
减法在寄存器内直接完成,以R20为DAA工作单元。BCD码相减后,将差送至R20,调用SDAA子程序,实现对差的调整(返回主程序后再回送调整结果)。
(3)乘法子程序MUL16
操作:(R13,R12)×(R15,R14)→ R17,R16,R15,R14
采用字乘字无符号数运算。采取逐次右移部分积和乘数,当乘数移出位等于1时将被乘数加入部分积的方法完成计算。可视为16位整数×16位整数→32位整数,也可视为16位整数×16位小数→16位整数,或视为16位小数×16位小数→32位小数。可加上舍入处理。
(4)除法子程序DIV16
操作:(R17,R16,R15,R14)÷(R13,R2)→R15,R14
采用双字除以字无符号数运算。采取逐次左移被除数与除数相减、试商、记商的方法完成计算。可视为双字型整数÷字型整数→字型整数,也可视为小数÷小数→ 小数。要求 (R17,R16)(R13,R12)。可加上舍入处理,但要注意可能产生舍入溢出(例如$7FFFC000÷$8000=$FFFF.8,舍入取整即产生溢出)。
(5)开平方子程序SQR
操作:(R17,R16,R15,R14)→R14,R13,R12
可视为双字型整数X(≤4294967295)开平方,因有舍入处理,方根最大可达$10000(如X=$FFFF0000开平方即属此),故用3字节存储平方根。也可视为定点小数开平方,将X自最高位起每2位进行分割,采用摸拟手算的方法(X每左移2位试出1位根)开平方。
3 定点数制转换子程序
评论