| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
跟大牛学C++学算法数据结构
共有 621 人关注过本帖
标题:关于 乘法运算的问题
只看楼主 加入收藏
脑壳疼
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-4-22
结帖率:100%
  已结贴   问题点数:20  回复次数:2   
关于 乘法运算的问题


如何 不用 MULWF 和 MULLW 做乘法运算
是用 and 和 or 嘛?
谢谢各位大佬

附件: 您没有浏览附件的权限,请 登录注册
2018-04-27 23:18
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:204
专家分:1362
注 册:2016-5-15
  得分:10 
加法吧,用意是将X加Y次,若X = 9 , Y = 4
X * Y = 9 * 4 = 9 + 9 + 9 + 9
假设A,B,C是暂存器,虚拟码大概是:


 读 x 入 A
 读 x to B
 读 y to C
RE:
 C 减 1
 若结果 = 0 则跳 OK
 加 A,B
 跳 RE
OK:


     
2018-04-28 06:56
wmf2014
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:166
帖 子:1753
专家分:9844
注 册:2014-12-6
  得分:10 
@Valenciax解答的是一种最容易理解和实现的方法,但通常使用左移相加效率高些,以8位乘法运算为例,被乘数叠加乘数次数最多会循环255次,如果使用左移相加则最多循环8次即可,实例代码如下:
    xor ax,ax   //计算结果
    mov bx,9    //被乘数
    mov cx,4    //乘数
lp2:shr cx,1    //乘数右移一位,最低位进入cf标志位
    jnc lp1     //最低位为0则跳转
    add ax,bx   //最低位不为0则加上被乘数
lp1:shl bx,1    //被乘数左移一位
    cmp cx,0    //乘数是否为0
    jnz lp2     //不为0继续累加
    int 3       //退出循环后ax即为计算结果,这种情况下循环2次即得到结果

能编个毛线衣吗?
2018-04-28 15:59







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047354 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved