打印

【求助】多字节有符号二进制数乘法(汇编)

[复制链接]
5148|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lirui5528|  楼主 | 2010-7-23 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是一个单片机初学者(在学校学了三个月),最近正在看汇编的子程序集。但是看到乘法这一节就有很多困难了。主要是用加法和左移指令实现乘法(程序中没有用到乘法指令MUL.。这个相信对各位老鸟来说简直是易如反掌,但是对我这个菜鸟中的菜鸟来说确实很麻烦的,呵呵,不好意思,具体请教几个问题,恳请各位大虾能够帮帮忙


1. 用加法和左移指令代替乘法指令的数学原理是什么?能不能举例说明一下?


2. 我这本书上只有程序,没有一个注释,所以看不懂,而且好像还有错,因为它用的是右移指令。哪位大虾能不能给我提供一个带详细注释的程序,就是那个利用左移和加法指令的那个,不要出现乘法指令。(多字节无符号相乘就可以,我已经看懂了那个关于确定符号位的部分)


以上就是我的问题,希望各位高人能够指导一下我。不胜感激。


PS:因为我是一个大专生,数学只学习了两个学期。是不是因为我的数学基础比较差,才会造成我现在出现这些问题呢?如果是,我又该学习哪方面的数学知识才能过提高呢?

相关帖子

沙发
宇宙飞船| | 2010-7-24 00:14 | 只看该作者
左移一位相当于乘以2,右移一位相当于除以2

二进制转十进制的流程就是,首先把结果清零,等待转换的字节中但凡见到1就把结果乘以2。

口决就是转换字节中,高位在前向左移,1动0不动,结果翻一翻,大于9就作进位调整。

数学原理就是:
A=2^n + 2^(n-1) + 2^(n-2) +.... 2^0
例如:(十进制 ) 6 = 110  (二进制)
                              =2^2 + 2^1+ 2^0  //高位在前,见1结果就乘以2

使用特权

评论回复
板凳
宇宙飞船| | 2010-7-24 02:03 | 只看该作者
本帖最后由 宇宙飞船 于 2010-7-24 02:12 编辑

多字节有符号数乘法基本流程如下:
1:求被乘数符号,
(是负,被乘数求补,否,原封不动,)
2:求乘数符号(同上)
3:求积的符号
4:无符号数乘法(若积为负,积求补,否,原封不动)

使用特权

评论回复
地板
xuyiyi| | 2010-7-24 05:51 | 只看该作者
顶!
飞船改邪归正,热心帮忙菜鸟~~~

使用特权

评论回复
5
lirui5528|  楼主 | 2010-7-24 10:21 | 只看该作者
左移一位相当于乘以2,这个我是知道的。
但是我现在的问题是,我看不懂无符号数相乘的程序,里面是移位一次,相加一次,这个到底是问什么啊??
呵呵,比较菜!

使用特权

评论回复
6
xuyiyi| | 2010-7-24 10:50 | 只看该作者
本帖最后由 xuyiyi 于 2010-7-24 10:51 编辑

呵呵!
你不菜,谦虚好学,下一个匠人一定是你!

移位一次,本质上是取出其中一位数据(二进制数),
相加一次,本质上是将取出的一位数据(二进制数)累加,
连续操作N次(二进制数的总位数),
最终的累加结果就是相乘值。

举个例子: 6*5,  即二进制数 110 * 101,
   将 101 左移一次,取出最高位 1,
   最高位是1, 累加器加一次被乘数, 即 累加器 + 110 = 110;
   将 101 再左移一次,取出下一最高位 0,  同时累加器跟着左移一次,  累加器 值为 1100,  
   最高位是0, 累加器空操作一次(加一次0), 即 累加器 + 000 = 1100;
   将 101 再左移一次,取出下一最高位 1,  同时累加器跟着左移一次,  累加器 值为 11000,  
   最高位是1, 累加器加一次被乘数, 即 累加器 + 110 = 11110;

最终的累加器之值 11110(二进制数), 即十进制值 30.

使用特权

评论回复
7
kooshare| | 2010-7-24 16:06 | 只看该作者
可以看看匠人笔记,里面有专门乘法和除法的列子,很经典~~~~

使用特权

评论回复
8
linbei1988| | 2010-7-24 21:52 | 只看该作者
失礼失礼:o一直没用过乘法,今天看到6楼的方法真是茅塞顿开

使用特权

评论回复
9
lirui5528|  楼主 | 2010-7-24 22:10 | 只看该作者
6# xuyiyi
呵呵,谢谢啊,我已经按照你举得例子,然后再参照网上的一些讲解,已经基本明白了乘法的原理以及怎样写程序。很是感谢你的点拨!

使用特权

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

本版积分规则

0

主题

142

帖子

1

粉丝