<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();