用軟件實現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 定點數制轉換子程序

評論