新聞中心

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

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

作者: 時(shí)間:2012-08-04 來源:網(wǎng)絡(luò) 收藏
對于上述算法,其思想是正確的。
但在DICE-51仿真系統(tǒng)具體操作中還存在部分問題。
下面我以DICE系列的DICE-51仿真系統(tǒng)軟件為例,
給出四除三字節(jié)的算法的程序代碼清單已在DICE-51仿真系統(tǒng)軟件調(diào)試通過。
首先,因?yàn)镈ICE-51單片機(jī)仿真系統(tǒng)軟件在做除法運(yùn)算時(shí),若產(chǎn)生借位,不能置位,
所以要用CJNE比較指令進(jìn)行置位運(yùn)算。;定義被除數(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,則跳轉(zhuǎn);否則順序執(zhí)行SETB  OV                       ;除數(shù)為零,置溢出標(biāo)志位OV為1,程序結(jié)束SJMP  LOOP1DIV1: MOV   TEMPL,#00H         ;余數(shù)單元清零MOV   TEMPM,#00HMOV   TEMPH,#00H MOV   B,#20H                   ;置循環(huán)次數(shù)32次DIV2: CLR   C                              ;進(jìn)位位清零MOV   A,DIVDLL       ;以下三行被除數(shù)最低字節(jié)左移一位(帶進(jìn)位)RLC   AMOV   DIVDLL,AMOV   A,DIVDLH      ;以下三行被除數(shù)低16位高字節(jié)左移一位(帶進(jìn)位)RLC   AMOV   DIVDLH,AMOV   A,DIVDHL      ;以下三行被除數(shù)高16位低字節(jié)左移一位(帶進(jìn)位)RLC   AMOV   DIVDHL,AMOV   A,DIVDHH       ;以下三行被除數(shù)最高字節(jié)左移一位(帶進(jìn)位)RLC   AMOV   DIVDHH,AMOV   A,TEMPL       ;以下三行余數(shù)低字節(jié)左移一位(帶進(jìn)位)                    RLC   AMOV   TEMPL,AMOV   A,TEMPM       ;以下三行余數(shù)中間字節(jié)左移一位(帶進(jìn)位)RLC   AMOV   TEMPM,AMOV   A,TEMPH       ;以下三行余數(shù)高字節(jié)左移一位(帶進(jìn)位)RLC   AMOV   TEMPH,AMOV   A,TEMPL       ;把余數(shù)最低字節(jié)送到累加器A中CLR   C                               SUBB  A,DIVDL        ;用余數(shù)減去除數(shù)MOV   R7,A            ;低字節(jié)相減結(jié)果送R7保存MOV   A,TEMPLCJNE  A,DIVDL,LP     ;通過比較運(yùn)算實(shí)現(xiàn)因軟件設(shè)計(jì)原因相減不能借位;而產(chǎn)生的借位LP1:   MOV   A,DIVDM                         ADDC  A,#00HMOV   FZ1,A         ;計(jì)算除數(shù)中間字節(jié)與低字節(jié)相減產(chǎn)生的進(jìn)位位之和;將結(jié)果送FZ1保存MOV   A,TEMPMCJNE  A,FZ1,LP2      ;通過比較運(yùn)算實(shí)現(xiàn)因軟件設(shè)計(jì)原因相減不能借位;而產(chǎn)生的借位LP2:      PUSH  PSW            ;對程序狀態(tài)字PSW壓棧保護(hù)MOV   F0,C              ;將C的值送給F0保存CLR   CMOV   A,TEMPMSUBB  A,FZ1   MOV   R6,A            ;中間字節(jié)帶進(jìn)位相減結(jié)果送R6保存MOV   C,F0POP   PSW             ;程序狀態(tài)字PSW彈棧,恢復(fù)現(xiàn)場MOV   A,DIVDHADDC  A,#00HMOV   FZ2,A       ;計(jì)算除數(shù)高字節(jié)與中間字節(jié)相減產(chǎn)生的進(jìn)位位之和;將結(jié)果送FZ2保存MOV   A,TEMPHCJNE  A,FZ2,LP3     ;通過比較運(yùn)算實(shí)現(xiàn)因軟件設(shè)計(jì)原因相減不能借位;而產(chǎn)生的借位LP3:      PUSH  PSW                     ;對程序狀態(tài)字PSW壓棧保護(hù)MOV   F0,CCLR   CMOV   A,TEMPHSUBB  A,FZ2                       ;高字節(jié)帶進(jìn)位相減結(jié)果送R5保存MOV   R5,AMOV   C,F0POP   PSW                          ;程序狀態(tài)字PSW彈棧,恢復(fù)現(xiàn)場JC    DIV3                  ;不夠減,則跳轉(zhuǎn)到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)結(jié)束;否則,跳轉(zhuǎn)繼續(xù)循環(huán)CLR   F0LOOP1:NOPRET

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉