新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 一種實用的單片機多字節(jié)除法程序

一種實用的單片機多字節(jié)除法程序

作者: 時間:2012-08-04 來源:網絡 收藏
對于上述算法,其思想是正確的。
但在DICE-51仿真系統(tǒng)具體操作中還存在部分問題。
下面我以DICE系列的DICE-51仿真系統(tǒng)軟件為例,
給出四除三字節(jié)的算法的程序代碼清單已在DICE-51仿真系統(tǒng)軟件調試通過。
首先,因為DICE-51單片機仿真系統(tǒng)軟件在做除法運算時,若產生借位,不能置位,
所以要用CJNE比較指令進行置位運算。;定義被除數單元DIVDLL    EQU    40HDIVDLH    EQU    41HDIVDHL    EQU    42HDIVDHH    EQU    43H;定義除數單元DIVDL     EQU    44HDIVDM     EQU    45HDIVDH     EQU    46H;定義余數單元TEMPL     EQU    50HTEMPM     EQU    51HTEMPH     EQU    52H;定義輔助單元FZ1       EQU    47HFZ2       EQU    48HDIV0:  MOV   A,DIVDH             ;以下四行判斷除數是否為零ORL   A,DIVDMORL   A,DIVDLJNZ   DIV1                      ;如果(A)不等于0,則跳轉;否則順序執(zhí)行SETB  OV                       ;除數為零,置溢出標志位OV為1,程序結束SJMP  LOOP1DIV1: MOV   TEMPL,#00H         ;余數單元清零MOV   TEMPM,#00HMOV   TEMPH,#00H MOV   B,#20H                   ;置循環(huán)次數32次DIV2: CLR   C                              ;進位位清零MOV   A,DIVDLL       ;以下三行被除數最低字節(jié)左移一位(帶進位)RLC   AMOV   DIVDLL,AMOV   A,DIVDLH      ;以下三行被除數低16位高字節(jié)左移一位(帶進位)RLC   AMOV   DIVDLH,AMOV   A,DIVDHL      ;以下三行被除數高16位低字節(jié)左移一位(帶進位)RLC   AMOV   DIVDHL,AMOV   A,DIVDHH       ;以下三行被除數最高字節(jié)左移一位(帶進位)RLC   AMOV   DIVDHH,AMOV   A,TEMPL       ;以下三行余數低字節(jié)左移一位(帶進位)                    RLC   AMOV   TEMPL,AMOV   A,TEMPM       ;以下三行余數中間字節(jié)左移一位(帶進位)RLC   AMOV   TEMPM,AMOV   A,TEMPH       ;以下三行余數高字節(jié)左移一位(帶進位)RLC   AMOV   TEMPH,AMOV   A,TEMPL       ;把余數最低字節(jié)送到累加器A中CLR   C                               SUBB  A,DIVDL        ;用余數減去除數MOV   R7,A            ;低字節(jié)相減結果送R7保存MOV   A,TEMPLCJNE  A,DIVDL,LP     ;通過比較運算實現因軟件設計原因相減不能借位;而產生的借位LP1:   MOV   A,DIVDM                         ADDC  A,#00HMOV   FZ1,A         ;計算除數中間字節(jié)與低字節(jié)相減產生的進位位之和;將結果送FZ1保存MOV   A,TEMPMCJNE  A,FZ1,LP2      ;通過比較運算實現因軟件設計原因相減不能借位;而產生的借位LP2:      PUSH  PSW            ;對程序狀態(tài)字PSW壓棧保護MOV   F0,C              ;將C的值送給F0保存CLR   CMOV   A,TEMPMSUBB  A,FZ1   MOV   R6,A            ;中間字節(jié)帶進位相減結果送R6保存MOV   C,F0POP   PSW             ;程序狀態(tài)字PSW彈棧,恢復現場MOV   A,DIVDHADDC  A,#00HMOV   FZ2,A       ;計算除數高字節(jié)與中間字節(jié)相減產生的進位位之和;將結果送FZ2保存MOV   A,TEMPHCJNE  A,FZ2,LP3     ;通過比較運算實現因軟件設計原因相減不能借位;而產生的借位LP3:      PUSH  PSW                     ;對程序狀態(tài)字PSW壓棧保護MOV   F0,CCLR   CMOV   A,TEMPHSUBB  A,FZ2                       ;高字節(jié)帶進位相減結果送R5保存MOV   R5,AMOV   C,F0POP   PSW                          ;程序狀態(tài)字PSW彈棧,恢復現場JC    DIV3                  ;不夠減,則跳轉到DIV3DIV4:    MOV   TEMPL,R7             ;夠減,刷新余數單元                       MOV   TEMPM,R6MOV   TEMPH,R5MOV   R0,#DIVDLL               ;夠減,將被除數最低位置1MOV   A,@R0INC   AXCH   A,@R0DIV3:  DJNZ  B,DIV2      ;判斷B是否為零,若為零,循環(huán)結束;否則,跳轉繼續(xù)循環(huán)CLR   F0LOOP1:NOPRET

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉