注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
hotpower的个人空间 https://home.eeworld.com.cn/space-uid-41614.html [收藏] [复制] [分享] [RSS]
日志

一个精巧的两字节除法子程序

已有 804 次阅读2008-10-24 15:13

一个精巧的两字节除法子程序

条件:8个unsigned char型数据相加,高位在R2中,低位在R3中
出口:将此数除以8,余数四舍五入

MOV    A,R2        ;(R2,R3)/8
SWAP    A
RL    A
XCH    A,R3
SWAP    A
RL    A
ADD    A,#80H        ;四舍五入
ANL    A,#1FH
ADDC    A,R3
RET                    ;结果在A中

下面是具体分析:由于被操作数是8个无符号字符型数据相加,固其高位(R2)里D3位及其以上必为0。
现在将其分为三部分别想办法:R2的低四位,R3的高四位,R3的低四位。

将R2的低四位换到高四位,相当于把低四位乘以16,左移一位,又相当于乘以2,则原数被乘以了32。R2的真实意义是(R2)*256,现在我们将其看作一个普通的单字节数,则相当于将其除以了256。先乘以32再除以256,则等于将原数除以8。

将R3的高四位移到低四位,完成除以16,左移一位,相当于乘以2,最终完成除以8。

R3的低四位,其中的D3位,其权值正好为8,通过左移,移到新数的D0位(形成商加1——D3=1时;或不加——D3=0时)。R3的D2~D0位是余数,如为4~7时要五入;如为0~3时要四舍。分析可知,当D2为1时,余数为4~7;D2为0时,余数为0~3。在对R3进行左移操作时,D2已移到最高位,现对移位的结果加#80H,D2为1时,必置位CY,通过ADDC指令加进位形成五入,否则四舍。
ANL A,#1FH,因为R3/8,商的有效位为D4~D0,其它位在运算时要使用,但取结果时必须屏蔽掉。
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章