新聞中心

        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時將被乘數加入部分積的方法完成計算??梢暈?6位整數×16位整數→32位整數,也可視為16位整數×16位小數→16位整數,或視為16位小數×16位小數→32位小數??杉由仙崛胩幚?。

          (4)除法子程序DIV16

          操作:(R17,R16,R15,R14)÷(R13,R2)→R15,R14

          采用雙字除以字無符號數運算。采取逐次左移被除數與除數相減、試商、記商的方法完成計算??梢暈殡p字型整數÷字型整數→字型整數,也可視為小數÷小數→ 小數。要求 (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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 伊通| 乐陵市| 佛学| 商水县| 六盘水市| 崇义县| 镇沅| 封丘县| 汉川市| 张家川| 伊通| 仪征市| 黄山市| 云浮市| 治多县| 乌鲁木齐市| 六盘水市| 崇阳县| 黄冈市| 台安县| 博客| 子长县| 成武县| 金坛市| 循化| 乌审旗| 白河县| 醴陵市| 繁峙县| 修武县| 西青区| 正阳县| 呼和浩特市| 石泉县| 高阳县| 邹城市| 布尔津县| 彭水| 农安县| 潜江市| 濮阳市|