• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 匯編語言多字節BCD碼加法減法

    匯編語言多字節BCD碼加法減法

    作者: 時間:2013-01-07 來源:網絡 收藏

    (1) 標號: BCDA 功能:BCD碼加法

    給大家介紹一個單片機寫的子程序
    入口條件:字節數在R7中,被加數在[R0]中,加數在[R1]中。
    出口信息:和在[R0]中,最高位進位在CY中。
    影響資源:PSW、A、R2 堆棧需求: 2字節
    BCDA: MOV A,R7 ;取字節數至R2中
    MOV R2,A
    ADD A,R0 ;初始化數據指針
    MOV R0,A
    MOV A,R2
    ADD A,R1
    MOV R1,A
    CLR C
    BCD1: DEC R0 ;調整數據指針
    DEC R1
    MOV A,@R0
    ADDC A,@R1 ;按字節相加
    DA A ;十進制調整
    MOV @R0,A ;和存回[R0]中
    DJNZ R2,BCD1 ;處理完所有字節
    RET

    (2) 標號: BCDB 功能:多字節BCD碼減法
    入口條件:字節數在R7中,被減數在[R0]中,減數在[R1]中。
    出口信息:差在[R0]中,最高位借位在CY中。
    影響資源:PSW、A、R2、R3 堆棧需求: 6字節
    BCDB: LCALL NEG1 ;減數[R1]十進制取補
    LCALL BCDA ;按多字節BCD碼加法處理
    CPL C ;將補碼加法的進位標志轉換成借位標志
    MOV F0,C ;保護借位標志
    LCALL NEG1 ;恢復減數[R1]的原始值
    MOV C,F0 ;恢復借位標志
    RET
    NEG1: MOV A,R0 ;[R1]十進制取補子程序入口
    XCH A,R1 ;交換指針
    XCH A,R0
    LCALL NEG ;通過[R0]實現[R1]取補
    MOV A,R0
    XCH A,R1 ;換回指針
    XCH A,R0
    RET
     
    (3) 標號: NEG 功能:多字節BCD碼取補

    多字節

    入口條件:字節數在R7中,操作數在[R0]中。
    出口信息:結果仍在[R0]中。
    影響資源:PSW、A、R2、R3 堆棧需求: 2字節
    NEG: MOV A,R7 ;取(字節數減一)至R2中
    DEC A
    MOV R2,A
    MOV A,R0 ;保護指針
    MOV R3,A
    NEG0: CLR C
    MOV A,#99H
    SUBB A,@R0 ;按字節十進制取補
    MOV @R0,A ;存回[R0]中
    INC R0 ;調整數據指針
    DJNZ R2,NEG0 ;處理完(R2)字節
    MOV A,#9AH ;最低字節單獨取補
    SUBB A,@R0
    MOV @R0,A
    MOV A,R3 ;恢復指針
    MOV R0,A
    RET



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 富顺县| 米易县| 梁河县| 甘肃省| 同仁县| 扬中市| 固原市| 自治县| 曲松县| 永年县| 西青区| 西华县| 康乐县| 塔城市| 临泉县| 福州市| 夏河县| 全州县| 福贡县| 成武县| 梓潼县| 河东区| 滦南县| 公主岭市| 济宁市| 旬阳县| 万源市| 田东县| 富裕县| 南宫市| 雷波县| 建德市| 香河县| 茶陵县| 报价| 昌邑市| 玛纳斯县| 万年县| 紫阳县| 盐山县| 河北区|