用軟件實(shí)現(xiàn)DAA的方法
注:MCS-51單片機(jī)減法DAA子程序很容易按此移植(半進(jìn)位為AC)。
1.3 實(shí)現(xiàn)右移DAA功能子程序RDAA的設(shè)計(jì)方法
見"3 定點(diǎn)數(shù)制轉(zhuǎn)換子程序"中對BCD碼右移調(diào)整的說明。
2 定點(diǎn)運(yùn)算子程序
(1)多字節(jié)壓縮BCD碼加法子程序ADBCD
加法在寄存器內(nèi)直接完成,以R20為DAA工作單元。BCD碼相加后,將和送到R20,調(diào)用ADAA子程序,實(shí)現(xiàn)對和的調(diào)整(返回主程序后再回送調(diào)整結(jié)果)。
(2)多字節(jié)壓縮BCD碼減法子程序SUBCD
減法在寄存器內(nèi)直接完成,以R20為DAA工作單元。BCD碼相減后,將差送至R20,調(diào)用SDAA子程序,實(shí)現(xiàn)對差的調(diào)整(返回主程序后再回送調(diào)整結(jié)果)。
(3)乘法子程序MUL16
操作:(R13,R12)×(R15,R14)→ R17,R16,R15,R14
采用字乘字無符號數(shù)運(yùn)算。采取逐次右移部分積和乘數(shù),當(dāng)乘數(shù)移出位等于1時(shí)將被乘數(shù)加入部分積的方法完成計(jì)算??梢暈?6位整數(shù)×16位整數(shù)→32位整數(shù),也可視為16位整數(shù)×16位小數(shù)→16位整數(shù),或視為16位小數(shù)×16位小數(shù)→32位小數(shù)??杉由仙崛胩幚?。
(4)除法子程序DIV16
操作:(R17,R16,R15,R14)÷(R13,R2)→R15,R14
采用雙字除以字無符號數(shù)運(yùn)算。采取逐次左移被除數(shù)與除數(shù)相減、試商、記商的方法完成計(jì)算??梢暈殡p字型整數(shù)÷字型整數(shù)→字型整數(shù),也可視為小數(shù)÷小數(shù)→ 小數(shù)。要求 (R17,R16)(R13,R12)??杉由仙崛胩幚?,但要注意可能產(chǎn)生舍入溢出(例如$7FFFC000÷$8000=$FFFF.8,舍入取整即產(chǎn)生溢出)。
(5)開平方子程序SQR
操作:(R17,R16,R15,R14)→R14,R13,R12
可視為雙字型整數(shù)X(≤4294967295)開平方,因有舍入處理,方根最大可達(dá)$10000(如X=$FFFF0000開平方即屬此),故用3字節(jié)存儲平方根。也可視為定點(diǎn)小數(shù)開平方,將X自最高位起每2位進(jìn)行分割,采用摸擬手算的方法(X每左移2位試出1位根)開平方。
3 定點(diǎn)數(shù)制轉(zhuǎn)換子程序
評論