如何用51单片机实现一段乘**能的指令

[复制链接]
9982|25
 楼主| 还我今生 发表于 2007-11-9 08:37 | 显示全部楼层 |阅读模式
不使用51自带的MUL指令,来实现一段A*B的功能,要求结果放在A,B中
请各位大虾研究一下
xwj 发表于 2007-11-9 10:19 | 显示全部楼层

偶来解释下二进制乘法原理:

就是左移(进位)8次,每次最高位为1则加进去,8位移完就得出乘积了
实际上和我们做10进制的乘法是一样的,只不过这里的进制是2罢了

比如5×6,转成二进制就是0101×0110
十进制乘法大家都会做,我们他当成十进制101×110来计算下看看
公式就是:

    4位乘积=被乘数×千位+被乘数×百位+被乘数×十位+被乘数×个位
既0101×0110=101×0000+101×100+101×10+101×0  
变化下:
    4位乘积=被乘数×千位数×1000+被乘数×百位数×100+被乘数×10位数×10+被乘数×个位数
既0101×0110=101×(0×1000)+101×(1×100) +101×(1×10)+101×0

再变化下:
    4位乘积=被乘数×千位数×10×10×10+被乘数×百位数×10×10+被乘数×10位数×10+被乘数×个位数
既0101×0110=101×(0×10×10×10)+101×(1×10×10)+101×(1×10)+101×0
           =((((101×0)×10)+(101×1))×10+(101×1))×10+101×0

我们可以看到,实际上乘法结果就是被乘数乘以每一位乘以模(10)的N次方的累计和(其实左移位就是进位啦,看得出来吗?)

而换成2进制的话很简单,把10读成二进制2就行了,结果还是:
    4位乘积=被乘数×千位数×10×10×10+被乘数×百位数×10×10+被乘数×10位数×10+被乘数×个位数
既0101×0110=101×(0×10×10×10)+101×(1×10×10)+101×(1×10)+101×0
           =((((101×0)×2)+(101×1))×2+(101×1))×2+101×0
           
           由于乘2就是移位(进位),把上面的公式中乘2换成左移位就行了
--实际上二进制和十进制都是一样的算法,只不过一个移位是2倍,另一个移位是十倍罢了

PS:
由于二进制只有0和1,乘2可以用左移一位来实现,也可以“自己加自己”来实现的,很多CPU的左移指令和“自己加自己”一样






用软件乘法要耗费很多CPU时间,只要CPU有硬件乘法器,当然是用硬件的啦,哪会快很多的。
HWM 发表于 2007-11-9 08:57 | 显示全部楼层

用移位加的方法,但有必要吗?

 楼主| 还我今生 发表于 2007-11-9 09:24 | 显示全部楼层

只是想通过这个程序来增加对51的了解,并没有必要不必要的

HWM 发表于 2007-11-9 09:34 | 显示全部楼层

其实这是二进制乘法的基本算法(无乘法指令),有普遍性。

lsqdesign 发表于 2007-11-9 09:57 | 显示全部楼层

移位+累加

移位+累加
gyt 发表于 2007-11-9 10:08 | 显示全部楼层

功课?

HWM 发表于 2007-11-9 10:33 | 显示全部楼层

其实很简单,原理小学就教过,会手算多位数乘法的就应该

 楼主| 还我今生 发表于 2007-11-9 10:33 | 显示全部楼层

回(xwj)这个移位原理我昨天也想了

只不过,对单片机了解实在有限,实现起来有点累,
可否帮我写段程序来看看,先谢了:)
一直搞得是模拟电路.不过兴趣一直在嵌入式系统的开发,
可惜机会不太好,找个那样的工作也不好找,心里其实挺郁闷.
ayb_ice 发表于 2007-11-9 10:34 | 显示全部楼层

移位+累加

HWM 发表于 2007-11-9 10:36 | 显示全部楼层

楼主:这都不会玩还想玩嵌入式系统,还是罢了。

 楼主| 还我今生 发表于 2007-11-9 10:40 | 显示全部楼层

基础课我都学了,只不过没怎么实践过

我同学做了两年嵌入式系统,还不是从一点不懂学到现在已经很厉害了.
不过一个好的环境和机会比较重要.HWM你不要来打击我啊,我已经很郁闷拉,怎么着你也说句鼓励的话是不是.
xwj 发表于 2007-11-9 10:43 | 显示全部楼层

那就去实践啊,不然岂不是永远都不懂?

HWM 发表于 2007-11-9 10:45 | 显示全部楼层

re 楼主:那就踏踏实实地自己写一下相应的程序,

别老是请别人写。

祝你有个好的开始。
alice84 发表于 2007-11-9 10:45 | 显示全部楼层

还我今生 ,我来鼓励你吧!

 楼主| 还我今生 发表于 2007-11-9 10:52 | 显示全部楼层

谢谢alice84的支持,看来真得下点苦功拉:)

alice84真是挺有人情味的啊
alice84 发表于 2007-11-9 10:59 | 显示全部楼层

现在才知道偶有人情味??

ra_rabbit 发表于 2007-11-9 10:59 | 显示全部楼层

鼓励鼓励

HWM 发表于 2007-11-9 11:02 | 显示全部楼层

记得我的小学老师人情味更少,呵呵。

 楼主| 还我今生 发表于 2007-11-9 11:03 | 显示全部楼层

alice84是不是属小猪的啊

看你经常喜欢发些小猪的图片
您需要登录后才可以回帖 登录 | 注册

本版积分规则

218

主题

1381

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部