- 10
- 0
- 约6.32千字
- 约 3页
- 2019-07-14 发布于江苏
- 举报
PIC1
6单片机中双字节乘法子程序的蔓正
●福州大学 江禾Ⅱ
⑩ MoVFACCbL0,W
美国Microchip公司的PICl6系列单片机以其功能
齐全、品种多、可靠性高著称,得到国内越来越多的相关技 ⑩ MOVWFACCdL0
术人员的青睐。但是,PICl6系列单片机中无乘除指令,⑩ CLRFAOCbHI
因此必须用加减和移位的办法实现乘法与除法运算。国 ④ CLRFACCbL0
⑨ RETURN
内许多教材引用了Microchip公司的相关子程序或自编
;双字节加,ACCb+Acca一ACCb
了通用子程序,给从事PIC系列单片机开发的人员带来了
MOVF
◎D_-ADD ACCaL0,W
便利。但由于Microchip公司早期对外发布的子程序中
AC(、bLo,F
④创)亡IWF ;先加低字节
存在错误,使得国内出版的几乎所有的PICl6系列单片机
BTFSCSTATUS,C
③ ;判断是否有进位
教材及文献中的无符号双字节乘法子程序都存在错
INCFACCbHI,F
③ ;有进位高字节加1
误口…。笔者最近在Microchip公司网站上新下载了该子 MOVFACCaHI,W
⑦
程序口],发现已进行了修改,但仍存在错误,因此有必要对 ;加高字节
◎川]【)ⅥⅢ。Aa璃HI,F
此做一个更正,否则若在产品中引用这个错误的程序,将 ⑦ RETURN
导致不可预料的后果。 可以看到,该乘法子程序使用的是移位及相加的办
法:每次循环时判断乘数右移出的那一位是否为1,若为
1错误的由来
1则将部分积加上被乘数,然后将部分积带标志位右移。
在上述文献中,无符号双字节乘法S版本(占用程序
空间少,Small;另一版本为F版本,即运行速度快,Fast)
的程序如下(方便起见,程序加上行号):
;双字节乘,ACCa(16位)×ACCb(16位),结果放入到ACCb、
;ACCc(共32位)
DWF
CALLSETUP
①DLMPYS
志位C,这样在其后的调用返回中第⑥行指令
RRF ACCdHI。F
②ML00P ;乘数右移1次
原创力文档

文档评论(0)