新闻中心

EEPW首页>嵌入式系统>设计应用> 一种实用的单片机多字节除法程序

一种实用的单片机多字节除法程序

作者: 时间:2012-08-04 来源:网络 收藏
对于上述算法,其思想是正确的。
但在DICE-51仿真系统具体操作中还存在部分问题。
下面我以DICE系列的DICE-51仿真系统软件为例,
给出四除三字节的算法的程序代码清单已在DICE-51仿真系统软件调试通过。
首先,因为DICE-51单片机仿真系统软件在做除法运算时,若产生借位,不能置位,
所以要用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,则跳转;否则顺序执行SETB OV ;除数为零,置溢出标志位OV为1,程序结束SJMP LOOP1DIV1: MOV TEMPL,#00H ;余数单元清零MOV TEMPM,#00HMOV TEMPH,#00H MOV B,#20H ;置循环次数32次DIV2: CLR C ;进位位清零MOV A,DIVDLL ;以下三行被除数最低字节左移一位(带进位)RLC AMOV DIVDLL,AMOV A,DIVDLH ;以下三行被除数低16位高字节左移一位(带进位)RLC AMOV DIVDLH,AMOV A,DIVDHL ;以下三行被除数高16位低字节左移一位(带进位)RLC AMOV DIVDHL,AMOV A,DIVDHH ;以下三行被除数最高字节左移一位(带进位)RLC AMOV DIVDHH,AMOV A,TEMPL ;以下三行余数低字节左移一位(带进位) RLC AMOV TEMPL,AMOV A,TEMPM ;以下三行余数中间字节左移一位(带进位)RLC AMOV TEMPM,AMOV A,TEMPH ;以下三行余数高字节左移一位(带进位)RLC AMOV TEMPH,AMOV A,TEMPL ;把余数最低字节送到累加器A中CLR C SUBB A,DIVDL ;用余数减去除数MOV R7,A ;低字节相减结果送R7保存MOV A,TEMPLCJNE A,DIVDL,LP ;通过比较运算实现因软件设计原因相减不能借位;而产生的借位LP1: MOV A,DIVDM ADDC A,#00HMOV FZ1,A ;计算除数中间字节与低字节相减产生的进位位之和;将结果送FZ1保存MOV A,TEMPMCJNE A,FZ1,LP2 ;通过比较运算实现因软件设计原因相减不能借位;而产生的借位LP2: PUSH PSW ;对程序状态字PSW压栈保护MOV F0,C ;将C的值送给F0保存CLR CMOV A,TEMPMSUBB A,FZ1 MOV R6,A ;中间字节带进位相减结果送R6保存MOV C,F0POP PSW ;程序状态字PSW弹栈,恢复现场MOV A,DIVDHADDC A,#00HMOV FZ2,A ;计算除数高字节与中间字节相减产生的进位位之和;将结果送FZ2保存MOV A,TEMPHCJNE A,FZ2,LP3 ;通过比较运算实现因软件设计原因相减不能借位;而产生的借位LP3: PUSH PSW ;对程序状态字PSW压栈保护MOV F0,CCLR CMOV A,TEMPHSUBB A,FZ2 ;高字节带进位相减结果送R5保存MOV R5,AMOV C,F0POP PSW ;程序状态字PSW弹栈,恢复现场JC DIV3 ;不够减,则跳转到DIV3DIV4: MOV TEMPL,R7 ;够减,刷新余数单元 MOV TEMPM,R6MOV TEMPH,R5MOV R0,#DIVDLL ;够减,将被除数最低位置1MOV A,@R0INC AXCH A,@R0DIV3: DJNZ B,DIV2 ;判断B是否为零,若为零,循环结束;否则,跳转继续循环CLR F0LOOP1:NOPRET

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭