注册 登录
编程论坛 汇编论坛

关于 乘法运算的问题

脑壳疼 发布于 2018-04-27 23:18, 2071 次点击

只有本站会员才能查看附件,请 登录

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

2 回复
#2
Valenciax2018-04-28 06:56
加法吧,用意是将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:


     
#3
wmf20142018-04-28 15:59
@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次即得到结果
1