新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 用软件实现DAA的方法

用软件实现DAA的方法

作者:时间:2013-09-09来源:网络收藏
一律对产生借位的BCD码加$A调整。但AVR单片机没有加字节型立即数指令,改为减6调整,要注意加原和减补对进位的影响是相反的。为保证多字节压缩BCD码运算的正确性,若调整后清除了借位C,必须将其恢复。例如$22-$54=$CE,因C、H皆置位,用减去$66来调整$CE-$66=$68,调整后清除了借位C,故子程序中还要加SEC 指令来恢复借位C。

  注:MCS-51单片机减法子程序很容易按此移植(半进位为AC)。

  1.3 实现右移功能子程序R的设计方法

  见"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 定点数制转换子程序



关键词: 软件 DAA

评论


相关推荐

技术专区

关闭