新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 用軟件實(shí)現(xiàn)DAA的方法

用軟件實(shí)現(xiàn)DAA的方法

作者: 時(shí)間:2013-09-09 來源:網(wǎng)絡(luò) 收藏
一律對(duì)產(chǎn)生借位的BCD碼加$A調(diào)整。但AVR單片機(jī)沒有加字節(jié)型立即數(shù)指令,改為減6調(diào)整,要注意加原和減補(bǔ)對(duì)進(jìn)位的影響是相反的。為保證多字節(jié)壓縮BCD碼運(yùn)算的正確性,若調(diào)整后清除了借位C,必須將其恢復(fù)。例如$22-$54=$CE,因C、H皆置位,用減去$66來調(diào)整$CE-$66=$68,調(diào)整后清除了借位C,故子程序中還要加SEC 指令來恢復(fù)借位C。

  注:MCS-51單片機(jī)減法子程序很容易按此移植(半進(jìn)位為AC)。

  1.3 實(shí)現(xiàn)右移功能子程序R的設(shè)計(jì)方法

  見"3 定點(diǎn)數(shù)制轉(zhuǎn)換子程序"中對(duì)BCD碼右移調(diào)整的說明。

  2 定點(diǎn)運(yùn)算子程序

  (1)多字節(jié)壓縮BCD碼加法子程序ADBCD

  加法在寄存器內(nèi)直接完成,以R20為DAA工作單元。BCD碼相加后,將和送到R20,調(diào)用ADAA子程序,實(shí)現(xiàn)對(duì)和的調(diào)整(返回主程序后再回送調(diào)整結(jié)果)。

  (2)多字節(jié)壓縮BCD碼減法子程序SUBCD

  減法在寄存器內(nèi)直接完成,以R20為DAA工作單元。BCD碼相減后,將差送至R20,調(diào)用SDAA子程序,實(shí)現(xiàn)對(duì)差的調(diào)整(返回主程序后再回送調(diào)整結(jié)果)。

  (3)乘法子程序MUL16

  操作:(R13,R12)×(R15,R14)→ R17,R16,R15,R14

  采用字乘字無符號(hào)數(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

  采用雙字除以字無符號(hào)數(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é)存儲(chǔ)平方根。也可視為定點(diǎn)小數(shù)開平方,將X自最高位起每2位進(jìn)行分割,采用摸擬手算的方法(X每左移2位試出1位根)開平方。

  3 定點(diǎn)數(shù)制轉(zhuǎn)換子程序



關(guān)鍵詞: 軟件 DAA

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉