基于单片机汇编语言的通用多字节无符号数除法的改进.docx
- 文档编号:754498
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:9
- 大小:170.02KB
基于单片机汇编语言的通用多字节无符号数除法的改进.docx
《基于单片机汇编语言的通用多字节无符号数除法的改进.docx》由会员分享,可在线阅读,更多相关《基于单片机汇编语言的通用多字节无符号数除法的改进.docx(9页珍藏版)》请在冰豆网上搜索。
基于单片机汇编语言的通用多字节无符号数除法的改进
科研训练论文
题 目:
基于单片机汇编语言的通用多字节无符号数除法的改进
姓 名:
__ _______
专 业:
__ _机械电子工程
班 级:
___ 机电 ____
学 号:
____ ___
院(系):
_ 机电学院
指导教师:
___
完成日期:
_____
成 绩:
__________
摘要 ………………………………………………………………
(1)
1 目前常用的单片机多字节除法运算方法及其局限性 ………
(1)
2 除数为小于被除数的任意长度除法的单片机算法原理 …………………………………………………………(5)
3 程序流程图、汇编语言的实现及测试结果 …………………(6)
3。
1程序流程图及汇编语言的实现 …………………………………(7)
3。
2测试结果……………………………………………………(12)
4 结论 ……………………………………………………………(12)
摘要:
论述一种在8051系列单片机上实现的高可靠多字节除法运算的改进型算法,该算法通过改进传统的“移位-相减”算法,克服了常用的多字节无符号除法的局限性,可以针对任意长度的除数且不会发生商溢出。
经实验得到计算结果准确无误,该算法具有算法简单、适应性强、高度可靠等优点,具有很强的实用性。
单片微型计算机的应用越来越广泛,它不仅应用在各种控制上,有时也用来做数据处理运算。
现在应用广泛的51系列单片机具有强大的运算能力,可以直接选用算术运算指令完成单字节(8位)数据运算。
同时,它的进位(借位)标志为无符号整数算术运算提供了方便。
目前有关数据处理运算的资料比较多,然而笔者在参考关于多字节无符号数据整数除法的资料时发现,目前资料所介绍的有关程序应用范围非常小,应用时受除数长度限制比较大。
而在实际应用中,除法运算非常重要,甚至有时候要求必须快速地进行除法运算,这就要求写的除法程序力求高效、快速。
本文巧妙地利用“移位-相减”法,以51系列单片机为例,设计了除数不受字节长度限制的单片机除法运算算法。
该算法还可以根据实际需要扩充为位数更高的多字节除数算法,也可以移植到其它的单片机平台上。
1 目前常用的单片机多字节除法运算方法及其局限性
目前,单片机多字节除法运算要求被除数为除数的双倍字长,否则除法运算就不能执行。
当被除数是除数的双倍字长时,首先比较被除数的高位字与除数的大小,如果出现被除数的高位字大于、等于除数,则认为是商溢出,置位溢出标志不执行除法操作。
如果这些条件都成立,再采用一系列相减和移位操作来执行除法运算,每“移位-相减”一次求得一位商,当余数够减时得商1,不够减时得商0,循环此步骤
直到被除数的所有位都处理完为止。
根据上述算法,设被除数为(R2R3R4R5),除数为(R6R7),商存于R4R5中,余数存于R2R3中。
相应的程序流程图如图1所示。
被除数(R2R3R4R5)的长度是4个字节时,如果除数的长度是2位的,而且被除数高位(R2R3)与除数(R6R7)比较,如果前者小于后者,这个程序可以得到正确的答案。
如果除数是3位或者被除数的高位(R2R3)大于除数(R6R7)这个程序没有办法得到运算所得的商。
因此,如果被除数是4位字节长,而除数是3位或者4位时,就无法应用这个程序来进行除法操作。
2 除数为小于被除数的任意长度除法的单片机算法原理
在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有4个字节,从上面的叙述可以发现,以前的算法在实际应用中受到了很大的限制。
因此,笔者针对以上情况,在传统的算法基础上,设计了一套新的算法,克服了上述算法中的缺点,可以适合广泛的实际需要。
下面以MCS251汇编语言进行4字节长的除法为例进行说明:
1)准备一个字节(8位)的空单元,这个空单元是最后用来存储余数最 高8位的对应单元。
2)计算被除数字长和除数字长之差,得到的值加1然后把得到的和乘以8,保存得到的积作为移位次数。
例如,如果被除数是4个字节,除数是2个字节的,((4-2)+1)×8=18H,需要移位24次。
3)判断除数最高字节是否为0,如果为0,则除数作为整体左移1个字节(8位),直到除数最高位不为0,把除数变成与被除数一样长度。
如果除数为0,置位溢出位,不执行除法运算。
4)把被除数从高位到低位一位一位地移入之前准备的空单元,以这个空单元为最高位与被除数组成一个被减数,然后采用“移位-相减”法,完成除法运算。
5)所得结果存储在连续的5个存储单元里面,高位是余数的低位,低位是商的低位,余数的长度与除数的长度是一样的,如果除数的长度是4个字节,则这5个存储单元中的高4位是S余数,最低位是商,如果除数的长度是3个字节,那么这5个存储单元中的高3位是余数,低2位是商,如此类推。
3 程序流程图、汇编语言的实现及测试结果
3。
1 程序流程图及汇编语言的实现
在研制单片机应用系统时大多采用汇编语言作为软件工具,本文所用的例子均为汇编语言编写。
被除数是4字节长的除法算法流程图如图2,
程序如下:
MOVB,#08H
CJNER0,#00H,DVDL
MOVB,#10H
CLRA
XCHA,R3
XCHA,R2
XCHA,R1
XCHA,R0
CJNER0,#00H,DVDL
CLRA
XCHA,R2
XCHA,R1
XCHA,R0
MOVB,#18H
CJNER0,#00H,DVDL
CLRA
XCHA,R1
XCHA,R0
MOVB,#20H
CJNER0,#00H,DVDL
SETBOV
LJMPEND_DIV
DVDL:
MOVDPL,#00H
DVDL2:
CLRC
MOVA,R7
RLCA
MOVR7,A
MOVA,R6
RLCA
MOVR6,A
XCHA,R5
RLCA
XCHA,R5
XCHA,R4
RLCA
XCHA,R4
XCHA,DPL
RLCA
XCHA,DPL
JCDVDL1
DVDL4:
SUBBA,R3
MOVA,R5
SUBBA,R2
MOVA,R4
SUBBA,R1
MOVA,DPL
SUBBA,R0
JCDVDL3
DVDL1:
CLRC
MOVA,R6
SUBBA,R3
MOVR6,A
MOVA,R5
SUBBA,R2
MOVR5,A
MOVA,R4
SUBBA,R1
MOVR4,A
MOVA,DPL
SUBBA,R0
MOVDPL,A
INCR7;商的低位置1
DVDL3:
DJNZB,DVDL2
END_DIV:
MOVR3,DPL
RET
程序说明:
本程序中(R4R5R6R7)存放被除数,(R0R1R2R3)存放除数,结果存放在(R3R4R5R6R7):
当除数的长度为4字节时,(R3R4R5R6)是余数,(R7)是商;当除数的长度是3字节时,(R3R4R5)是余数,(R6R7)是商;当除数的长度是2字节时,(R3R4)是余数,(R5R6R7)是商;当除数的长度是1字节时,(R3)是余数,(R4R5R6R7)是商。
限于篇幅,程序里没有做把余数和商放到特定的RAM的步骤,但是相信这并不妨碍运用本程序。
3。
2 测试结果
图3、图4、图5、图6、图7分别是对除数是0字节(除数为0)、1字节、2字节、3字节、4字节时测试所得的结果。
这里被除数都是0FFFFFFFFH,4个字节长
图3中,除数为0,运算结果为溢出OV为1,结果正确。
图4中,除数为0FFH,运算结果是1010101H,余数为0,结果正确。
图5中,除数为0FFFFH,运算结果是10001H,余数为0,结果正确。
图6中,除数为0FFFFFFH,运算结果是100H,余数为0FFH,结果正确。
图7中,除数为0FFFFFFFH,运算结果是10H,余数为0FH,结果正确。
综上所述,测试结果与实际结果完全一致。
4 结论
试验结果表明,本算法通过巧妙地利用并改进了“移位-相减”法,实现单片机多字节除法的运算,使程序具有较高的可靠性,克服了商溢出及除数长度只能是被除数一半的缺点,并且程序的代码也较为简单,可以移植到其他单片机平台上。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 汇编语言 通用 多字 符号 除法 改进