新聞中心

        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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 博野县| 寻乌县| 合川市| 兴义市| 巴彦县| 永寿县| 花莲市| 固镇县| 凤城市| 正镶白旗| 涿鹿县| 龙陵县| 岳阳市| 九台市| 芒康县| 桂阳县| 镇沅| 清新县| 仙居县| 陆良县| 洮南市| 永兴县| 吉木萨尔县| 岗巴县| 静安区| 资兴市| 芒康县| 嘉义市| 沈阳市| 石狮市| 肇庆市| 夏邑县| 襄城县| 青岛市| 韶山市| 高安市| 铁岭市| 新竹县| 祁阳县| 闽清县| 昌吉市|