打印

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

[复制链接]
8967|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
还我今生|  楼主 | 2007-11-9 08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来自 2楼
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的了解,并没有必要不必要的

使用特权

评论回复
5
HWM| | 2007-11-9 09:34 | 只看该作者

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

使用特权

评论回复
6
lsqdesign| | 2007-11-9 09:57 | 只看该作者

移位+累加

移位+累加

使用特权

评论回复
7
gyt| | 2007-11-9 10:08 | 只看该作者

功课?

使用特权

评论回复
8
HWM| | 2007-11-9 10:33 | 只看该作者

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

使用特权

评论回复
9
还我今生|  楼主 | 2007-11-9 10:33 | 只看该作者

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

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

使用特权

评论回复
10
ayb_ice| | 2007-11-9 10:34 | 只看该作者

移位+累加

使用特权

评论回复
11
HWM| | 2007-11-9 10:36 | 只看该作者

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

使用特权

评论回复
12
还我今生|  楼主 | 2007-11-9 10:40 | 只看该作者

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

我同学做了两年嵌入式系统,还不是从一点不懂学到现在已经很厉害了.
不过一个好的环境和机会比较重要.HWM你不要来打击我啊,我已经很郁闷拉,怎么着你也说句鼓励的话是不是.

使用特权

评论回复
13
xwj| | 2007-11-9 10:43 | 只看该作者

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

使用特权

评论回复
14
HWM| | 2007-11-9 10:45 | 只看该作者

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

别老是请别人写。

祝你有个好的开始。

使用特权

评论回复
15
alice84| | 2007-11-9 10:45 | 只看该作者

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

使用特权

评论回复
16
还我今生|  楼主 | 2007-11-9 10:52 | 只看该作者

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

alice84真是挺有人情味的啊

使用特权

评论回复
17
alice84| | 2007-11-9 10:59 | 只看该作者

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

使用特权

评论回复
18
ra_rabbit| | 2007-11-9 10:59 | 只看该作者

鼓励鼓励

使用特权

评论回复
19
HWM| | 2007-11-9 11:02 | 只看该作者

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

使用特权

评论回复
20
还我今生|  楼主 | 2007-11-9 11:03 | 只看该作者

alice84是不是属小猪的啊

看你经常喜欢发些小猪的图片

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

218

主题

1382

帖子

1

粉丝